LeRobot documentation

๐Ÿค— PEFT๋ฅผ ํ™œ์šฉํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ํšจ์œจ์  ๋ฏธ์„ธ ์กฐ์ •

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

๐Ÿค— PEFT๋ฅผ ํ™œ์šฉํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ํšจ์œจ์  ๋ฏธ์„ธ ์กฐ์ •

๐Ÿค— PEFT(Parameter-Efficient Fine-Tuning)๋Š” ์‚ฌ์ „ ํ•™์Šต๋œ ์ •์ฑ…(์˜ˆ: SmolVLA, ฯ€โ‚€, โ€ฆ)๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ์‚ฌ์ „ ํ•™์Šต ๋ชจ๋ธ์„ ๋ชจ๋ธ์˜ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•™์Šตํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ์ž‘์—…์— ํšจ์œจ์ ์œผ๋กœ ์ ์‘์‹œํ‚ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๊ธฐ์กด ๋ชจ๋ธ๊ณผ ๋™๋“ฑํ•œ ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

PEFT ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด lerobot[peft] ์„ ํƒ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.

์ ์‘์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๐Ÿค— PEFT ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

SmolVLA ํ•™์Šต

์ด ์„น์…˜์—์„œ๋Š” PEFT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ libero ๋ฐ์ดํ„ฐ์…‹์—์„œ ์‚ฌ์ „ ํ•™์Šต๋œ SmolVLA ์ •์ฑ…์„ ํ•™์Šตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•จ์„ ์œ„ํ•ด libero_spatial ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ๋งŒ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ํšจ์œจ์  ๋ฏธ์„ธ ์กฐ์ • ๋Œ€์ƒ ๋ชจ๋ธ๋กœ lerobot/smolvla_base๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

lerobot-train \
 --policy.path=lerobot/smolvla_base \
 --policy.repo_id=your_hub_name/my_libero_smolvla \
 --dataset.repo_id=HuggingFaceVLA/libero \
 --policy.output_features=null \
 --policy.input_features=null \
 --policy.optimizer_lr=1e-3 \
 --policy.scheduler_decay_lr=1e-4 \
 --env.type=libero \
 --env.task=libero_spatial \
 --steps=100000 \
 --batch_size=32 \
 --peft.method_type=LORA \
 --peft.r=64 \
 --peft.lora_alpha=64

--peft.method_type ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  PEFT ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” LoRA(Low-Rank Adapter)๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ์•„๋งˆ๋„ ์ง€๊ธˆ๊นŒ์ง€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” fine-tuning ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Low-rank adaption์€ ์ „์ฒด weight matrix ๋Œ€์‹  ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์€ rank๋ฅผ ๊ฐ€์ง„ matrix๋งŒ fine-tuneํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด rank๋Š” --peft.r ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, LoRA scaling factor๋Š” --peft.lora_alpha๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ scaling = lora_alpha / r). rank๊ฐ€ ๋†’์„์ˆ˜๋ก full fine-tuning์— ๋” ๊ฐ€๊นŒ์›Œ์ง‘๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ๋” ๋ณต์žกํ•œ ๋ฐฉ๋ฒ•๋ก ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ, ํŠน์ • PEFT ๋ฐฉ๋ฒ•๋ก ์˜ ์ง€์›์„ ์›ํ•˜์‹œ๋ฉด ์ด์Šˆ๋ฅผ ๋“ฑ๋กํ•ด ์ฃผ์„ธ์š”.

๊ธฐ๋ณธ์ ์œผ๋กœ PEFT๋Š” SmolVLA์˜ LM expert์—์„œ q_proj ๋ฐ v_proj ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž‘์—…์— ์ข…์†๋  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ์ƒํƒœ ๋ฐ ๋™์ž‘ ํˆฌ์˜ ํ–‰๋ ฌ๋„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ --peft.target_modules๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์ž…๋ ฅ์„ ํ™•์ธํ•˜๋ ค๋ฉด ํ•ด๋‹น PEFT ๋ฐฉ๋ฒ•์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค(์˜ˆ: LoRA์˜ target_modules ๋ฌธ์„œ). ์ผ๋ฐ˜์ ์œผ๋กœ ์ ‘๋ฏธ์‚ฌ ๋ชฉ๋ก ๋˜๋Š” ์ •๊ทœ์‹์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, q ๋ฐ v ํˆฌ์˜ ๋Œ€์‹  lm_expert์˜ MLP๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค:

--peft.target_modules='(model\.vlm_with_expert\.lm_expert\..*\.(down|gate|up)_proj|.*\.(state_proj|action_in_proj|action_out_proj|action_time_mlp_in|action_time_mlp_out))'

๋ ˆ์ด์–ด๋ฅผ ๋‹จ์ˆœํžˆ ์ ์‘์‹œํ‚ค๋Š” ๋Œ€์‹  ์™„์ „ํžˆ fine-tuneํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, --peft.full_training_modules ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ ˆ์ด์–ด ์ ‘๋ฏธ์‚ฌ ๋ชฉ๋ก์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

--peft.full_training_modules='["state_proj"]'

ํ•™์Šต๋ฅ ๊ณผ ์Šค์ผ€์ค„๋ง๋œ ๋ชฉํ‘œ ํ•™์Šต๋ฅ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒด ํŒŒ์ธํŠœ๋‹์— ์‚ฌ์šฉ๋œ ํ•™์Šต๋ฅ (์˜ˆ: 1e-4)์— ๋น„ํ•ด 10๋ฐฐ๋กœ ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: LoRA ์‚ฌ์šฉ ์‹œ 1e-3).

PEFT๋Š” ์ƒค๋“œ๋œ ๋ฉ€ํ‹ฐ GPU ํ•™์Šต(FSDP2 ๋ฐ HSDP)๊ณผ๋„ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐ GPU ํ•™์Šต์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ธฐํƒ€ ์ •์ฑ…

๋™์ผํ•œ --peft.* ํ”Œ๋ž˜๊ทธ์€ ๋ชจ๋“  ์‚ฌ์ „ ํ•™์Šต๋œ ์ •์ฑ…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ •์ฑ…(์˜ˆ: SmolVLA, ฯ€โ‚€, ฯ€โ‚€.โ‚…, MolmoAct2)์—๋Š” ๋‚ด์žฅ๋œ ๊ธฐ๋ณธ target_modules๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด --peft.method_type=LORA๋งŒ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ์ •์ฑ…์€ --peft.target_modules๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด LingBot-VA์˜ ๊ฒฝ์šฐ ๊ถŒ์žฅ ๋Œ€์ƒ์€ ์ „์šฉ ๊ฐ€์ด๋“œ์— ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

--policy.use_peft=true๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ --peft.method_type=LORA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

Update on GitHub