ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LeRobot 如何用 PEFT LoRA 微调 SmolVLA 模型?

2026/9/13 19:42:20 拓冰建站 浏览量
LeRobot 如何用 PEFT LoRA 微调 SmolVLA 模型? LeRobot 如何用 PEFT LoRA 微调 SmolVLA 模型【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot如果你想把 LeRobot 中的预训练 SmolVLA 策略适配到新任务又不想全量微调整张权重PEFTParameter-Efficient Fine-Tuning文档给出的路径是用lerobot-train加上 HuggingFace 的 PEFT 库以 LoRALow-Rank Adapter方式只对低秩矩阵做微调其余参数冻结。本文的主路径完全按 PEFT 训练文档 编写在HuggingFaceVLA/libero数据集的libero_spatial子集上用lerobot/smolvla_base作为基座模型做 LoRA 微调。准备环境PEFT 支持是 LeRobot 的可选依赖需要安装lerobot[peft]这个 extras 包pip install -e .[peft]从 pyproject.toml 可以看到peftextras 会连带安装transformers依赖以及peft0.18.0,1.0.0。训练 SmolVLA 本身还需要 SmolVLA 策略的依赖SmolVLA 文档 给出的安装命令是pip install -e .[smolvla]其余前置条件Python 3.12 虚拟环境、ffmpeg、editable 安装方式按安装指南 处理即可本文不再展开。LoRA 在 SmolVLA 上默认微调哪些层在把 LoRA 套到 SmolVLA 上之前先明确默认行为后面调参才有依据按 PEFT 训练文档 的说法PEFT 默认作用于 SmolVLA LM expert 的q_proj和v_proj层以及 state 和 action 的投影矩阵因为后者更可能与任务相关。SmolVLA 策略实现 中的默认 target 正则与之对应匹配lm_expert下的q/v投影以及state_proj|action_in_proj|action_out_proj|action_time_mlp_in|action_time_mlp_out。--peft.r指定 LoRA 的秩。文档给出的原则是秩越高越接近全量微调。--peft.lora_alpha是缩放因子scaling lora_alpha / r。这些字段在 PeftConfig 中有默认值method_type默认就是LORAr默认 16lora_alpha默认None此时 PEFT 库使用 alpha8对高秩 adapter 可能有衰减作用文档注释建议的常见取值为r或2*r。基座参数在 wrap_with_peft 中会被冻结requires_grad_(False)只有 adapter 参数参与训练。运行 LoRA 微调训练完整命令来自 PEFT 训练文档。其中--policy.repo_id的值your_hub_name/my_libero_smolvla是文档中的占位写法需要替换为你自己的 Hugging Face Hub 用户名和仓库名lerobot-train \ --policy.pathlerobot/smolvla_base \ --policy.repo_idyour_hub_name/my_libero_smolvla \ --dataset.repo_idHuggingFaceVLA/libero \ --policy.output_featuresnull \ --policy.input_featuresnull \ --policy.optimizer_lr1e-3 \ --policy.scheduler_decay_lr1e-4 \ --env.typelibero \ --env.tasklibero_spatial \ --steps100000 \ --batch_size32 \ --peft.method_typeLORA \ --peft.r64 \ --peft.lora_alpha64参数用途说明--policy.pathlerobot/smolvla_base加载的预训练模型。SmolVLA 文档说明smolvla_base是 450M 的预训练模型。--dataset.repo_idHuggingFaceVLA/libero训练数据。文档说明这里为简洁起见只用libero_spatial子集。--policy.input_featuresnull/--policy.output_featuresnullPEFT 文档原命令中保留的参数用于让配置跟随预训练模型的输入输出特征。--env.typelibero --env.tasklibero_spatial指定 libero 环境及其任务子集。--peft.method_typeLORA选择 PEFT 方法不传时默认也是LORA。--peft.r64 --peft.lora_alpha64本例中 alpha 等于秩即scaling 64/64 1。关于学习率文档给了一条可操作的规则LoRA 的学习率通常可以比全量微调放大 10 倍左右例如全量微调用 1e-4 时LoRA 可以用 1e-3。上例中--policy.optimizer_lr1e-3、--policy.scheduler_decay_lr1e-4就遵循这个量级。可选自定义目标层与全量微调层如果默认的q_proj/v_proj state/action 投影不满足你的需求文档给出两个调整入口用--peft.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指定需要完整训练而非 adapter 适配的层例如--peft.full_training_modules[state_proj]这个参数对应 PEFT 的modules_to_save训练入口 会把它改名为modules_to_save传给 PEFT。它的用途是训练并保存预训练模型之外新建的层如 action/state 投影如果你是在微调一个已经训练好的策略可能希望把它设为[]见 PeftConfig 注释。如何判断 LoRA 是否生效以及一个已知报错训练启动时wrap_with_peft 会先冻结基座参数再调用 PEFT 的get_peft_model包装策略并输出一条日志Wrapped 策略名 with PEFT (LoraConfig)在训练输出里看到这条日志说明 LoRA adapter 已套上配置类型为LoraConfig。训练完成后模型会发布到--policy.repo_id指定的 Hub 仓库。一个文档代码中明确定义的失败信号PEFT 训练要求存在预训练路径否则 验证逻辑 会抛出ValueErrorTraining from scratch using PEFT is unlikely to yield good results. Supply a policy.pretrained_path to fine-tune an existing model.也就是说--policy.path必须指向一个真实存在的预训练模型如lerobot/smolvla_base从零开始做 PEFT 不在支持范围内。限制说明PEFT 训练文档 明确说参数更多的更复杂 PEFT 方法目前不受支持需要的话请提 issue。本文路径以 LoRA 为准。秩的选择是精度与参数量的权衡r越大越接近全量微调但可训练参数也越多lora_alpha影响缩放强度。除scaling lora_alpha / r和学习率 10 倍规则外文档没有给出更细的调参结论。数据集、环境libero与任务libero_spatial需要与你的实际任务匹配换成自己的数据集时把--dataset.repo_id和--env.*相应替换并保证已登录 Hugging Face Hub保存模型需要。可以继续做的事查看完整微调选项lerobot-train --helpSmolVLA 文档 建议的排查方式。全量微调 SmolVLA 的对比路径、以及在真实机器人上的lerobot-rollout评测流程见 SmolVLA 文档。【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考