机器人需要能够在板载计算硬件上运行、同时适应其传感器、环境和任务的策略。世界模型为学习物理交互提供了基础,但其规模可能使设备端部署变得困难。随着全新的 NVIDIA Cosmos 3 Edge 的推出,这一情况发生了改变。
Cosmos 3 Edge 是 Cosmos 3 系列中的一款 4B 全模态模型(配备一个 2B 的基于 NVIDIA Nemotron 的推理器)。它与 NVIDIA Cosmos 3 Nano 和 NVIDIA Cosmos 3 Super 使用相同的物理世界数据进行了预训练,并同样以物体如何移动和交互为基础。此外,该模型足够小,可以在 NVIDIA Jetson Thor 上设备端运行。
你将构建什么
在本教程结束时,你将拥有一个经过后训练的 Cosmos 3 Edge 操作策略,它可以在 Jetson Thor 上运行,并在闭环仿真中进行评估。
你将学习如何:
- 对 Cosmos 3 Edge 进行后训练以预测机器人动作。
- 在 Jetson Thor 上部署所得策略。
- 在滚动时域控制循环中运行推理。
- 在闭环仿真中评估策略行为。
每个步骤都可以从开源 cosmos-framework 仓库中复现,发布的检查点可在
HuggingFace 上获取。
视频 1. 如何将 NVIDIA Cosmos 3 Edge 后训练为设备端机器人策略
为什么要为设备端机器人操作后训练 Cosmos 3 Edge?
世界基础模型在大型多模态数据集上进行了预训练,这些数据集捕捉了物体运动和物理交互的模式,例如物体如何下落、滑动以及如何响应接触。Cosmos 基于物理理解和预测能力原生生成动作。这种先验知识为机器人策略训练提供了一个有用的起点,而不需要策略从特定任务的演示中学习所有物理关系。
然而,将这些模型部署在物理机器人上会带来两个实际约束:
设备内存:模型及其运行时状态必须适合机器人上可用的内存。控制延迟:完整的推理流水线必须足够快,以支持机器人所需的控制频率。
后训练 Cosmos 3 Edge 解决了这些约束中的每一个。所得策略模型适合 Jetson Thor 的内存,因此推理直接在机器人上运行,而不是卸载到数据中心 GPU。
剩下的因素是控制延迟。DROID 动作策略直接在机器人上实时运行。在 NVIDIA Jetson AGX Thor T5000 上,它在大约 1.53 秒内生成每个动作块(以 640×540 分辨率和 15 Hz 运行),而单个块覆盖大约 2.13 秒的机器人运动。由于下一个块在当前块完成之前就已准备好,机械臂连续移动,循环中没有数据中心 GPU。该策略通过生成动作块并在每个推理周期后重新规划,支持设备端连续流式传输。它不会在每次观察后重新规划。
在闭环 RoboLab 任务中,后训练策略达到了 22.9% 的成功率。综合来看,这些结果表明,一个 4B 世界基础模型可以作为实用、实时、端侧的策略骨干网络。该模型可适配 Jetson AGX Thor,并完全在机器人上运行。
该策略在什么数据上训练?
本教程中发布的策略在 nvidia/Cosmos3-DROID 数据集上训练。该数据集包含 76k 条成功的遥操作轨迹,约 350 小时,涵盖 86 个任务和 564 个场景,使用 Franka Panda 机械臂和 Robotiq 夹爪采集。
该数据集以 LeRobotDataset v3.0 格式打包,分辨率为 640 × 360。按三个阶段进行准备:
- 过滤空闲帧和非任务帧。
- 选择成功的演示用于训练。
- 在训练期间应用随机裁剪、缩放和颜色抖动。
hf download nvidia/Cosmos3-DROID --repo-type dataset --local-dir Cosmos3-DROID
自带机器人数据
将你的数据转换为 LeRobot Dataset v3(逐帧相机视频、关节状态、夹爪状态、动作、任务指令)。
对于类似 DROID 的 Franka 设置,主要变化是数据集路径。不同的具身需要自己的实验配置,用于定义动作空间、维度、相机布局和归一化设置。
Cosmos 3 支持多种具身,包括双臂 Franka、UR、WidowX 250、LeRobot SO101。具身列表请参见 Cosmos 3 Edge 模型卡。
前提条件
开始之前,请确认你已具备:
- 最新的 Cosmos 框架发布版。 - 经过验证的训练硬件:搭载 NVIDIA GB200 Grace Blackwell 超级芯片的 NVIDIA DGX Station,或搭载 NVIDIA GB300 Grace Blackwell Ultra 桌面超级芯片的 NVIDIA DGX Station。
- 受支持的 NVIDIA CUDA 和容器版本:CUDA 13.0 (cu130)、NGC 26.06-py3。
- 访问 Cosmos 3 Edge 基础检查点的权限。 - 访问
Cosmos3-DROID 数据集的权限。 - 一个 Hugging Face 访问令牌。
这是基础模型后训练,不是单 GPU 微调。经过验证的运行使用 64 个节点、每节点 4× GB200,运行 60K 次迭代,大约 68 小时(约 17.4K GB200 小时)。请据此规划算力。
| 设置 | 值 |
|---|---|
| 初始化 | |
Cosmos3 Edge checkpoint |
use_state=true
)
表 1. 后训练配置与超参数如何运行后训练
从高层来看,后训练分为四个步骤:
- 下载数据集。
- 将基础检查点转换为分布式检查点(DCP)格式。
- 应用筛选过滤器。
- 启动
# 下载 Cosmos3-DROID 数据集(success 划分)
hf download nvidia/Cosmos3-DROID --repo-type dataset --local-dir /path/to/Cosmos3-DROID
# 将基础检查点转换为 DCP(一次性操作;在 CPU 上运行——它重新打包权重,不进行 GPU 计算)
python -m cosmos_framework.scripts.convert_model_to_dcp \ -o /path/to/Cosmos3-Edge-dcp --checkpoint-path Cosmos3-Edge
# 启动后训练
bash examples/launch_sft_action_policy_droid_nano.sh
编辑并启动后训练脚本
在仓库中找到此文件:
cosmos_framework/configs/base/experiment/action/posttrain_config/action_policy_droid_nano.py
该启动器注册了 Cosmos 3 Nano 的配方。要训练 Cosmos 3 Edge,请在启动前进行以下三处修改:
- 将
NANO_MODEL_CONFIG
导入替换为EDGE_MODEL_CONFIG
(来自configs/base/experiment/sft/models/edge_model_config.py
)。- 将
BASE_CHECKPOINT_PATH
设置为转换步骤中得到的 Cosmos 3 Edge DCP 检查点。- 将 examples/launch_sft_action_policy_droid_nano.sh 重命名为 examples/launch_sft_action_policy_droid_edge.sh
其他所有内容,包括数据集、动作空间、筛选过滤器和训练计划,均保持不变。
# 启动后训练
bash examples/launch_sft_action_policy_droid_edge.sh
有关最新的端到端说明(包括检查点转换、环境配置和策展过滤器设置),请参阅 DROID 后训练复现指南和模型卡。这些资源会随仓库一同更新。
如何在 Jetson Thor 上部署和运行该策略
该策略由 WebSocket 策略服务器提供服务,使用 OpenPI 协议,这也是整个 DROID 策略生态系统中使用的同一协议。客户端发送观测字典;服务器返回动作块。对于 Edge,服务器原生运行在 Jetson Thor 上。在 BF16 下权重大约为 9 GB,可容纳于 Thor 的板载内存中,因此策略服务器和控制客户端都运行在机器人上,无需数据中心 GPU 参与。
在机器人上启动策略服务器
export HF_TOKEN=<your_hf_token>
# Thor: run eager; stock Triton wheels lack sm_110a kernels
export TORCHDYNAMO_DISABLE=1
python -m cosmos_framework.scripts.action_policy_server_robolab \
--checkpoint_path nvidia/Cosmos3-Edge-Policy-DROID \
--port 8000 \
--format-prompt-as-json True
# first launch downloads weights and takes a few minutes; then:
curl localhost:8000/healthz # -> OK
因为服务器运行在 Thor 上,host="localhost"
,请求永远不会离开机器人。在设备上,策略实时运行。这就是 Cosmos Edge 所实现的设备端推理。
冒烟测试(无需机器人)
DROID 策略是状态条件化的。这意味着 joint_position
和 gripper_position
是真实的模型输入,而不是样板代码。在没有机械臂参与循环的情况下,零值是诚实的占位符;这个调用只是证明服务器返回了一个格式良好的动作块。
import numpy as np
from PIL import Image
from openpi_client.websocket_client_policy import WebsocketClientPolicy
client = WebsocketClientPolicy(host="localhost", port=8000)
observation = {
"prompt": "put the marker in the basket",
"observation/wrist_image_left": np.asarray(Image.open("wrist.jpg")),
"observation/exterior_image_1_left": np.asarray(Image.open("left.jpg")),
"observation/exterior_image_2_left": np.asarray(Image.open("right.jpg")),
"observation/joint_position": np.zeros(7, dtype=np.float32), # smoke test only
"observation/gripper_position": np.float32(0.0), # smoke test only
}
result = client.infer(observation)
actions = result["action"] # [32, 8]: 7 joint positions + gripper, 15 Hz
在机器人上运行
同一个调用位于重规划循环中。每个周期读取最新的相机数据以及机械臂实测的关节和夹爪位置(替换上面的零值),执行该块的前缀部分,然后重新询问:
def get_observation():
return {
"prompt": "put the marker in the basket",
"observation/wrist_image_left": read_camera("wrist"),
"observation/exterior_image_1_left": read_camera("left"),
"observation/exterior_image_2_left": read_camera("right"),
"observation/joint_position": robot.joint_positions(), # REAL, 7 floats
"observation/gripper_position": robot.gripper_position(),
}
while not task_done():
result = client.infer(get_observation())
execute_actions(result["action"][:16], hz=15) # first 16 of 32, then replan
仅执行前缀并重新规划是标准做法:策略每隔几秒自我纠正,并且由于它以状态为条件,每次重新规划都从机械臂实际所在的位置开始,而不是从上一个动作块假设它会在的位置开始。在启用视频解码的情况下启动服务器,会在返回动作的同时返回策略想象的展开过程,因此你可以检查世界模型对其发出的动作块预测了什么。
在闭环仿真中评估策略
你不需要物理机器人来验证策略。事实上,建议先在仿真中评估策略,然后再直接在物理机器人上评估,以避免意外行为在影响开发者或机器人之前发生。RoboLab——RoboLab 排行榜背后的 Isaac Lab-Arena 基准——是开放的,其客户端连接到同一个策略服务器。它在物理引擎中执行每个动作块,并将渲染的观测流式传回,从而在 120 个语言条件操作任务中实现真正的闭环。
# 克隆 RoboLab 并获取场景资源
git clone https://github.com/NVlabs/RoboLab.git && cd RoboLab
git lfs pull
# 构建仿真镜像并针对策略服务器运行一个任务
./docker/build_docker.sh latest
./docker/run_docker.sh latest
python policies/cosmos3/run.py --task BananaInBowlTask
# 或者以无头模式在多个环境中运行以获取成功率统计
python policies/cosmos3/run.py --task BananaInBowlTask --num-envs 10 --headless
将 --task 替换为 120 个任务中的任意一个,以构建更全面的策略行为图景。每次运行都会生成视口和机器人摄像头视频以及成功日志,因此你可以同时检查结果和产生该结果的轨迹。
在闭环 RoboLab 评估中,经过后训练的 Edge 策略在整个任务套件上达到 22.9% 的成功率。这一结果是在远低于更大的 Cosmos3 变体(Nano 达到 36.8%)的推理计算量下取得的,而这正是 Edge 所设计的权衡:以具有竞争力的成功率实现实时、完全在机器人上的自主性。
注意:NVIDIA Isaac Sim 5.x 需要 NVIDIA RTX Server Driver Release 580 或更高版本。在构建之前,请在 RoboLab 和 Isaac Sim 文档中确认受支持的驱动版本。
超越机器人控制的后训练
改进机器人控制的后训练技术也可扩展到其他能力,例如用于机器人训练的合成数据生成。开发者可以创建专门的世界模型,为其环境和任务生成高质量的合成数据,用于室内和室外机器人训练。
例如,Aigen 对 Cosmos 进行了后训练,以生成多样化的合成作物和杂草变体,使自主除草系统仅使用 1% 的真实世界数据进行训练即可实现强劲性能。
更广泛地说,Cosmos 的开放权重和框架,配合 OpenMDW1.1 许可证,使后训练成为一种强大、灵活且简单的方式,可为物理 AI 创建专门、高性能且准确的定制模型。
