LeRobot 文件
使用 🤗 PEFT 進行參數高效微調
並獲得增強的文件體驗
開始使用
使用 🤗 PEFT 進行參數高效微調
🤗 PEFT (Parameter-Efficient Fine-Tuning,參數高效微調) 是一個函式庫,旨在高效地將大型預訓練模型(例如預訓練決策模型 SmolVLA、π₀ 等)適應到新任務上,而無需訓練模型的所有參數,同時仍能獲得相當的效能。
安裝 lerobot[peft] 選用套件以啟用 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.method_type 參數,它讓您可以選擇要使用的 PEFT 方法。在此我們使用 LoRA (Low-Rank Adapter,低秩適配),這可能是目前最流行的微調方法。低秩適配意味著我們僅微調一個秩相對較低的矩陣,而不是完整的權重矩陣。此秩可以使用 --peft.r 參數指定。秩越高,就越接近完整的微調。
還有一些更複雜的方法涉及更多參數。目前尚不支援這些方法,如果您希望支援特定的 PEFT 方法,歡迎提出 Issue。
預設情況下,PEFT 將以 SmolVLA 中 LM 專家的 q_proj 和 v_proj 層為目標。它也會以狀態和動作投影矩陣為目標,因為這些矩陣最有可能與任務相關。如果您需要針對不同的層,可以使用 --peft.target_modules 來指定目標層。您可以參考各個 PEFT 方法的文件以查看支援哪些輸入(例如 LoRA 的 target_modules 文件)。通常支援後綴列表或正規表示式。例如,若要將 MLPs 的 lm_expert 作為目標,而不是 q 和 v 投影,請使用:
--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))'如果您需要對某一層進行完全微調而不是僅僅對其進行適配,您可以將該層的後綴列表提供給 --peft.full_training_modules 參數。
--peft.full_training_modules=["state_proj"]與用於完全微調的學習率相比,學習率和排程目標學習率通常可以擴大 10 倍(例如,正常為 1e-4,使用 LoRA 時則為 1e-3)。
在 GitHub 上更新