Dexbotic对比评估部分主流VLA模型性能
由于Dexbotic最好使用容器进行开发或部署,我们首先需要解决租赁云服务器时实例本身就是Docker容器无法嵌套的问题。对此我们需要创建自定义镜像。以我自己的操作过程为例,我本身在无问芯穹的云服务器进行开发,先根据下图提示打开使用命令行上传镜像的地方:去到控制台,点击算力租赁点击左侧镜像选项,再点击自定义镜像,点击上传镜像,选择命令行上传,他会给出相应操作流程:保持在这个界面,作为我们后续将镜像
一、Dexbotic介绍
文章链接:Dexbotic: Open-Source Vision-Language-Action Toolbox
Dexbotic aims to provide a one-stop VLA research service for professionals in embodied intelligence field. It offers a codebase that supports multiple mainstream VLA policies simultaneously, allowing users to reproduce various mainstream VLA methods with just a single environment setup based on the pretrained models we provide. Additionally, Dexbotic will continuously update to include more of the latest pre-trained foundation models and cutting-edge VLA models in the industry.
二、自定义镜像
由于Dexbotic最好使用容器进行开发或部署,我们首先需要解决租赁云服务器时实例本身就是Docker容器无法嵌套的问题。对此我们需要创建自定义镜像。以我自己的操作过程为例,我本身在无问芯穹的云服务器进行开发,先根据下图提示打开使用命令行上传镜像的地方:
去到控制台,点击算力租赁
点击左侧镜像选项,再点击自定义镜像,点击上传镜像,选择命令行上传,他会给出相应操作流程:

保持在这个界面,作为我们后续将镜像上传至无问芯穹的指南
此时我们去到一个新的云服务器进行Dexbotic的拉取。由于大多数服务器墙的比较厉害,改国内镜像也总是卡在最后一个文件。为了避坑,建议大家直接去租自带如香港节点的云服务器。我在阿里云租赁了一个最便宜的服务器,记得选择中国香港作为节点,租卡操作我就不再赘述了:
在终端执行如下指令:
apt-get install -y docker-ce docker-ce-cli containerd.io # 安装Docker
docker pull dexmal/dexbotic:latest
此时就可以根据刚才无问芯穹的指令进行操作:
docker login --username='...' sichuan-a.cr.infini-ai.com:32443
# 密码
docker tag dexmal/dexbotic:latest sichuan-a.cr.infini-ai.com:32443/te-dcdssswkkuuats5n/dexbotic:latest
docker push sichuan-a.cr.infini-ai.com:32443/te-dcdssswkkuuats5n/dexbotic:latest
此时你能在如下界面看到你上传的镜像,我们打开开发机:
选择创建开发机:
选择自定义镜像并添加,同时一定记得勾选SSH密码登录与Docker容器,创建成功后就可以按照正常流程启动该云服务器了(如果不知道怎么操作可以点击这里查看具体步骤)

