LeRobot documentation
๐ค PEFT๋ฅผ ํ์ฉํ ๋งค๊ฐ๋ณ์ ํจ์จ์ ๋ฏธ์ธ ์กฐ์
๐ค 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๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.