如何使用 NVIDIA Warp 和 MjWarp 加速机器人仿真与学习工作流

2026-09-28 · Hugging Face

加速机器人仿真的新途径:NVIDIA Warp 与 MJWarp

随着机器人学习工作负载的增长,仿真技术的核心问题已从“单个世界运行多快”转变为“能同时运行多少个世界”。GPU 加速使得在大型批次中推进这些世界成为可能,同时保持仿真和学习数据与设备的紧密联系。本文是“物理 AI 仿真状态”系列的第二篇,重点介绍如何准备和扩展仿真环境。

技术栈与决策指南

  • NVIDIA Warp:一种 Python 内核语言,支持单指令多线程(SIMT)、自动微分以及与 PyTorch/JAX 的互操作。
  • MJWarp:在 Warp 上运行 MuJoCo 物理,保持相同的 MJCF 格式,并提供批处理 GPU 吞吐量。
  • 场景(如 SO-101):使用熟悉的 Menagerie 或 Robot Studio 资产及任务几何。
  • 后续集成(Newton / Isaac Lab):提供多求解器 API、USD、传感器、管理器和训练循环。

根据需求,开发者可以选择不同的工具:单机器人 MPC 或遥操作可使用 MuJoCo CPU;追求原始 MuJoCo 物理最大吞吐量可使用 MJWarp;需要 JAX 训练配方可使用 MuJoCo Playground/MJX;需要多求解器与 Isaac Lab 集成则可期待 Newton。

NVIDIA Warp 的核心优势

NVIDIA Warp 是一个用于编写高性能 GPU 加速内核的 Python 框架。开发者可以用 Python 编写静态类型内核,并编译为 CPU 或 CUDA 执行。首次启动会构建并缓存原生模块,后续启动则直接复用。其三大价值主张包括:

1. 高性能:通过 JIT 编译、内核融合和 CUDA Graphs 实现原生 CUDA 速度。

2. 易用性:纯 Python 编写,内置向量、矩阵、四元数、BVH、哈希网格、稀疏矩阵和 tile 原语。

3. 功能性:支持可微分内核和 DLPack 风格的互操作,使仿真能够融入机器学习训练循环。

在机器人应用中,Warp 具有三个关键特性:显式并行工作(通过 `wp.tid()` 识别当前线程拥有的对象)、显式设备数组(数组存在于选定设备上)以及可组合的内核启动(可捕获 CUDA 工作到图中以减少调度开销)。此外,Warp 内核是可微分的,并从 1.15 版本开始支持确定性执行模式,以在仿真和验证中换取可重现的顺序。

什么是 MuJoCo Warp (MJWarp)?

机器人仿真器通过计算当前关节位置、速度、控制和接触来推进场景。在本文中,“世界”指的是场景及其状态的一个独立副本。MJWarp 将兼容的 MuJoCo 模型带入 GPU 规模,允许开发者将熟悉的 MuJoCo 工作流扩展到数千个并行环境,从而极大提升机器人学习和测试的效率。

原文链接