LeRobot documentation

使用 🤗 PEFT 进行参数高效微调

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、π₀ 等)。它可以在不训练模型全部参数的情况下,将模型适配到新任务,同时保持可比的性能。

安装 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.lora_alpha=64

请注意 --peft.method_type 参数,它允许你选择要使用的 PEFT 方法。这里我们使用 LoRA(Low-Rank Adapter),这大概是迄今为止最流行的微调方法。低秩适配意味着我们只微调一个秩相对较低的矩阵,而不是完整的权重矩阵。该秩可以通过 --peft.r 参数指定,LoRA 缩放因子则通过 --peft.lora_alpha 指定(其中 scaling = lora_alpha / r)。秩越高,就越接近全量微调。

还有更复杂的方法,它们拥有更多参数。这些方法目前尚未得到支持,如果您希望看到某个特定的 PEFT 方法被支持,欢迎提交 issue。

默认情况下,PEFT 会针对 SmolVLA 中 LM expert 的 q_proj 和 v_proj 层。由于状态和动作投影矩阵最可能与任务相关,因此也会将其作为目标。如果需要针对不同的层,可以使用 --peft.target_modules 来指定要针对的层。您可以参考相应 PEFT 方法的文档以查看支持的输入(例如,LoRA 的 target_modules 文档)。通常支持后缀列表或正则表达式。例如,若要针对 lm_expert 的 MLP 而非 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)。

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