π0 与 π0.5 模型微调
π0 与 π0.5 是 Physical Intelligence 的视觉-语言-动作(Vision-Language-Action,VLA)策略,训练链路来自 OpenPI。π0 与 π0.5 即 OpenPI 仓库中的 openpi-0 与 openpi-0.5,官方写法为 π₀ 与 π₀.₅,对应的模型标识为 pi0 与 pi05,基础权重为 pi0_base 与 pi05_base。平台以这两个标识注册模型,两者均支持 jax 与 lerobot 两种训练框架,支持 LeRobot v2 与 v3 数据集。
适用角色与前提
适用角色
| 角色 | 是否可创建训练任务 | 说明 |
|---|---|---|
| 管理员 | 是 | 不受模块权限限制 |
| 项目经理 | 需授权 | 由管理员在模块权限中授予 「创建训练任务」 |
| 标注员 | 需授权 | 同上 |
| 审核员 | 需授权 | 同上 |
| 采集员 | 需授权 | 同上 |
仅查看训练任务与指标需「查看训练」。
前置条件
| 项 | 要求 |
|---|---|
| 数据集版本 | LeRobot v2、v3。训练服务按数据集 meta/info.json 的 codebase_version 识别版本并选择训练镜像 |
| 框架 | jax(OpenPI 链路)、lerobot |
| 显存 | 单卡启用 LoRA 时约 22.5 GB 起;全量微调约 70 GB 起 |
| 依赖 | 平台的模型训练服务已启用并配置至少一个训练位置;jax 框架使用 OpenPI 训练镜像,lerobot 框架按数据集版本选择 LeRobot 训练镜像 |
| 数据集结构 | 目录内包含 meta/info.json、data/ 与 videos/ |
| 权限 | 创建需「创建训练任务」,查看需「查看训练」 |
创建训练任务与参数
操作步骤
- 进入「模型」→「训练」,点击「创建训练任务」。
- 选择训练位置,可选本机 GPU 或管理员已启用的云训练位置。
- 在「选择模型」中选中
pi0或pi05。 - 在「训练框架」中选择
jax或lerobot。框架决定「训练参数」中显示的参数集合。 - 在「训练数据集」中选择数据来源:导出记录、已上传 LeRobot 数据集、下载链接或 HuggingFace。
- 在「训练参数」中设置参数,含义与默认值见下表。
- 填写备注(可选)。
- 点击「创建训练任务」。
训练参数
jax 框架与 lerobot 框架使用两套参数。jax 框架面向 OpenPI 训练入口:
| 参数 | 说明 | 默认值 | 取值范围 |
|---|---|---|---|
| batch_size | 全局批大小 | 1 | 整数,≥ 1 |
| steps | 训练步数 | 10000 | 整数,≥ 1 |
| save_interval | checkpoint 保存间隔 | 5000 | 整数,≥ 1,且不大于 steps |
| learning_rate | 余弦衰减调度的峰值学习率 | 2.5e-5 | 浮点数,> 0 |
| fsdp_devices | FSDP 设备数 | auto | auto 或正整数;不超过可见 GPU 数并为其因数 |
| ema_decay | EMA 衰减系数 | 未启用 | 0 < x ≤ 1;启用 LoRA 时忽略 |
| action_horizon | 每次预测的动作序列长度 | 50 | 整数,≥ 1 |
| prompt | 数据集缺少任务文本时的默认指令 | 空 | 字符串 |
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.num_inference_steps | 推理去噪步数 | 10 | 整数 |
| policy.dtype | 模型数据类型 | bfloat16 | bfloat16、float32 |
| policy.tokenizer_max_length | 分词最大长度 | pi0 为 48,pi05 为 200 | 整数 |
| policy.optimizer_lr | 优化器学习率 | 2.5e-5 | 浮点数 |
| policy.optimizer_weight_decay | 权重衰减 | 0.0 | 浮点数 |
| policy.optimizer_grad_clip_norm | 梯度裁剪阈值 | 1.0 | 浮点数 |
| policy.scheduler_warmup_steps | 学习率预热步数 | 1000 | 整数 |
| policy.scheduler_decay_steps | 学习率衰减步数 | 10000 | 整数 |
| policy.scheduler_decay_lr | 衰减后的最终学习率 | 0.0 | 浮点数 |
结果校验
训练监控
训练详情页按框架解析日志并绘制指标曲线。jax 框架的指标口径:
| 指标 | 含义 | 判断标准 |
|---|---|---|
| step | 已完成训练步数 | 逐步递增至设定的 steps |
| loss | 训练损失 | 总体下降;长时间不下降时检查学习率与数据 |
| gradient_norm | 梯度范数 | 无持续增大 |
| param_norm | 参数范数 | 随训练缓慢变化 |
lerobot 框架的指标口径:
| 指标 | 含义 | 判断标准 |
|---|---|---|
| step | 已完成训练步数 | 逐步递增至设定的 steps |
| sample | 已处理样本数 | 随 step 递增 |
| episode | 已处理 episode 数 | 随 step 递增 |
| epoch | 已训练轮次 | 随 step 递增 |
| loss | 训练损失 | 总体下降 |
| gradient_norm | 梯度范数 | 无持续增大 |
| learning_rate | 当前学习率 | 按调度策略变化 |
| update_time_s | 单步更新时间 | 稳定,无持续增大 |
| data_time_s | 数据加载时间 | 稳定 |
校验清单
训练服务按容器退出码判定任务终态:退出码为 0 记为成功,非 0 记为失败。
| 校验项 | 通过标准 |
|---|---|
| 任务状态 | 训练详情页状态为「成功」,容器退出码为 0 |
| 产物目录 | jax 框架写入输出目录下的 docker_train/train/;lerobot 框架写入 checkpoints/ |
| 检查点 | 「模型输出」列出 checkpoint,jax 内容含 params/,lerobot 内容含 pretrained_model/;last 指向的条目类型为「最终」,其余为「步骤」 |
| 指标曲线 | 「训练指标」绘制 jax 的 step、loss、gradient_norm;lerobot 另含 sample、episode、epoch、learning_rate |
| 日志 | 「实时日志」可读取,无持续报错 |
「模型输出」中的 checkpoint 可下载、同步到对象存储 ,或用于创建推理服务;推理侧说明见模型推理。
异常处置
| 现象 | 可能原因 | 处置 | 责任方 |
|---|---|---|---|
| 训练立即失败,提示找不到数据集 | 数据集缺少 meta/info.json,或所选来源路径错误 | 重新选择正确的导出记录或已上传数据集 | 项目经理 |
| 显存不足 | batch_size 过大;单卡执行全量微调 | 降低 batch_size;单卡保持 LoRA 启用 | 算法工程师 |
| 提示 FSDP 设备数非法 | fsdp_devices 大于可见 GPU 数,或不能被其整除 | 将 fsdp_devices 改为 auto,或改为可见 GPU 数的因数 | 算法工程师 |
| 提示保存间隔大于训练步数 | save_interval 或 save_freq 大于 steps | 将保存间隔调小至不超过 steps | 算法工程师 |
| 单卡与多卡结果差异大 | 单卡默认 LoRA、多卡默认 FSDP,训练参数量不同 | 固定框架、fsdp_devices、batch_size 与随机种子后重新比较 | 算法工程师 |
| loss 长时间不下降 | 学习率不合适、任务文本缺失、数据覆盖不足 | 检查 prompt 与数据集;调整 learning_rate | 算法工程师 |
| 训练位置不可用 | 平台未启用该训练位置,或该位置 GPU 不可用 | 更换训练位置;联系管理员检查训练服务 | 管理员 |