据 Hugging Face 博客 2026 年 9 月 23 日发布的文章,NVIDIA Warp 与 MuJoCo Warp(MJWarp)被用于加速机器人仿真,并把 SO-101 follower arm 从常规 MuJoCo 工作流迁移到最多 2048 个并行 MJWarp 环境。该文属于“State of Simulation for Physical AI”系列第二篇,重点在准备和扩展仿真环境,不涉及策略训练。
文章说,MJWarp 基于 NVIDIA Warp,把兼容 MuJoCo 的模型带入 GPU 规模。MuJoCo 负责加载和编译 MJCF 模型,MJWarp 在 NVIDIA Warp 中实现物理,Warp 则编译 CUDA kernel,在 NVIDIA GPU 上推进仿真状态。该系列第一篇文章梳理了机器人仿真格局,后续 Newton 和 Isaac Lab 篇章将覆盖下一集成层。
文章把技术栈分为几层:NVIDIA Warp 是 Python kernel 语言,支持单指令多线程、自动微分以及 PyTorch/JAX 互操作;MJWarp 在 Warp 上运行 MuJoCo 物理,沿用相同 MJCF,提供批量 GPU 吞吐;SO-101 场景使用 Menagerie 或 Robot Studio 资产及任务几何;Newton 和 Isaac Lab 将引入多求解器 API、USD、传感器、管理器和训练循环。对于不同需求,文章给出的路径是:单机器人 MPC 或遥操作使用 MuJoCo CPU;需要原始 MuJoCo 物理最大吞吐时使用 MJWarp 或 mjlab;需要 JAX 训练配方时使用 MuJoCo Playground 或 MJX 的 warp 实现;需要多求解器与 Isaac Lab 集成时,则指向后续的 Newton。
文章介绍,NVIDIA Warp 是用于编写高性能、GPU 加速 kernel 的 Python 框架。开发者可以用 Python 编写静态类型 kernel,并编译为 CPU 或 CUDA 执行。首次启动会构建并缓存原生模块,之后启动复用该模块。kernel 语言是面向性能的 Python 子集,普通 Python 仍负责配置、分配和启动编排。文章用一个机器人导向的小型 kernel 说明,一个逻辑线程处理一个点,因此同一份代码可以从两个点扩展到数百万个点,而不必把 GPU 术语引入控制流。
文章列出 Warp 的三个价值。性能方面,它通过 JIT 编译、kernel 融合和 CUDA Graphs 获得原生 CUDA 速度;易用性方面,它支持纯 Python 编写,并内置向量、矩阵、四元数、BVH、哈希网格、稀疏矩阵和 tile 原语;能力方面,它提供可微 kernel 和 DLPack 风格互操作,使仿真可以嵌入机器学习训练循环。
文章还提示若干实现细节。wp.tid() 用于标识当前逻辑线程拥有的点、接触、身体或世界;数组位于选定设备上,对 CUDA 数组调用 .numpy() 会同步并复制到 CPU 内存,并非零拷贝;对于设备常驻的 PyTorch 或 JAX 流程,应使用 Warp 的框架适配器或 DLPack 兼容共享。程序可以启动一系列专注的 kernel,并把受支持的 CUDA 工作捕获到 graph 中,以减少重复调度开销;graph capture 会针对现有缓冲区重放启动,但不会融合任意 kernel。
文章指出,Warp kernel 可微。wp.Tape 会记录其上下文内进行的前向 kernel 启动,并在调用 backward() 时逆序重放伴随,这也是团队在 Warp 中构建可微几何、计算流体力学和自定义物理,包括 CAE 仿真和设计优化工作流的原因。Warp 1.15 还引入确定性执行:GPU 原子操作默认依赖调度器,重复启动同一 kernel 可能略有差异,可选的确定性模式会用部分性能换取仿真、验证和回归测试中的可复现顺序。文章提醒,这些是 Warp 的能力,并不保证整个 MJWarp rollout 可微或确定。
文章建议尝试 Warp:安装 warp-lang,若需要 GPU 确定性应使用 1.15 及以上版本,然后运行示例浏览器或教程 notebook。