在百舸上使用 Motus 加速镜像训练 VLA 模型
概述
Motus(thu-ml/Motus)是统一潜动作世界模型(VLA),模型规模约 8B,由视频生成模块(Wan2.2-5B)、视觉语言理解模块(Qwen3-VL-2B)以及动作专家与理解专家组成。本加速镜像面向 Motus 模型训练场景,已内置完整训练栈与优化后的训练脚本,适配 lgn7ib 芯片,支持单机多卡与多机扩展训练。
本示例以 RoboTwin2.0 仿真数据集(action/state dim 14,video 8 帧 384×320)为例,介绍在百舸平台上完成训练全流程。
适用场景
- 在百舸平台训练 Motus VLA 模型,用于机器人操作仿真(RoboTwin 等)任务。
- 需要单机多卡训练,或双机扩展训练以获得更高吞吐的场景。
- 需要断点续训、性能参考与常见问题指引的客户。
环境与资源要求
| 项 | 内容 |
|---|---|
| 适配芯片 | 支持规格:aihc.lgn7ib |
| 源码 | 已烘入镜像 /root/workspace/Motus |
| 镜像环境 | 自带训练栈(无需 venv / conda) |
| 工作目录 | /root/workspace/Motus |
| 数据集 | RoboTwin2.0(TianxingChen/RoboTwin2.0,需转 Motus 格式) |
| 模型权重 | Motus(Stage2) + Wan2.2-TI2V-5B + Qwen3-VL-2B-Instruct |
在百舸平台准备训练环境
- 登录百舸平台,创建或进入开发机,选择 lgn7ib 资源规格与上述加速镜像。
- 打开开发机终端(或 WebIDE 终端),进入工作目录
/root/workspace/Motus。 - 按本章节顺序准备数据与权重,然后启动训练。
准备权重
下载 HuggingFace 资产(配置镜像站)
镜像内不包含权重与数据,训练前需下载以下资产。使用 HuggingFace 下载前先设置镜像站:
1export HF_ENDPOINT=https://hf-mirror.com
2export HF_HUB_ENABLE_HF_TRANSFER=1
3export HF_HOME=/root/workspace/models/huggingface
4export HF_HUB_CACHE=$HF_HOME/hub
5export TRANSFORMERS_CACHE=$HF_HOME/transformers
6export HF_DATASETS_CACHE=$HF_HOME/datasets
权重资产清单
| 资产 | HuggingFace 来源 | BOS 路径 |
|---|---|---|
| 权重 Motus(Stage2 finetune) | motus-robotics/Motus | bos://aihc-models-bj/motus-robotics/Motus/ |
| 权重 Motus_Wan2_2_5B_pretrain(Stage1 VGM) | motus-robotics/Motus_Wan2_2_5B_pretrain | 待补齐(详见下方说明) |
| 基础 WAN 视频模型 | Wan-AI/Wan2.2-TI2V-5B | bos://aihc-models-bj/Wan-AI/Wan2.2-TI2V-5B/ |
| 基础 VLM | Qwen/Qwen3-VL-2B-Instruct | bos://aihc-models-bj/Qwen/Qwen3-VL-2B-Instruct/ |
方式一:HuggingFace 下载
1huggingface-cli download motus-robotics/Motus --local-dir /root/workspace/models/Motus
2huggingface-cli download motus-robotics/Motus_Wan2_2_5B_pretrain --local-dir /root/workspace/models/Motus_Wan2_2_5B_pretrain
3huggingface-cli download Wan-AI/Wan2.2-TI2V-5B --local-dir /root/workspace/models/Wan2.2-TI2V-5B
4huggingface-cli download Qwen/Qwen3-VL-2B-Instruct --local-dir /root/workspace/models/Qwen3-VL-2B-Instruct
方式二:BOS 下载
1mkdir -p /root/workspace/models/Motus
2bosutil cp -r bos://aihc-models-bj/motus-robotics/Motus/ /root/workspace/models/Motus/
3
4mkdir -p /root/workspace/models/Wan2.2-TI2V-5B
5bosutil cp -r bos://aihc-models-bj/Wan-AI/Wan2.2-TI2V-5B/ /root/workspace/models/Wan2.2-TI2V-5B/
6
7mkdir -p /root/workspace/models/Qwen3-VL-2B-Instruct
8bosutil cp -r bos://aihc-models-bj/Qwen/Qwen3-VL-2B-Instruct/ /root/workspace/models/Qwen3-VL-2B-Instruct/
说明:
Motus_Wan2_2_5B_pretrain权重尚未上传至 BOS,如需离线/内网使用请联系百舸相关人员协助上传。也可以直接通过 HuggingFace 镜像站下载。
准备数据集
数据集 BOS 上是原始 zip,需转成 Motus 格式(videos / qpos / metas / umt5_wan),转换约 3 分钟、使用 1 张卡。转换前需先确保 Wan2.2 权重已就位(见上文权重下载)。
下载数据集
1# 方式一:HuggingFace(镜像站)
2huggingface-cli download TianxingChen/RoboTwin2.0 --repo-type dataset --local-dir /root/workspace/data/raw/RoboTwin2.0
3
4# 方式二:BOS
5mkdir -p /root/workspace/data/raw/RoboTwin2.0
6bosutil cp -r bos://aihc-rdw-bj/huggingface.co/datasets/TianxingChen/RoboTwin2.0/ /root/workspace/data/raw/RoboTwin2.0/
下载完成后,原始 zip 位于 /root/workspace/data/raw/RoboTwin2.0 目录下,下文以 /root/workspace/data/raw/RoboTwin2.0 为原始数据目录。
转换数据集
1# 1. 解压成 {split}/{task} 布局
2S=/root/workspace/data/staging; mkdir -p $S/clean
3unzip -q -o /root/workspace/data/raw/RoboTwin2.0/aloha-agilex_clean_50.zip -d $S/clean
4mv $S/clean/aloha-agilex_clean_50 $S/clean/adjust_bottle
5
6# 2. 转换 + 生成 T5 嵌入(使用 converter 自带的按行 T5)
7export CUDA_VISIBLE_DEVICES=0
8rm -rf /root/workspace/data/robotwin2/clean/adjust_bottle
9cat > /tmp/convert.yml <<EOF
10source_root: "/root/workspace/data/staging"
11target_root: "/root/workspace/data/robotwin2"
12fps: 30
13target_width: 320
14target_height: 360
15max_workers: 16
16skip_existing: true
17enable_t5_embeddings: true
18wan_repo_path: "/root/workspace/models/Wan2.2-TI2V-5B"
19t5_max_length: 512
20cuda_devices: ["0"]
21log_level: "INFO"
22save_debug_frames: false
23EOF
24cd /root/workspace/Motus/data/robotwin2/robotwin_data_convert
25python robotwin_converter.py --config /tmp/convert.yml
校验转换结果
1D=/root/workspace/data/robotwin2/clean/adjust_bottle
2for d in metas qpos umt5_wan videos; do echo "$d $(ls $D/$d | wc -l)"; done
各目录条数应为 49 / 49 / 49 / 50(episode 8 被 converter 跳过,属正常现象)。
配置训练环境变量
镜像内置启动脚本 /root/workspace/Motus/run_motus_optimized.sh(accelerate + FSDP),参数均通过环境变量传入。
| 变量 | 不设时 | 说明 |
|---|---|---|
DATA_PATH |
/root/workspace/data/robotwin2 |
转换后的数据集 |
BASE_CHECKPOINT_PATH |
/root/workspace/models/Wan2.2-TI2V-5B |
Wan2.2 权重 |
TOKENIZER_PATH |
/root/workspace/models/Qwen3-VL-2B-Instruct |
VLM 权重 |
CHECKPOINT_PATH |
/root/workspace/models/Motus |
Stage2 finetune 权重 |
CKPT_DIR |
/root/workspace/checkpoints |
ckpt 目录,多机须为共享盘 |
BATCH_SIZE |
robotwin.yaml(8) | 每卡 batch |
MAX_STEPS |
robotwin.yaml | 总步数 |
SAVE_INTERVAL / SAVE_AT_END |
5000 / 1 | 存盘间隔 / 末步是否存盘 |
VAL_INTERVAL |
500 | 验证间隔 |
RESUME_CHECKPOINT_PATH |
robotwin.yaml | 续训 ckpt 目录 |
WORLD_SIZE / RANK / MASTER_ADDR |
1 / 0 / 无 | 多机:节点数 / 节点序号 / rank0 IP |
启动训练
单机训练(8 卡)
1export DATA_PATH=/root/workspace/data/robotwin2
2export BASE_CHECKPOINT_PATH=/root/workspace/models/Wan2.2-TI2V-5B
3export TOKENIZER_PATH=/root/workspace/models/Qwen3-VL-2B-Instruct
4export CHECKPOINT_PATH=/root/workspace/models/Motus
5export CKPT_DIR=/root/workspace/checkpoints
6bash /root/workspace/Motus/run_motus_optimized.sh
多机训练(双机 16 卡示例)
除上述变量外,两台节点分别配置分布式环境变量:
1# rank0 节点
2export WORLD_SIZE=2 RANK=0 MASTER_ADDR=<rank0 IP>
3
4# rank1 节点
5export WORLD_SIZE=2 RANK=1 MASTER_ADDR=<rank0 IP>
再各自执行 bash /root/workspace/Motus/run_motus_optimized.sh 启动。双机两端需在 15 分钟内都启动;若通过百舸训练任务提交,WORLD_SIZE / RANK / MASTER_ADDR 会自动注入。
NCCL 参数脚本中已有默认值(mlx5_0 / GID 3 / QPS 8),可用环境变量覆盖调优;多机训练时 CKPT_DIR 须为共享盘路径。
性能参考
以下数据为 v1_std-261103.01 镜像(FSDP)实测结果:
| 场景 | samples/s | 结果 |
|---|---|---|
| 单机 8 卡,每卡 bs8 | 47.94 | 基准 48.30 |
| 单机 8 卡,每卡 bs12 | 53.93 | 1× |
| 双机 16 卡,每卡 bs12 | 101.05 | 扩展比 0.937 |
| 长稳 1000 步,每卡 bs8 | 约 48.4 | loss 1.99 → 0.95,无 NaN |
以上数据为特定测试环境下的参考值。实际性能会受到资源规格、数据读取方式、网络环境、任务参数等因素影响。
常见问题
数据集转换后各目录条数不是完全一致
转换后各目录条数为 49 / 49 / 49 / 50,其中 episode 8 被 converter 跳过,属正常现象。
双机训练未正常开始
双机两端需在 15 分钟内都启动,否则训练无法正常开始。可通过查看日志确认各节点启动状态。
训练中断后想要续训
参考「续训」章节,设置 RESUME_CHECKPOINT_PATH 与 MAX_STEPS(总步数)后重新启动即可,会恢复模型、优化器、LR 调度器和随机数状态,从下个 step 继续。
后续操作
保存检查点
SAVE_INTERVAL=N 表示每 N 步存一次检查点(SAVE_AT_END=1 末步也存),落在 $CKPT_DIR/robotwin/robotwin/checkpoint_step_<N>/,单份约 40 GB。
断点续训
其它变量与首次训练相同,添加 RESUME_CHECKPOINT_PATH,并将 MAX_STEPS 设为总步数:
1export RESUME_CHECKPOINT_PATH=/root/workspace/checkpoints/robotwin/robotwin/checkpoint_step_1000
2export MAX_STEPS=2000
3bash /root/workspace/Motus/run_motus_optimized.sh
续训从 Step N+1 接着跑。校验方法:日志首条应为 Step N+1/...,LR 与不中断训练一致。
说明:续训的 loss 不会与不中断训练逐位一致(dataloader 位置不恢复),属正常现象。
参考
- Motus 官方仓库:https://github.com/thu-ml/Motus
评价此篇文章
