LeRobot 文件

使用 🤗 PEFT 進行參數高效微調

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

使用 🤗 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_projv_proj 層為目標。它也會以狀態和動作投影矩陣為目標,因為這些矩陣最有可能與任務相關。如果您需要針對不同的層,可以使用 --peft.target_modules 來指定目標層。您可以參考各個 PEFT 方法的文件以查看支援哪些輸入(例如 LoRA 的 target_modules 文件)。通常支援後綴列表或正規表示式。例如,若要將 MLPs 的 lm_expert 作為目標,而不是 qv 投影,請使用:

--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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.