三、运行测评
1. 基础环境准备与CogACT
利用我们自定义的镜像创建新的云服务器,接下来克隆仓库、激活环境、安装依赖:
git clone https://github.com/dexmal/dexbotic.git
cd /dexbotic
conda activate dexbotic
pip install -e .
完成后我们开始下载Dexbotic官方调过的模型权重(先以CogACT为例),为了解决网络问题,而即使我用了国内镜像加速 hf-mirror.com,但这个模型的文件存储在 HuggingFace 的一种特殊存储服务(XetHub)上,而镜像站没能正确转发这个特殊的存储地址,导致出现了 no such host的报错。下述操作已经启用Python官方提供的下载工具 (huggingface-cli):
# 1. 安装 git-lfs (大文件下载工具)
apt-get update && apt-get install -y git-lfs
git lfs install
# 2. 创建存放权重的目录
mkdir -p checkpoints/libero
# 3. 下载模型权重
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download Dexmal/libero-db-cogact --local-dir checkpoints/libero/libero_cogact
此时应该有一些环境冲突导致下载中断,按照如下操作即可:
pip install "huggingface_hub<1.0.0"
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download Dexmal/libero-db-cogact --local-dir checkpoints/libero/libero_cogact
这套代码采用了Client-Server(客户端-服务器)架构来进行评测,这是一个在机器人研究中非常高级且常见的设计:
-
Terminal 1(我们当前这个窗口):是 “大脑”(Model Server)。它加载了模型权重,挂在 7891 端口上,正在安静地等待指令。
-
Terminal 2(我们需要新开一个):应该是 “身体”(Evaluation Client)。它负责运行仿真环境(那个做家务的机器人),它会不断向 Terminal 1 发送画面,问:“我现在该怎么动?”,然后 Terminal 1 回复动作。
故下载完之后,我们现在当前的terminal1启动server:
# 注意加了 -u 参数,这样报错会立即打印出来
CUDA_VISIBLE_DEVICES=0 python -u playground/benchmarks/libero/libero_cogact.py \
--task inference \
--image_path test_data/libero_test.png \
--prompt "ignored_in_benchmark_mode"
等到看到Running on http://127.0.0.1:7891后说明server已经启动。我们先返回dexbotic所在目录,打开一个新的终端terminal2,再进行如下操作:
conda activate dexbotic
# 加上 -H "Expect:" 禁用 100-continue 等待,防止服务器卡死
curl -v -H "Expect:" -X POST \
-F "text=What action should the robot take to put both moka pots on the stove?" \
-F "image=@test_data/libero_test.png" \
http://localhost:7891/process_frame
若输出一长串 {“response”:[[0.456…]]}和* Closing connection 0,说明我们的“大脑”(VLA模型)已经成功接收了图片,进行了复杂的推理,并返回了一组具体的机械臂动作轨迹。
由于评测代码在另一个仓库,我们在terminal2下先克隆下来:
git clone https://github.com/Dexmal/dexbotic-benchmark.git
cd dexbotic-benchmark
此时我们需要拉取初始化子模块,因为很多核心代码都在子模块里,它会把 libero 等仿真器的实际代码下载下来:
git submodule update --init --recursive
但是由于网络原因,上述指令试图一次性把所有仿真环境(RoboTwin, Calvin, ManiSkill 等)都下载下来。这些仓库里包含大量的 3D 模型和纹理,体积巨大,国内网络环境下极容易卡死或断连。所以我准备先只测评LIBERO,指定只初始化 libero 这一个子模块,这样速度会快很多,也更不容易失败:
# 只更新 libero 子模块
git submodule update --init libero
可惜即使这样,还是因为网络问题失败了。所以我们用 “浅克隆” 加上 “国内加速代理”来解决:
# 强行停止(如果还在卡着)
# 按 Ctrl + C
# 删除失败的文件夹
rm -rf libero
# 方案 A:浅克隆(速度快很多)
git clone --depth 1 https://github.com/Lifelong-Robot-Learning/LIBERO.git libero
# 方案 B:使用加速代理(通常秒下,根据需要调整注释来选择具体方案,通常A就行,如果B的镜像也不行,可以试试把域名换成 gitclone.com
# git clone --depth 1 https://github.moeyy.xyz/https://github.com/Lifelong-Robot-Learning/LIBERO.git libero
# 安装依赖包
pip install -e libero
完成上面的步骤之后,接下来是我已经尝试过后得到的必要的解决环境冲突的步骤,直接挨个操作即可:
# 补几个 Libero 运行必须的额外包
pip install termcolor easydict h5py hydra-core omegaconf dm_control
# 安装 imageio 以及常见的评测伴侣(防止后面报错缺 cv2 或 wandb)
pip install imageio opencv-python wandb pandas matplotlib
# 强制把 numpy 降级回 1.26.4,解决冲突
pip install "numpy==1.26.4"
# 降级 opencv 到兼容旧版 numpy 的版本
pip install "opencv-python==4.9.0.80"
# 安装机器人仿真框架 robosuite
# 强制安装 1.4.1 版本
pip install "robosuite==1.4.1"
# 由于我们的服务器本身是光秃秃的自定义镜像,再补充一些系统级驱动库
apt-get update && apt-get install -y libgl1 libglib2.0-0 libsm6 libxext6 libxrender-dev
# 安装 libegl1 (EGL支持) 和 libgl1-mesa-glx (兼容性支持)
# 通过 EGL 协议解决在没有显示器的服务器上使用 GPU 进行渲染的问题
apt-get install -y libegl1 libgl1-mesa-glx
export MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl
# 安装缺失的 bddl 库
pip install bddl
# 为了防止 pip 自动升级 numpy 导致崩盘,再次强制锁定版本
pip install "numpy==1.26.4"
# 安装 cloudpickle
pip install cloudpickle
# 安装 0.25.2 版本,既能避开旧版的安装报错,又能保持 API 兼容
pip install "gym==0.25.2"
此时再执行评测运行命令即可:
bash scripts/env_sh/libero.sh evaluation/configs/libero/example_libero.yaml
2. Pi0(相对特殊)
首先在我们之前创建的文件夹中下载官方给的权重(其他权重也可以在官方找到):
# 1. 创建存放目录 (保持整洁,方便管理)
mkdir -p checkpoints/libero/libero_pi0
# 2. 执行下载
huggingface-cli download Dexmal/libero-db-pi0 --local-dir checkpoints/libero/libero_pi0
此时我们打开文件/root/dexbotic/dexbotic/exp/pi0_exp.py,大概在第332行附近找到函数def _initialize_inference(self) -> None,在如下位置:
def _initialize_inference(self) -> None:
if self.norm_stats is None:
norm_stats_file = os.path.join(self.model_name_or_path, "norm_stats.json")
强制插入模型路径,插入后如下:
def _initialize_inference(self) -> None:
# [HACK] 强制指定模型路径
self.model_name_or_path = "/root/dexbotic/checkpoints/libero/libero_pi0"
if self.norm_stats is None:
norm_stats_file = os.path.join(self.model_name_or_path, "norm_stats.json")
接下来其他模型都能按照上述cogact的方法正常跑起来,但唯独pi0总是0成功率,在进行了大量排查(包括图像接受,脚本处理逻辑等)后发现,应该将上述的terminal2的dexbotic-benchmark中的evaluation/configs/libero/example_libero.yaml文件中的replan(执行多少步后重新推理)改成5,反应更灵敏。
不过现在官方也发现了这个问题,在/dexbotic-benchmark/evaluation/configs/libero中添加新文件example_pi0_libero.yaml,我们直接使用它在terminal2运行即可。
在terminal1中,进入dexbotic并激活环境,然后运行如下指令:
cd dexbotic
conda activate dexbotic
CUDA_VISIBLE_DEVICES=0 python -u playground/benchmarks/libero/libero_pi0.py \
--task inference \
--image_path test_data/libero_test.png \
--prompt "ignored_in_benchmark_mode"
此时再打开terminal2,进入dexbotic-benchmark并激活环境,运行如下指令即可:
cd dexbotic-benchmark
conda activate dexbotic
bash scripts/env_sh/libero.sh evaluation/configs/libero/example_pi0_libero.yaml
PS:或许因为网络原因,可能还会遇到关于SigLIP的问题,也就是服务器无法访问外网,而在terminal1运行上面的相应指令去跑libero_pi0.py后,代码试图从互联网下载这个视觉模型(google/siglip-so400m-patch14-224),进而会报错并影响使用。此时我们需要手动下载SigLIP:
# 1. 设置 HuggingFace 镜像地址
export HF_ENDPOINT=https://hf-mirror.com
# 2. (可选) 验证一下能不能连通,如果有返回说明网络通了
curl -I https://hf-mirror.com
# 3. 下载 Google 的 SigLIP 模型到指定目录
huggingface-cli download google/siglip-so400m-patch14-224 --local-dir checkpoints/siglip
显示下载成功后,我们依然需要修改 config.json,因为代码默认还是会去云端找,而我们需要显式告诉它:“用我下载好的这个文件夹”。打开/root/dexbotic/checkpoints/libero/libero_pi0/config.json,找到 vision_config 部分,修改如下:
"vision_config": {
"model_name_or_path": "/root/dexbotic/checkpoints/siglip",
...
}
四、结果展示
按照上述过程运行cogact终端日志如下,其他的模型也类似,就不再展示了:

部分具体对比结果与官方差异如下:
| Model | Libero-Spatial | Libero-Object | Libero-Goal | Libero-10 | Average | Own_Libero_Goal |
|---|---|---|---|---|---|---|
| CogACT | 97.2 | 98.0 | 90.2 | 88.8 | 93.6 | 89.2% |
| DB-CogACT | 93.8 | 97.8 | 96.2 | 91.8 | 94.9 | 91.8% |
| π0 | 96.8 | 98.8 | 95.8 | 85.2 | 94.2 | 92.6% |
| DB-π0 | 97 | 98.2 | 94 | 86.4 | 93.9 | 95.4% |
| MemVLA | 98.4 | 98.4 | 96.4 | 93.4 | 96.7 | 94.4% |
| DB-MemVLA | 97.2 | 99.2 | 98.4 | 93.2 | 97.0 | 96.0% |
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)