在百舸上使用加速镜像训练 DM05 模型
在百舸上使用加速镜像训练 DM05 模型
一、概述
本文档介绍如何在百舸平台上,使用百舸提供的 DM0.5 训练加速镜像,对 Dexmal 原力灵机 DM05 具身基础模型的预训练权重执行监督微调(SFT)。
该镜像已预装训练所需 Python 环境与依赖(开箱即用,无需额外挂载虚拟环境),并内置一组训练加速优化项(FusedAdamW、DDP Bucket 优化、异步 Loss AllReduce、torch.compile、CUDA Graph 等)。在保证训练效果与 loss 收敛趋势一致的前提下,可显著缩短单轮训练迭代耗时、提升训练吞吐,支持单机多卡与多机多卡的分布式扩展。
二、模型简介
DM05 是 Dexmal(原力灵机)推出的面向开放世界具身智能的通用基础模型,基于 15 万小时数据训练,参数量约 4B,支持导航、抓取、全身控制、长时记忆及跨形态部署。其架构为 Gemma3 VLM + Action Expert 双分支 VLA(Vision-Language-Action),共享 attention/FFN 结构,通过时间条件 modulator 注入 action chunk 时序信号。
参考资料:
三、环境与资源要求
| 项目 | 说明 |
|---|---|
| 推荐 GPU | lgn7ib,96GB 显存,单机 8 卡;支持多机扩展 |
| 镜像内工作目录 | /root/workspace/dm05 |
| 训练框架 | torchrun |
四、准备数据集
训练使用 libero_pi0_all 数据集(Libero 数据集的子集,用于 DM05 微调)。
4.1 数据集目录组织
数据集在容器内需按以下结构组织:
1dm05
2├── data
3│ └── libero
4│ └── libero_pi0_all
5│ ├── image
6│ └── jsonl
7└── index_cache.json
4.2 从 BOS 下载(推荐)
1# 创建数据集目录
2mkdir -p /workspace/dm05/data/libero
3
4# 从 BOS 下载 libero 数据集
5bcecmd bos cp -r bos://aihc-rdw-bj/huggingface.co/datasets/Dexmal/libero/ /workspace/dm05/data/libero/
4.3 从 HuggingFace 下载
1# 设置国内镜像加速下载
2export HF_ENDPOINT=https://hf-mirror.com
3export HF_HUB_ENABLE_HF_TRANSFER=1
4export HF_HOME=/workspace/models/huggingface
5export HF_HUB_CACHE=$HF_HOME/hub
6export HF_DATASETS_CACHE=$HF_HOME/datasets
7
8# 下载完整 libero 数据集
9huggingface-cli download --repo-type dataset Dexmal/libero --local-dir /workspace/dm05/data/libero
说明:从 HuggingFace 下载的原始数据集需要按上述目录结构进行预处理(生成
index_cache.json等训练索引文件)后使用,具体处理方式可参考 opendm 的 dm05_libero.md。
4.4 数据集预处理(HF格式转opendm解析)
参考官方文档:https://github.com/dexmal/opendm/blob/main/docs/zh/dm05_libero.md(数据准备章节)
1# 在 OpenDM 仓库根目录运行
2cd opendm
3
4# 下载并整理 LIBERO 数据
5script/libero_runner.sh dataset
script/libero_runner.sh dataset会从Dexmal/libero下载数据到./data/.hf_downloads/libero,自动处理libero.tar.part-*分片、解压并整理到./data/libero。script/libero_runner.sh model默认会从Dexmal/DM05下载基础模型,并保存到./checkpoints/DM05。如果需要使用其他模型仓库或保存目录,可通过--model-repo和--model-dir覆盖。
五、准备模型权重
5.1 权重目录组织
模型权重在容器内需按以下结构组织:
1dm05
2├── checkpoints
3│ └── DM05
4│ ├── model.safetensors
5│ └── tokenizer.json
5.2 从 BOS 下载(推荐)
1# 创建权重目录
2mkdir -p /workspace/dm05/checkpoints
3
4# 从 BOS 下载 DM05 完整模型权重
5boscmd bos cp -r bos://aihc-models-bj/Dexmal/DM05/ /root/workspace/dm05/checkpoints/DM05/
5.3 从 HuggingFace 下载
1# 设置国内镜像加速下载
2export HF_ENDPOINT=https://hf-mirror.com
3export HF_HUB_ENABLE_HF_TRANSFER=1
4export HF_HOME=/root/workspace/models/huggingface
5export HF_HUB_CACHE=$HF_HOME/hub
6
7# 下载 DM05 开源权重
8huggingface-cli download Dexmal/DM05 --local-dir /root/workspace/dm05/checkpoints/DM05
六、在百舸平台创建训练任务
- 登录百舸平台,进入「训练任务」创建页。
- 选择推荐 GPU 资源规格:lgn7ib 96GB × 8(单机或按需多机)。
- 挂载数据集目录至
/root/workspace/dm05/data/libero/libero_pi0_all。 - 挂载模型权重目录至
/root/workspace/dm05/checkpoints/DM05。 - 设置工作目录为
/root/workspace/dm05。 - 通过启动脚本配置启动命令(见下文)并提交任务。
镜像内已包含训练代码与全部 Python 依赖,无需额外安装或挂载 .venv / conda 环境。
七、关键训练参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
--data-config.dataset-name |
libero_pi0_all |
数据集名称 |
--data-config.norm-stats-root |
$NORM_STATS_PATH |
action normalization 统计文件目录,需与数据集和 action chunk 配置匹配 |
--model-config.model-name-or-path |
/root/workspace/dm05/checkpoints/DM05 |
模型权重(checkpoint)路径 |
--model-config.chunk-size |
10 |
每个样本的 action chunk 长度 |
--optimizer-config.optim |
adamw |
优化器类型 |
--optimizer-config.base-lr |
2.5e-5 |
基础学习率 |
--optimizer-config.warmup-steps |
1000 |
Warmup 步数 |
--trainer-config.per-device-train-batch-size |
10 |
每张 GPU 的 micro-batch 大小(可通过 PER_DEVICE_BATCH 环境变量覆盖) |
--trainer-config.gradient-accumulation-steps |
1 |
梯度累积步数 |
--trainer-config.num-train-steps |
300 |
训练总步数(可通过 TRAIN_STEPS 环境变量覆盖) |
--trainer-config.save-strategy |
no |
训练过程中不保存 checkpoint;正式训练可改为 steps |
--trainer-config.dataloader-num-workers |
4 |
每个训练进程的 DataLoader worker 数 |
全局 Batch Size(GBS)计算方式:
1GBS = NNODES × GPUS_PER_NODE × per_device_train_batch_size × gradient_accumulation_steps
八、启动训练
镜像内已提供启动脚本,单机与多机场景使用同一脚本,通过环境变量区分拓扑。脚本默认使用 /root/workspace/dm05 作为工作目录,并兼容平台注入的 RANK / WORLD_SIZE 等变量。
8.1 启动脚本
优化脚本开启内置加速优化项,推荐同时开启 R1+R5+R7+R8+R10+R13+R14+R16+R18 组合(脚本已默认配置)。
1# 设置数据目录
2export WORKSPACE_DIR="/root/workspace/dm05"
3export DATA_PATH="$WORKSPACE_DIR/data/libero/libero_pi0_all"
4
5
6# 默认配置(单卡 bsz 为 4)
7bash /root/workspace/dm05/scripts/run_full_sft_distributed.sh
8
9# 修改配置:设置单卡 bsz 为 8
10PER_DEVICE_BATCH=8 bash /root/workspace/dm05/scripts/run_full_sft_distributed.sh
11
12# 修改配置:设置训练步数为 2000
13TRAIN_STEPS=2000 bash /root/workspace/dm05/scripts/run_full_sft_distributed.sh
核心优化开关(可通过环境变量开启/关闭):
1export DM05_PERF_ENABLE=1 # 启用加速优化(总开关)
2export DM05_PERF_LOG=1
3
4export DM05_PERF_R1_FUSED_ADAMW=1 # R1: FusedAdamW 优化
5export DM05_PERF_R5_DDP_BUCKET=1 # R5: DDP bucket 优化
6export DM05_DDP_BUCKET_CAP_MB="$BUCKET_MB"
7export DM05_PERF_R7_ASYNC_LOSS_AR=1 # R7: 异步 loss allreduce
8export DM05_PERF_R8_COMPILE_SUFFIX_LOOP=1 # R8: torch.compile 后缀循环
9export DM05_PERF_R10_TF32_MATMUL=1 # R10: TF32 矩阵运算
10export DM05_PERF_R10_MATMUL_PRECISION=high
11export DM05_PERF_R10_CUDNN_BENCHMARK=1 # R10: cuDNN benchmark
12export DM05_PERF_R13_GEMMA3_FORWARD_SYNC=1 # R13: Gemma3 forward sync
13export DM05_PERF_R14_COMPILE_SIGLIP=1 # R14: SIGLIP torch.compile
14export DM05_PERF_R16_MODULE_REORDER=1 # R16: 模型结构重排
15export DM05_PERF_R18_CUDA_GRAPH=1 # R18: CUDA Graph
16
17# 其他配套优化
18export DM05_MUON_BATCHED_GATHER=1 # muon batched gather
19export DM05_DDP_STATIC_GRAPH=1 # DDP 静态图
优化项均通过
DM05_PERF_ENABLE=1总开关控制,单项优化可独立开关。若训练出现异常,可先关闭部分优化项(如 R18 CUDA Graph)进行排查。
8.3 多机训练说明
- 多机时需通过
MASTER_ADDR设置 rank 0 节点地址,并确保所有节点MASTER_PORT、NNODES、NPROC_PER_NODE配置一致。 - 单机场景
DDP_BUCKET_MB默认为 1000,多机场景默认为 512。
九、性能参考
以下数据为特定测试环境(lgn7ib 96GB × 8)下的参考值,step time 采集自训练稳态(第 100 步),实际性能受资源规格、数据读取方式、网络环境、任务参数等因素影响。
9.1 单机(1 节点 × 8 卡)
| 配置 | Step time (s) | Samples/s | 加速比 |
|---|---|---|---|
| 基线(BS=8) | 1.06 | 60.38 | — |
| 优化后(BS=8) | 0.93 | 69.12 | 1.140x |
| 基线(BS=4) | 0.7813 | 40.96 | — |
| 优化后(BS=4) | 0.6667 | 48.00 | 1.172x |
9.2 双机(2 节点 × 8 卡)
| 配置 | Step time (s) | Samples/s | 加速比 |
|---|---|---|---|
| 基线(BS=8) | 1.11 | 115.32 | — |
| 优化后(BS=8) | 0.96 | 133.12 | 1.156x |
| 基线(BS=4) | 0.85 | 75.72 | — |
| 优化后(BS=4) | 0.77 | 83.20 | 1.104x |
9.3 Loss 对齐验证
优化前后的 loss 收敛曲线一致,加速优化不影响模型训练效果与收敛趋势。
十、常见问题
10.1 显存不足(OOM)
双机场景下单卡 batch size 较大时(如 BS=10)可能出现显存不足。可尝试:
- 降低
PER_DEVICE_BATCH(如从 10 降至 8 或 4); - 将
--trainer-config.gradient-accumulation-steps设为2,将全局 batch 拆分为多个 micro-batch,降低单次显存压力; - 如仍无法解决,可关闭部分显存敏感优化项(如
DM05_PERF_R18_CUDA_GRAPH=0)。
10.2 需要保存训练权重(Checkpoint)
默认启动脚本不保存 checkpoint。如需按步保存,将 --trainer-config.save-strategy 修改为 steps 并配置保存间隔:
1--trainer-config.save-strategy steps \
2--trainer-config.save_steps 100 \
3--trainer-config.output-dir "/root/workspace/outputs" # ckpt 默认保存路径
10.3 断点续训
通过修改 --model-config.model-name-or-path 指向待加载的权重目录即可,与加载开源权重使用同一配置接口:
1--model-config.model-name-or-path "/root/workspace/dm05/checkpoints/DM05"
评价此篇文章
