Dexbotic 是一个基于 PyTorch 构建的开源 VLA 模型工具,面向具身智能领域的研究者和开发者,提供一站式的 VLA 研究服务。
开源地址:https://github.com/Dexmal/dexbotic
本文提供两个实践案例:
- ⌚️实践1:快速开始,进行SFT监督微调
- 🐳实践2:基于 SimpleVLA-RL 进行GRPO微调
🏗️ 系统架构,如下图所示:
从数据来源到模型训练、推理,再到仿真与真实世界部署,形成了一个闭环的具身智能开发体系。

核心模块拆解
| 模块 | 核心作用 | 关键组件/特性 |
|---|---|---|
| Embodiments(具身载体) | 提供多源机器人数据输入 | 支持 UR5、Franka、ALOHA 等主流机械臂及其他机器人平台,产生原始数据(Raw Data) |
| Data Layer(数据层) | 统一数据格式与处理 | - Dexdata Format:定义标准化数据结构,兼容多源机器人数据 - Dexdata Process:提供数据清洗、格式转换(如 LeRobot/RLDS → Dexdata) |
| Modular Framework(模块化框架) | 核心模型训练与推理引擎 | - Vision Encoder :CLIP、sigLIP、PE 等视觉编码器 - LLM :Qwen、StepFun、PaliGemma 等大语言模型 - Action Expert :扩散模型、流匹配、离散自回归预测 等动作生成策略 - VLA模型 : 支持 π0、π0.5、DM0、OFT、CogACT、MemVLA 等主流 VLA 模型 - 微调算法 : SFT监督微调、GRPO 等 |
| Experiment Layer(实验层) | 管理训练与推理全流程 | - Experiment Centric:以实验为核心的配置与调度 - Training PPL:分布式训练管线(支持 DeepSpeed 优化) - Inference PPL:实时推理服务(支持 API 调用) |
| Simulation & Real World(仿真与真实视觉) | 模型评估与验证 | - 仿真环境:用于快速迭代与基准测试 - 真实世界:验证模型在物理场景中的泛化能力 |
| Infra(基础设施) | 提供灵活算力支持 | - 云服务:阿里云、火山引擎等大规模云端训练平台 - 消费级 GPU:RTX 4090/5090 等本地训练部署 |
🌟 1、核心特性
统一的模块化 VLA 框架
- 围绕 VLA 模型构建,兼容主流大语言模型的开源接口
- 整合具身操作与导航能力,支持多种领先的具身操作/导航策略
- 预留全身控制接口,适配未来技术演进
多机器人训练与部署支持
- 支持 UR5、Franka、ALOHA 等主流机器人平台
- 提供统一的训练数据格式与通用化部署脚本
- 持续扩展更多主流机器人平台适配
云/本地灵活训练
- 支持阿里云、火山引擎等大规模云端训练平台
- 适配消费级 GPU(如 RTX 4090)的本地训练场景
标准化数据体系
- 定义统一的 Dexdata 数据格式,兼容多源机器人数据
- 提供 LeRobot、RLDS(Libero)等数据集的转换脚本
🚀 2、环境搭建
前置条件
- Ubuntu 20.04 / 22.04
- NVIDIA GPU(推荐:RTX 4090 / A100 / H100;训练建议 8 卡,部署单卡即可)
- 已安装 NVIDIA Docker
操作步骤
bash
# 克隆仓库
git clone https://github.com/Dexmal/dexbotic.git
# 启动 Docker 容器
docker run -it --rm --gpus all --network host \
-v /path/to/dexbotic:/dexbotic \
dexmal/dexbotic \
bash
# 容器内环境初始化
cd /dexbotic
conda activate dexbotic
pip install -e .
3、基本使用:训练模型与推理
训练运行
bash
# 分布式训练(torchrun)
torchrun playground/my_experiment.py
训练过程中,系统会:
- 加载并预处理数据集
- 按配置将模型 checkpoint 保存至
output_dir - (可选)通过 Weights & Biases 记录训练指标
- 按
save_steps配置定期保存模型
推理运行
训练完成后,启动推理服务:
bash
# 启动 Flask 推理服务
python playground/my_experiment.py --task inference
推理 API 调用示例:
bash
curl -X POST http://localhost:7891/process_frame \
-F "text=Grab the red object" \
-F "image=@/path/to/your/image.jpg"
# 响应示例
# {"response": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 1.0]}
模型评估
使用 dexbotic-benchmark 进行仿真基准评估:
bash
cd dexbotic-benchmark
docker run --gpus all --network host -v $(pwd):/workspace \
dexmal/dexbotic_benchmark \
bash /workspace/scripts/env_sh/libero.sh /workspace/evaluation/configs/libero/example_libero.yaml
⌚️4、实践1 :快速开始
运行预训练模型
以 Libero CogACT 模型为例:
bash
# 创建权重目录并下载预训练权重
mkdir -p checkpoints/libero
cd checkpoints/libero
git clone https://huggingface.co/Dexmal/libero-db-cogact libero_cogact
下载数据集
在 Hugging Face 提供了预处理的模拟器数据:
数据集目录结构建议:
bash
data/
libero/
libero_10/{video,jsonl}
libero_goal/
libero_object/
libero_spatial/
启动训练
bash
# 8 卡分布式训练示例(Libero 数据集)
torchrun --nproc_per_node=8 playground/benchmarks/libero/libero_cogact.py
# (可选)使用 DeepSpeed 降低显存占用(RTX 4090 8 卡场景)
# 需配合 scripts/deepspeed/zero3_offload.json 配置
🐳5、实践2 :基于 SimpleVLA-RL 进行GRPO微调
我们可以使用Dexbotic 基于SimpleVLA-RLVLA模型进行,实现强化学习(RL)后训练。
前置条件
- 操作系统:Ubuntu 20.04 或 22.04 (
默认使用上面搭建的docker环境就好) - 显卡要求:NVIDIA RTX H20(训练推荐8块GPU,部署使用1块GPU即可)
- 已安装NVIDIA Docker
步骤1:克隆代码仓库
bash
git clone git@gitlab.dexmal.com:robotics/dexbotic.git
步骤2:启动Docker容器
bash
docker run -it --rm --gpus all \
-v /path/to/dexbotic:/dexbotic \
dexmal/dexbotic:rl \
bash
步骤3:激活Dexbotic环境
bash
cd /dexbotic
conda activate dexbotic-rl
pip install -e .
启动强化学习后训练
bash
deepspeed playground/benchmarks/libero/libero_simplevla_rl.py \
--task=train \
--sft_model_path=/path/to/sft-checkpoint \
--dataset_name=libero_10
强化学习后训练的轨迹采样过程,需要一定时间收集足够的轨迹数据以完成逐步更新,过程中请耐心等待。
📊 6、数据格式
官网提供的仿真数据已经过处理和格式化,可以直接使用:
| Dataset | Link |
|---|---|
| Libero | 🤗 Hugging Face |
| CALVIN | 🤗 Hugging Face |
| Simpler-Env | 🤗 Hugging Face |
| RoboTwin 2.0 | 🤗 Hugging Face |
| ManiSkill2 | 🤗 Hugging Face |
按照以下目录结构,组织数据:
bash
[Your Code Path]
├── dexbotic
├── docs
├── data
│ ├── libero
│ │ ├── libero_10
│ │ │ ├── video
│ │ │ └── jsonl
│ │ ├── libero_goal
│ │ ├── libero_object
│ │ └── libero_spatial
│ ├── calvin
│ │ └── task_ABC_D
│ │ ├── video
│ │ └── jsonl
│ ├── robotwin
│ │ └── video
│ │ └── jsonl
│ ├── maniskill2
│ │ └── video
│ │ └── jsonl
│ └── simpler
│ ├── video
│ └── jsonl
└── ...
📊 7、自定义数据使用
数据格式要求
Dexbotic 采用统一的 Dexdata 格式存储机器人数据集,单集数据以 .jsonl 文件存储,每行对应一帧数据,格式示例:
json
{
"images_1": {"type": "video", "url": "url1", "frame_idx": 21},
"images_2": {"type": "video", "url": "url2", "frame_idx": 21},
"images_3": {"type": "video", "url": "url3", "frame_idx": 21},
"state": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 1.0],
"prompt": "open the door",
"is_robot": true
}
数据转换
我们提供了主流数据集到 Dexdata 格式的转换脚本:
- LeRobot 转 Dexdata:
script/convert_data/convert_lerobot_to_dexdata.py - RLDS(Libero)转 Dexdata:
script/convert_data/convert_rlds_to_dexdata.py
⚠️ 注:不同 RLDS 数据集的观测键值存在差异,RLDS 转换脚本仅作为参考,建议根据实际数据集调整。
数据格式参考:https://github.com/dexmal/dexbotic/blob/main/docs/Data.md
分享完成~