# OpenDM

English | 简体中文
## 简介
DM0.5 是 Dexmal 面向开放世界机器人控制发布的新一代视觉-语言-动作模型(VLA)。它继承了 DM0 的原生具身建模路线,并进一步面向开放指令、长程任务、动态干扰和多机器人本体控制进行系统升级。
OpenDM 提供 DM0.5 的模型权重、训练与推理脚本、数据注册示例和评测流程,便于研究者和开发者进行持续训练、微调、评测和部署。
## 最新动态
- [2026-08-03] 已发布 AgileX COBOT Magic 与 DOS-W1 的[真机机型改动说明](docs/zh/robot_platforms.md),记录相机改动及机型名称映射。
- [2026-07-24] DM0.5 已新增 SO101 pick cube 微调 checkpoint 和 LoRA SFT 流程。参考 [DM05 SO101 LoRA 训练指南](docs/zh/dm05_so101_lora_training.md)。
- [2026-07-17] DM0.5 已开源 RoboTwin2.0 generalist 模型 checkpoint,以及基于 DM0.5 预训练模型的监督微调(SFT)代码。参考 [DM05 RoboTwin2.0 训练与评测指南](docs/zh/dm05_robotwin2.md)。
- [2026-07-09] DM0.5 正式发布。更多模型细节请阅读[技术博客](https://www.dexmal.com/blog/dm0.5/index.html)。
## 模型
| 模型 | 描述 | 权重地址 |
| --- | --- | --- |
| DM05 | 用于微调的 DM0.5 基础模型 | [🤗 Hugging Face](https://huggingface.co/Dexmal/DM05) / [🤖 ModelScope](https://modelscope.cn/models/Dexmal/DM05) |
| DM05-libero | 用于 LIBERO 评测的 DM0.5 微调模型 | [🤗 Hugging Face](https://huggingface.co/Dexmal/DM05-libero) / [🤖 ModelScope](https://modelscope.cn/models/Dexmal/DM05-libero) |
| DM05-robotwin2 | 用于 RoboTwin2.0 评测的 DM0.5 微调模型 | [🤗 Hugging Face](https://huggingface.co/Dexmal/DM05-robotwin2) / [🤖 ModelScope](https://modelscope.cn/models/Dexmal/DM05-robotwin2) |
| DM05-SO101-Pick-Cube | 用于 SO101 评测的 DM0.5 微调模型 | [🤗 Hugging Face](https://huggingface.co/Dexmal/DM05-SO101-Pick-Cube) / [🤖 ModelScope](https://modelscope.cn/models/Dexmal/DM05-SO101-Pick-Cube) |
| DM05-VLA-Arena | 用于 VLA-Arena 评测的 DM0.5 微调模型 | [训练与评测](docs/zh/dm05_vla_arena.md) / [🤖 ModelScope](https://modelscope.cn/models/Dexmal/DM05-Vla-Arena) |
| DM05-Table30v2 | 用于 RoboChallenge Table 30 v2 评测的 DM0.5 模型集合 | [🤗 Hugging Face](https://huggingface.co/collections/Dexmal/dm05-table30v2) / [🤖 ModelScope](https://www.modelscope.cn/collections/Dexmal/DM05-Table30v2) |
模型下载示例:
```bash
huggingface-cli download Dexmal/DM05 --local-dir ./checkpoints/DM05
```
## Benchmark 结果
|
Benchmark |
Metric |
DM0.5 |
Pi0 |
Pi0.5 |
GROOT-N1.7 |
| Simulated Tasks |
LIBERO |
SR |
99.0% |
94.4% |
96.9% |
97.0% |
| RoboTwin2.0 |
Clean |
93.6% |
65.9% |
82.7% |
- |
| Rand |
93.3% |
58.4% |
76.8% |
- |
| VLA-Arena |
L0 |
89.0% |
82.3% |
64.3% |
- |
| L1 |
53.6% |
32.2% |
35.6% |
- |
| L2 |
44.1% |
11.4% |
24.5% |
- |
| Real-World Tasks |
RoboChallenge Table30V2 |
Score |
54.42 |
- |
31.48 |
- |
| SR |
43.0% |
- |
14.3% |
- |
点击表格中的 Benchmark 名称,可查看 DM05 在对应数据集下的训练与评测文档。
## 快速开始
推荐优先使用 Docker 准备运行环境,避免宿主机 CUDA、PyTorch、flash-attn 等依赖版本不一致。
### 环境要求
```text
系统要求:
Ubuntu 20.04 / 22.04
NVIDIA GPU
NVIDIA Driver
Docker
NVIDIA Container Toolkit
Conda(可选)仅本地 pip 安装方式需要
推荐 GPU:
RTX 4090, A100, H100, H20
训练建议使用 8 卡,部署推理使用 1 卡即可
```
下面的基础环境只覆盖训练和 default backend 推理。fast backend 还需要单独安装
TensorRT Python/runtime、Triton,以及支持 PyTorch FlexAttention 的环境。
### Docker 安装
```bash
git clone https://github.com/dexmal/opendm.git
cd opendm
docker run -it --rm --gpus all --network host \
--name opendm \
--shm-size=16g \
-v "$PWD":/app/opendm \
-w /app/opendm \
dexmal/opendm:latest /bin/bash
# 在容器内的 OpenDM 仓库根目录运行。
conda activate opendm
pip install -e .
```
以上命令只会创建基础 OpenDM 环境。如果要使用
`--inference-config.backend fast`,还需要继续安装下面的 fast backend 环境层。
### 本地安装
```bash
conda create -n opendm python=3.10 -y
conda activate opendm
pip install torch torchvision \
--index-url https://download.pytorch.org/whl/cu128
pip install ninja packaging
MAX_JOBS=2 pip install flash-attn --no-build-isolation
# 进入 OpenDM 仓库根目录。
cd opendm
pip install -e .
```
### Fast Backend 环境层
上面的 Docker / 本地安装还不足以运行 `--inference-config.backend fast`。请在同一个
`opendm` 环境中继续安装 fast 推理依赖层:
```bash
pip install -e ".[fast-infer]"
```
`fast-infer` extra 会安装 `onnx`、`triton==3.6.0` 和 `tensorrt`。Fast 启动不是“能用就
加速、不能用就回退”的可选优化:OpenDM 会直接构建或加载 TensorRT vision engine,
调用 Triton prefix/suffix kernels,并强制把 LLM attention backend 切到
`flex_attention`。因此 TensorRT、Triton 和 PyTorch FlexAttention 支持都是 fast 推理
的前置条件。
启动 fast backend 前,先在当前环境确认:
```bash
python -c "import tensorrt"
python -c "import triton"
python -c "import torch.nn.attention.flex_attention"
```
请使用提供 `torch.nn.attention.flex_attention` 的 PyTorch 版本,例如 `torch>=2.5`。
同时要预留首次 fast 启动时间:每个 checkpoint / image layout 第一次启动时,服务会先
导出 ONNX 并构建 TensorRT engine,之后 HTTP 服务才会就绪。
## 推理
下载 DM05 基础预训练模型后,可以使用 default backend 启动推理服务:
```bash
script/dm05_launcher.sh \
--exp opendm/exp/dm05_exp.py \
--task inference \
--model-config.model-name-or-path ./checkpoints/DM05 \
--model-config.chunk-size 50 \
--inference-config.output-action-dim 14 \
--inference-config.image-prompts "Head" "Left wrist" "Right wrist" \
--inference-config.port 7891
```
该示例使用三路图像输入和 14 维 state/action。不同机器人 profile、HTTP 请求字段、
微调模型启动命令、fast backend 配置、运行约束和问题排查参考
[DM05 推理指南](docs/zh/dm05_inference.md)。
新的接入方优先使用 `/v1/infer`。旧的 `/process_frame` multipart 接口仍作为 legacy 兼容路径保留,但会逐步被替换。
## 训练
### 数据准备
按照 OpenDM [数据使用指南](docs/zh/data.md)准备数据文件并注册数据集,并确保训练命令中的 `--data-config.dataset-name` 与实际注册的数据集名称一致。
训练脚本通过 `--data-config.dataset-name` 指定数据集名称。启动训练前,需要先在项目数据注册表中注册对应数据集。建议参考已有的 `opendm/dataset/demo.py`,复制一份新的数据集配置文件,例如 `opendm/dataset/my_robot.py`,然后修改数据集名称、数据路径、图像字段和状态描述。
```python
# opendm/dataset/my_robot.py
from opendm.constants.robot import RobotStateDesc, RobotType
from opendm.dataset.register import register_dataset
MY_ROBOT_STATE_DESC = (
[RobotStateDesc.JOINT] * 6
+ [RobotStateDesc.GRIPPER]
+ [RobotStateDesc.JOINT] * 6
+ [RobotStateDesc.GRIPPER]
)
register_dataset(
{
"my_robot": {
"jsonl_dir": "./assets/my_robot/",
"image_dir": "./assets/my_robot/",
"image_keys": ["images_1", "images_2", "images_3"],
"image_prompts": ["Head", "Left wrist", "Right wrist"],
"robot_type": RobotType.ALOHA,
"state_desc": MY_ROBOT_STATE_DESC,
},
}
)
```
字段说明:
- `my_robot`:注册到数据集表中的数据集名称,训练时通过 `--data-config.dataset-name my_robot` 使用。
- `jsonl_dir`:训练数据的 `jsonl` 文件目录。
- `image_dir`:图像文件目录。
- `image_keys`:数据中需要读取的图像字段名。
- `image_prompts`:与加载图像顺序对应的 prompt 标签(如 Head / Left wrist)。
- `robot_type`:数据对应的机型,用于选择 state 描述和该机型的归一化统计。
- `state_desc`:状态 / 动作各维度对应的机器人关节、夹爪等含义。
训练启动时,如果对应的归一化参数文件不存在,脚本会根据当前实验数据、action mode 和 chunk size 自动计算,并保存到 `./norm_stats/`。同一实验中相同机型的数据共享一组统计值,不同机型分别写入同一文件。
### 启动训练
完成环境安装、源码初始化和数据准备后,可以启动模型训练。训练脚本会读取指定数据集配置,加载基础模型 checkpoint,并按照配置启动训练。
```bash
script/dm05_launcher.sh \
--exp playground/dm05_sft_demo.py \
--task train \
--nproc_per_node 8 \
--data-config.dataset-name my_robot \
--model-config.model-name-or-path ./checkpoints/DM05 \
--model-config.chunk-size 50 \
--trainer-config.num-train-steps 50000
```
参数说明:
- `--exp playground/dm05_sft_demo.py`:本示例使用 DM05 SFT demo 配置作为训练入口;如果自定义数据需要不同配置,可以复制并调整该入口。
- `--task train`:指定当前任务为训练模式。
- `--nproc_per_node 8`:单机启动的训练进程数,通常对应使用的 GPU 数量。
- `--data-config.dataset-name my_robot`:指定训练数据集名称,需要与项目中的数据配置保持一致。
- `--model-config.model-name-or-path ./checkpoints/DM05`:指定初始模型 checkpoint 路径。
- `--model-config.chunk-size 50`:指定模型一次预测的动作块(action chunk)长度。
- `--trainer-config.num-train-steps 50000`:总训练步数。
#### 启用 Weights & Biases 训练记录
W&B 是可选功能,只有传入项目名称时才会启用。OpenDM 已包含 `wandb` 依赖。
1. 在训练机器上完成认证:
```bash
wandb login
```
对于非交互式任务,可以改为设置 `WANDB_API_KEY`。不要将 API key 提交到代码仓库。
2. 在现有训练命令中增加以下参数:
```text
--trainer-config.wandb-project
```
将 `` 替换为要使用的 W&B 项目名称,例如 `dm05-sft`。删除该参数即可关闭 W&B。
训练开始后,日志会输出数据加载、模型初始化、loss、checkpoint 保存等信息。实际训练前请确认数据路径、模型权重路径和 GPU 数量均已正确配置。
## DM05 SFT 与自定义数据微调
建议先使用内置 demo 数据和 `playground/dm05_sft_demo.py` 跑通一次完整的 DM05 SFT 流程,熟悉数据格式、归一化统计、训练、推理和服务验证后,再替换为自己的机器人数据进行 SFT。参考 [DM05 SFT 与验证指南](docs/zh/dm05_finetuning.md)。
## Benchmark 微调参考流程
如需端到端微调 DM05,可以参考 benchmark 微调指南,其中包含数据准备、SFT 训练和 benchmark 评测。推理服务统一参考 [DM05 推理指南](docs/zh/dm05_inference.md)。
- LIBERO:[DM05 LIBERO 训练与评测指南](docs/zh/dm05_libero.md)
- RoboTwin2.0:[DM05 RoboTwin2.0 训练与评测指南](docs/zh/dm05_robotwin2.md)
- VLA-Arena:[DM05 VLA-Arena 训练与评测指南](docs/zh/dm05_vla_arena.md)
- SO101:[DM05 SO101 LoRA 训练指南](docs/zh/dm05_so101_lora_training.md)
- RoboChallenge Table 30 v2:[DM05 RoboChallenge Table 30 v2 推理指南](docs/zh/dm05_robochallenge.md)
## 使用指南
- 下载模型:参考[模型](#模型)或访问 [Dexmal Hugging Face](https://huggingface.co/Dexmal)
- 查看真机配置改动:参考 [AgileX COBOT Magic 与 DOS-W1 机型改动说明](docs/zh/robot_platforms.md)
- 准备数据:参考 [OpenDM 数据使用指南](docs/zh/data.md)
- 启动推理服务:参考 [DM05 推理指南](docs/zh/dm05_inference.md)
- 使用 demo 或自有数据进行 DM05 SFT:参考[DM05 SFT 与验证指南](docs/zh/dm05_finetuning.md)
- Benchmark 训练和评测:参考[DM05 LIBERO 训练与评测指南](docs/zh/dm05_libero.md)、[DM05 RoboTwin2.0 训练与评测指南](docs/zh/dm05_robotwin2.md)和[DM05 RoboChallenge Table 30 v2 推理指南](docs/zh/dm05_robochallenge.md);LoRA SFT 参考[DM05 LIBERO LoRA 训练](docs/zh/dm05_libero_lora_training.md)和[DM05 SO101 LoRA 训练指南](docs/zh/dm05_so101_lora_training.md)
## 社区与支持
- 了解更多 Dexmal 产品与模型动态,请访问 [Dexmal 官网](https://www.dexmal.com/)。
- 获取 DM 模型权重,请访问 [Dexmal Hugging Face](https://huggingface.co/Dexmal)。
- 如果你在使用中遇到问题,欢迎通过 [GitHub Issues](https://github.com/dexmal/opendm/issues) 反馈。
- 如需进一步沟通,也可以扫描[微信二维码](docs/image/wechat.jpeg)与我们联系。
我们将持续开放更多模型权重、技术文档和示例。如果这个项目对你有帮助,欢迎在 GitHub 上给我们一颗星 [](https://github.com/dexmal/opendm),你的支持是我们前进的动力。
## 许可
本项目采用 [Apache-2.0 许可证](LICENSE)。