LeRobot documentation
Fine-tuning yang efisien parameter dengan 🤗 PEFT
Fine-tuning yang efisien parameter dengan 🤗 PEFT
🤗 PEFT (Parameter-Efficient Fine-Tuning) adalah pustaka untuk menyesuaikan model pralatih besar seperti kebijakan pralatih (misalnya, SmolVLA, π₀, …) ke tugas baru secara efisien tanpa melatih semua parameter model, sambil menghasilkan kinerja yang setara.
Instal paket opsional lerobot[peft] untuk mengaktifkan dukungan PEFT.
Untuk membaca tentang semua metode adaptasi yang mungkin, silakan merujuk ke 🤗 PEFT docs.
Melatih SmolVLA
Pada bagian ini, kami akan menunjukkan cara melatih kebijakan SmolVLA yang telah dilatih sebelumnya menggunakan PEFT pada dataset libero.
Untuk ringkasnya, kami hanya melatih pada subset libero_spatial. Kami akan menggunakan lerobot/smolvla_base sebagai model
untuk fine-tuning yang efisien secara parameter:
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=64Perhatikan parameter --peft.method_type yang memungkinkan Anda memilih metode PEFT yang akan digunakan. Di sini kami menggunakan LoRA (Low-Rank Adapter) yang kemungkinan merupakan metode fine-tuning paling populer hingga saat ini. Low-rank adaption berarti kita hanya melakukan fine-tuning pada matriks dengan rank yang relatif rendah, bukan matriks bobot penuh. Rank ini dapat ditentukan menggunakan parameter --peft.r, dan faktor penskalaan LoRA dengan --peft.lora_alpha (di mana scaling = lora_alpha / r). Semakin tinggi rank, semakin mendekati full fine-tuning.
Terdapat metode yang lebih kompleks dengan lebih banyak parameter. Metode ini belum didukung. Silakan ajukan masalah (issue) jika Anda ingin melihat metode PEFT tertentu didukung.
Secara default, PEFT akan menargetkan lapisan q_proj dan v_proj dari LM expert di SmolVLA. Ia juga akan menargetkan matriks proyeksi state dan action karena kemungkinan besar bergantung pada tugas. Jika Anda perlu menargetkan lapisan yang berbeda, Anda dapat menggunakan --peft.target_modules untuk menentukan lapisan mana yang akan ditargetkan. Anda dapat merujuk pada dokumentasi metode PEFT yang bersangkutan untuk melihat input apa saja yang didukung, (misalnya, dokumentasi target_modules LoRA).
Biasanya, daftar sufiks atau regex didukung. Misalnya, untuk menargetkan MLP dari lm_expert alih-alih proyeksi q dan v, gunakan:
--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))'Jika Anda perlu melakukan fine-tuning penuh pada sebuah layer, bukan sekadar menyesuaikannya, Anda dapat memberikan daftar sufiks layer ke parameter --peft.full_training_modules:
--peft.full_training_modules='["state_proj"]'Laju pembelajaran dan laju pembelajaran target terjadwal biasanya dapat diskalakan dengan faktor 10 dibandingkan dengan laju pembelajaran yang digunakan untuk penyesuaian penuh (misalnya, 1e-4 normal, sehingga 1e-3 menggunakan LoRA).
PEFT juga berfungsi dengan pelatihan multi-GPU yang terbagi (FSDP2 dan HSDP), lihat pelatihan multi-GPU.
Kebijakan lainnya
Flag --peft.* yang sama berlaku untuk kebijakan (policy) terlatih sebelumnya mana pun. Beberapa kebijakan (misalnya SmolVLA, π₀, π₀.₅, MolmoAct2)
sudah menyertakan target_modules bawaan, sehingga --peft.method_type=LORA sudah cukup. Kebijakan lainnya tidak menyertakannya dan akan
meminta Anda untuk meneruskan --peft.target_modules secara eksplisit, misalnya LingBot-VA, yang target yang direkomendasikannya didokumentasikan dalam panduan khusus miliknya.
--policy.use_peft=true saja setara dengan --peft.method_type=LORA dengan pengaturan default.