返回 文章 build CMS 文章

NVIDIA Cosmos 3 Edge 后训练:在 Jetson Thor 上实现设备端机器人控制

用 4B 世界基础模型 Cosmos 3 Edge 后训练出可在机器人端实时运行的操作策略。

NVIDIA Cosmos机器人策略Jetson Thor世界模型
成长分 / 100 76 综合收获、行动、留存与影响

NVIDIA Cosmos 3 Edge 后训练:在 Jetson Thor 上实现设备端机器人控制
为什么值得读了解如何将大型世界模型压缩并后训练为适合设备端部署的机器人策略。

获取从数据准备、后训练到 Jetson Thor 部署与闭环评估的完整可复现流程。

关键洞察
  1. Cosmos 3 Edge 是 4B 全模态模型(含 2B Nemotron 推理器),与 Cosmos 3 Nano/Super 共享物理世界预训练数据,可适配 Jetson Thor 内存。
  2. 后训练策略在 Jetson AGX Thor T5000 上以 640×540 分辨率、15 Hz 运行,约 1.53 秒生成一个覆盖约 2.13 秒运动的动作块,实现连续流式控制。
  3. 训练数据为 nvidia/Cosmos3-DROID 数据集,包含 76k 条成功遥操作轨迹、约 350 小时、86 个任务、564 个场景,使用 Franka Panda 机械臂和 Robotiq 夹爪。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:13560

机器人需要能够在板载计算硬件上运行、同时适应其传感器、环境和任务的策略。世界模型为学习物理交互提供了基础,但其规模可能使设备端部署变得困难。随着全新的 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 创建专门、高性能且准确的定制模型。