SmolVLA 模型微调
SmolVLA 是 Hugging Face 的视觉-语言-动作(Vision-Language-Action,VLA)策略,基座权重为 lerobot/smolvla_base,输入为多视角图像、机器人状态与可选语言指令,输出为连续动作。平台以模型标识 smolvla 注册,使用 lerobot 训练框架,支持 LeRobot v2 与 v3 数据集。
适用角色与前提
适用角色
| 角色 | 是否可创建训练任务 | 说明 |
|---|---|---|
| 管理员 | 是 | 不受模块权限限制 |
| 项目经理 | 需授权 | 由管理员在模块权限中授予 「创建训练任务」 |
| 标注员 | 需授权 | 同上 |
| 审核员 | 需授权 | 同上 |
| 采集员 | 需授权 | 同上 |
仅查看训练任务与指标需「查看训练」。
前置条件
| 项 | 要求 |
|---|---|
| 数据集版本 | LeRobot v2、v3。训练服务按数据集 meta/info.json 的 codebase_version 识别版本并选择训练镜像 |
| 框架 | lerobot |
| 显存 | 无固定下限;由 batch_size、图像分辨率与冻结策略决定。默认冻结视觉编码器 |
| 依赖 | 平台的模型训练服务已启用并配置至少一个训练位置;训练镜像需包含 LeRobot 训练入口 lerobot-train 与视频解码依赖 |
| 数据集结构 | 目录内包含 meta/info.json、data/ 与 videos/;各 episode 的图像字段一致,observation.state 与 action 维度固定 |
| 权限 | 创建需「创建训练任务」,查看需「查看训练」 |
创建训练任务与参数
操作步骤
- 进入「模型」→「训练」,点击「创建训练任务」。
- 选择训练位置,可选本机 GPU 或管理员已启用的云训练位置。
- 在「选择模型」中选中
smolvla。 - 在「训练数据集」中选择数据来源:导出记录、已上传 LeRobot 数据集、下载链接或 HuggingFace。
- 在「训练参数」中设置参数,含义与默认值见下表。
- 填写备注(可选)。
- 点击「创建训练任务」。
训练参数
lerobot 框架先应用通用训练参数:
| 参数 | 说明 | 默认值 | 取值范围 |
|---|---|---|---|
| batch_size | 批次大小 | 1 | 整数,≥ 1 |
| steps | 训练步数 | 10000 | 整数,≥ 1 |
| seed | 随机种子 | 1000 | 整数 |
| num_workers | DataLoader 进程数 | 4 | 整数,≥ 1 |
| eval_freq | 评估间隔 | 1000 | 整数,≥ 1,且不大于 steps |
| log_freq | 日志间隔 | 100 | 整数,≥ 1,且不大于 steps |
| save_freq | checkpoint 保存间隔 | 5000 | 整数,≥ 1,且不大于 steps |
| save_checkpoint | 是否保存 checkpoint | true | true / false |
再追加 policy. 前缀的模型参数:
| 参数 | 说明 | 默认值 | 取值范围 |
|---|---|---|---|
| policy.n_obs_steps | 输入观测步数 | 1 | 整数 |
| policy.chunk_size | 动作预测长度 | 50 | 整数 |
| policy.n_action_steps | 单次调用执行的动作步数 | 50 | 整数 |
| policy.max_state_dim | 状态向量补齐维度 | 32 | 整数 |
| policy.max_action_dim | 动作向量补齐维度 | 32 | 整数 |
| policy.resize_imgs_with_padding | 图像预处理尺寸 | [512, 512] | 二元组 |
| policy.empty_cameras | 空相机占位数量 | 0 | 整数 |
| policy.tokenizer_max_length | 分词最大长度 | 48 | 整数 |
| policy.num_steps | 解码步数 | 10 | 整数 |
| policy.use_cache | 是否使用注意力缓存 | true | true / false |
| policy.freeze_vision_encoder | 是否冻结视觉编码器 | true | true / false |
| policy.train_expert_only | 是否仅训练动作专家 | true | true / false |
| policy.train_state_proj | 是否训练状态投影层 | true | true / false |
| policy.vlm_model_name | 视觉语言骨干模型 | HuggingFaceTB/SmolVLM2-500M-Video-Instruct | 字符串 |
| policy.attention_mode | 注意力模式 | cross_attn | cross_attn、self_attn |
| policy.pad_language_to | 语言填充方式 | longest | longest、max_length |
| policy.num_vlm_layers | 视觉语言骨干层数 | 16 | 整数 |
| policy.self_attn_every_n_layers | 自注意力层插入间隔 | 2 | 整数 |
| policy.expert_width_multiplier | 动作专家隐层宽度比例 | 0.75 | 浮点数 |
| policy.optimizer_lr | 优化器学习率 | 1e-4 | 浮点数 |
| policy.optimizer_grad_clip_norm | 梯度裁剪阈值 | 1.0 | 浮点数 |
| policy.scheduler_decay_steps | 学习率衰减步数 | 100000 | 整数 |
| policy.scheduler_decay_lr | 衰减后的最终学习率 | 1e-5 | 浮点数 |
结果校验
训练监控
训练详情页按 LeRobot 日志格式解析指标并绘制曲线:
| 指标 | 含义 | 判断标准 |
|---|---|---|
| step | 已完成训练步数 | 逐步递增至设定的 steps |
| sample | 已处理样本数 | 随 step 递增 |
| episode | 已处理 episode 数 | 随 step 递增 |
| epoch | 已训练轮次 | 随 step 递增 |
| loss | 训练损失 | 总体下降 |
| gradient_norm | 梯度范数 | 无持续增大 |
| learning_rate | 当前学习率 | 按调度策略变化 |
| update_time_s | 单步更新时间 | 稳定,无持续增大 |
| data_time_s | 数据加载时间 | 稳定 |
离线 loss 只反映模型在训练分布上的拟合程度。评估策略效果时,以固定初始状态与不同物体位置、光照条件下的实机成功率为准。
校验清单
训练服务按容器退出码判定任务终态:退出码为 0 记为成功,非 0 记为失败。
| 校验项 | 通过标准 |
|---|---|
| 任务状态 | 训练详情页状态为「成功」,容器退出码为 0 |
| 产物目录 | 输出目录下的 checkpoints/ |
| 检查点 | 「模型输出」列出 checkpoint,内容含 pretrained_model/;last 指向的条目类型为「最终」,其余为「步骤」 |
| 指标曲线 | 「训练指标」绘制 step、loss、gradient_norm、learning_rate |
| 日志 | 「实时日志」可读取,无持续报错 |
「模型输出」中的 checkpoint 可下载、同步到对象存储,或用于创建推理服务;推理侧说明见模型推理。
异常处置
| 现象 | 可能原因 | 处置 | 责任方 |
|---|---|---|---|
| 训练立即失败,提示找不到数据集 | 数据集缺少 meta/info.json,或所选来源路径错误 | 重新选择正确的导出记录或已上传数据集 | 项目经理 |
| 视频解码失败 | 训练镜像缺少 ffmpeg 或视频解码依赖 | 使用平台训练镜像;或改用导出的 MP4 视频数据 | 算法工程师 |
| 显存不足 | batch_size 或图像分辨过大 | 降低 batch_size;检查 policy.resize_imgs_with_padding | 算法工程师 |
| loss 下降但实机效果差 | 数据覆盖不足、任务文本与动作不一致 | 补充物体位置、光照与初始姿态样本;核对任务文本 | 算法工程师 |
| 提示保存间隔大于训练步数 | save_freq 大于 steps | 将 save_freq 调小至不超过 steps | 算法工程师 |
| loss 长时间不下降 | 学习率不合适、数据量过小 | 检查数据集 episode 数量;调整 policy.optimizer_lr | 算法工程师 |
| 训练位置不可用 | 平台未启用该训练位置,或该位置 GPU 不可用 | 更换训练位置;联系管理员检查训练服务 | 管理员 |
相关页面
| 页面 | 用途 |
|---|---|
| 模型训练 | 训练任务的创建、监控与配额 |
| LeRobot 数据集与训练 | 数据导出与训练总览 |
| LeRobot v2 与 v3 格式差异 | 两种数据格式的差异与迁移 |
| 数据导出 | 生成 LeRobot 训练包 |