dexmal / opendm

An Open-World Foundation Model for General-Purpose Embodied Intelligence.

embodied-aiembodied-intelligenceroboticsvision-language-actionvla
289 12 0 更新于 2026-08-06 23:47

OpenDM

DM0.5

Tech Blog Hugging Face ModelScope MaaS License

English | 简体中文

简介

DM0.5 是 Dexmal 面向开放世界机器人控制发布的新一代视觉-语言-动作模型(VLA)。它继承了 DM0 的原生具身建模路线,并进一步面向开放指令、长程任务、动态干扰和多机器人本体控制进行系统升级。

OpenDM 提供 DM0.5 的模型权重、训练与推理脚本、数据注册示例和评测流程,便于研究者和开发者进行持续训练、微调、评测和部署。

最新动态

  • [2026-08-03] 已发布 AgileX COBOT Magic 与 DOS-W1 的真机机型改动说明,记录相机改动及机型名称映射。
  • [2026-07-24] DM0.5 已新增 SO101 pick cube 微调 checkpoint 和 LoRA SFT 流程。参考 DM05 SO101 LoRA 训练指南
  • [2026-07-17] DM0.5 已开源 RoboTwin2.0 generalist 模型 checkpoint,以及基于 DM0.5 预训练模型的监督微调(SFT)代码。参考 DM05 RoboTwin2.0 训练与评测指南
  • [2026-07-09] DM0.5 正式发布。更多模型细节请阅读技术博客

模型

模型描述权重地址
DM05用于微调的 DM0.5 基础模型🤗 Hugging Face / 🤖 ModelScope
DM05-libero用于 LIBERO 评测的 DM0.5 微调模型🤗 Hugging Face / 🤖 ModelScope
DM05-robotwin2用于 RoboTwin2.0 评测的 DM0.5 微调模型🤗 Hugging Face / 🤖 ModelScope
DM05-SO101-Pick-Cube用于 SO101 评测的 DM0.5 微调模型🤗 Hugging Face / 🤖 ModelScope
DM05-VLA-Arena用于 VLA-Arena 评测的 DM0.5 微调模型训练与评测 / 🤖 ModelScope
DM05-Table30v2用于 RoboChallenge Table 30 v2 评测的 DM0.5 模型集合🤗 Hugging Face / 🤖 ModelScope

模型下载示例:

huggingface-cli download Dexmal/DM05 --local-dir ./checkpoints/DM05

Benchmark 结果

BenchmarkMetricDM0.5Pi0Pi0.5GROOT-N1.7
Simulated TasksLIBEROSR99.0%94.4%96.9%97.0%
RoboTwin2.0Clean93.6%65.9%82.7%-
Rand93.3%58.4%76.8%-
VLA-ArenaL089.0%82.3%64.3%-
L153.6%32.2%35.6%-
L244.1%11.4%24.5%-
Real-World TasksRoboChallenge
Table30V2
Score54.42-31.48-
SR43.0%-14.3%-

点击表格中的 Benchmark 名称,可查看 DM05 在对应数据集下的训练与评测文档。

快速开始

推荐优先使用 Docker 准备运行环境,避免宿主机 CUDA、PyTorch、flash-attn 等依赖版本不一致。

环境要求

系统要求:Ubuntu 20.04 / 22.04NVIDIA GPUNVIDIA DriverDockerNVIDIA Container ToolkitConda(可选)仅本地 pip 安装方式需要 推荐 GPU:RTX 4090, A100, H100, H20训练建议使用 8 卡,部署推理使用 1 卡即可

下面的基础环境只覆盖训练和 default backend 推理。fast backend 还需要单独安装 TensorRT Python/runtime、Triton,以及支持 PyTorch FlexAttention 的环境。

Docker 安装

git clone https://github.com/dexmal/opendm.gitcd 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 opendmpip install -e .

以上命令只会创建基础 OpenDM 环境。如果要使用 --inference-config.backend fast,还需要继续安装下面的 fast backend 环境层。

本地安装

conda create -n opendm python=3.10 -yconda activate opendm pip install torch torchvision \  --index-url https://download.pytorch.org/whl/cu128 pip install ninja packagingMAX_JOBS=2 pip install flash-attn --no-build-isolation # 进入 OpenDM 仓库根目录。cd opendmpip install -e .

Fast Backend 环境层

上面的 Docker / 本地安装还不足以运行 --inference-config.backend fast。请在同一个 opendm 环境中继续安装 fast 推理依赖层:

pip install -e ".[fast-infer]"

fast-infer extra 会安装 onnxtriton==3.6.0tensorrt。Fast 启动不是“能用就 加速、不能用就回退”的可选优化:OpenDM 会直接构建或加载 TensorRT vision engine, 调用 Triton prefix/suffix kernels,并强制把 LLM attention backend 切到 flex_attention。因此 TensorRT、Triton 和 PyTorch FlexAttention 支持都是 fast 推理 的前置条件。

启动 fast backend 前,先在当前环境确认:

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 启动推理服务:

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 推理指南。 新的接入方优先使用 /v1/infer。旧的 /process_frame multipart 接口仍作为 legacy 兼容路径保留,但会逐步被替换。

训练

数据准备

按照 OpenDM 数据使用指南准备数据文件并注册数据集,并确保训练命令中的 --data-config.dataset-name 与实际注册的数据集名称一致。

训练脚本通过 --data-config.dataset-name 指定数据集名称。启动训练前,需要先在项目数据注册表中注册对应数据集。建议参考已有的 opendm/dataset/demo.py,复制一份新的数据集配置文件,例如 opendm/dataset/my_robot.py,然后修改数据集名称、数据路径、图像字段和状态描述。

# opendm/dataset/my_robot.py from opendm.constants.robot import RobotStateDesc, RobotTypefrom 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,并按照配置启动训练。

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. 在训练机器上完成认证:

    wandb login

    对于非交互式任务,可以改为设置 WANDB_API_KEY。不要将 API key 提交到代码仓库。

  2. 在现有训练命令中增加以下参数:

    --trainer-config.wandb-project <project-name>

    <project-name> 替换为要使用的 W&B 项目名称,例如 dm05-sft。删除该参数即可关闭 W&B。

训练开始后,日志会输出数据加载、模型初始化、loss、checkpoint 保存等信息。实际训练前请确认数据路径、模型权重路径和 GPU 数量均已正确配置。

DM05 SFT 与自定义数据微调

建议先使用内置 demo 数据和 playground/dm05_sft_demo.py 跑通一次完整的 DM05 SFT 流程,熟悉数据格式、归一化统计、训练、推理和服务验证后,再替换为自己的机器人数据进行 SFT。参考 DM05 SFT 与验证指南

Benchmark 微调参考流程

如需端到端微调 DM05,可以参考 benchmark 微调指南,其中包含数据准备、SFT 训练和 benchmark 评测。推理服务统一参考 DM05 推理指南

使用指南

社区与支持

我们将持续开放更多模型权重、技术文档和示例。如果这个项目对你有帮助,欢迎在 GitHub 上给我们一颗星 GitHub,你的支持是我们前进的动力。

许可

本项目采用 Apache-2.0 许可证