Isaac Gym: High Performance GPU-Based Physics Simulation For Robot Learning
作者 / 机构:Viktor Makoviychuk, Lukasz Wawrzyniak, Yunrong Guo, Michelle Lu, Kier Storey, Miles Macklin, David Hoeller, Nikita Rudin, Arthur Allshire, Ankur Handa, Gavriel State(NVIDIA)
发表:NeurIPS 2021 Datasets and Benchmarks
arxiv:2108.10470 · 代码:github.com/NVIDIA-Omniverse/IsaacGymEnvs · 项目页:developer.nvidia.com/isaac-gym
在线索中的位置:属于 T02「数据集基础设施演化」转折 5 + T01「Sim-to-Real」的工程基础
一句话定位:NVIDIA 的 GPU 并行物理仿真器——让 RL 训练从天级压到分钟级(2–3 个数量级加速),是 legged_gym/Walk-These-Ways/Extreme Parkour/AMP-Adroit 等所有现代 locomotion 工作的基础设施。机器人 RL 训练民主化的转折点。
动机
2020 年前,机器人 RL 训练有个巨大瓶颈:仿真器太慢。MuJoCo、PyBullet 都是 CPU 仿真,单线程。OpenAI 的灵巧手工作把这种瓶颈推到极致:Learning Dexterity(2018)用 6144 CPU cores + 8 V100 GPU 跑 30 小时才收敛;后续 Solving Rubik's Cube with a Robot Hand(2019)规模更大,达 30,000 CPU cores(920 worker × 32 core)。
NVIDIA 的问题:能不能用 GPU 把物理仿真大规模并行,像训练 LLM 那样一次跑几千个环境?现有 GPU 物理工作(如 PhysX 在 RL 中的早期尝试 [12])只把 simulation 搬上 GPU,但 physics state 仍每步 copy 回 CPU 算 obs/reward 再 copy 回 GPU——这种 GPU↔CPU 反复搬运依然是瓶颈。
方法核心
1. 端到端 GPU 训练(核心架构,Sec.2.1.2 + Fig.3)
Isaac Gym 的本质贡献不是「把 physics 放 GPU」(之前工作做过),而是「physics + obs/reward + policy + action 全程不离开 GPU」。为此给 PhysX 加了两个新 feature:
- PhysX GPU simulation 可不 fetch 结果到 CPU:每步 step 后结果留在 GPU buffer。
- 新增 direct GPU API:在 GPU buffer 直接 access current state / submit state changes / apply control inputs。
由此形成 zero-copy experience collection pipeline(Fig.3b 对比 Fig.3a 传统 CPU 流水线):
传统 RL pipeline(Fig.3a): Isaac Gym pipeline(Fig.3b):
physics step (GPU) physics step (GPU)
→ copy state GPU→CPU ← 瓶颈 1 →(不 copy,留在 GPU)
→ CPU 算 obs/reward ← 瓶颈 2 → GPU 算 obs/reward(PyTorch tensor)
→ copy obs/reward CPU→GPU ← 瓶颈 3 → policy forward(GPU)
→ policy forward (GPU) → action 直接喂回 physics(GPU)
→ copy action GPU→CPU ← 瓶颈 4 全程零 CPU bottleneck
→ copy action CPU→GPU
Tensor API(Sec.2.3)是这套的接口层:把 physics buffer 直接 wrap 成 PyTorch tensor,无 copy overhead(靠 CUDA interoperability)。所有 obs/reward/action 计算在 PyTorch 里用 TorchScript JIT 编译,跑在 GPU 上。一行 flag 切 CPU/GPU,用户无需写任何 CUDA kernel。
2. PhysX GPU 并行的精确机制(Sec.2.1.2 + Sec.3)
关键设计反转:CPU 上要「split envs into multiple scenes」(一个 thread 一个 scene,靠多核 scale);GPU 上相反——把所有 envs pack 进 single physics scene,利用 GPU streaming multiprocessor 的 deep fine-grained parallelism。GPU 在 shape / body / joint 级别做并行(不是 env 级别),high-end GPU 需要数千–数万 object 才能吃满,正好匹配「数千–数万并行 env」的 RL 需求。
Solver:Temporal Gauss-Seidel (TGS)(Sec.3,PhysX 关键):
- 观察:sub-step + 1 次 Gauss-Seidel 迭代,比大 step + 多次迭代收敛快得多。
- TGS 把 sub-stepping 折叠进迭代过程:每 iter 算 end-of-iter velocity,accumulate 到 per-body delta buffer(按 $dt/N$ 缩放,$N$ = 迭代数);delta buffer 投影到 constraint Jacobian 加进 bias。
- 仅比传统 GS 多几步 ops,但达到 sub-stepping 的收敛效果而无需其计算开销。
- 对 positional joint constraints 加额外 rotational term(处理非线性运动、避免 linearization artifacts),contacts 不加(不需要、且会坏事)。
Tensor 一览(Tab.1,关键 4 类):
| Tensor | Shape | 用途 |
|---|---|---|
| Actor root state | $(N_A, 13)$ | pos(3)+quat(4)+lin_vel(3)+ang_vel(3),可 Get/Set(reset 用) |
| DOF state | $(N_D, 2)$ | 每个 DOF 的 position+velocity,可 Get/Set |
| Rigid body state | $(N_B, 13)$ | 所有 rigid body 的完整 kinematic state,Get |
| Jacobian / Mass matrix | variable | 支持 operational space control / IK |
| Net contact forces | $(N_B, 3)$ | 关键 reward/contact-rich 任务信号 |
$N_A$=actor 总数、$N_B$=rigid body 总数、$N_D$=DOF 总数。所有 env 的所有 body 平铺在一个大 tensor 里,env index 作一维 → 天然 GPU 向量化。
Control Tensor(Tab.2):DOF actuation forces / DOF position targets / DOF velocity targets / rigid body forces / rigid body torques,覆盖 force/torque/PD 三类控制。
3. Simulation Setup(Sec.2.2 + Tab.4)
- 支持 URDF + MJCF 加载;single-body actor = rigid dynamics、multi-body = reduced coordinate articulation。
- 大部分 joint/rigid body 属性可在仿真中实时改 → domain randomization 不停仿真。
8 个 benchmark 环境的精确 sim/control 配置(Tab.4):
| Env | Control Type | Sim dt | Control dt | Action Dims |
|---|---|---|---|---|
| Ant | Joint Torques | 1/120s | 1/60s | 8 |
| Humanoid | Joint Torques | 1/120s | 1/60s | 21 |
| Ingenuity | Rigid Body Forces | 1/200s | 1/100s | 6 |
| ANYmal | Joint Position Targets | 1/200s | 1/50s | 12 |
| Franka Cube Stacking | Op Space Control | 1/60s | 1/60s | 7 |
| Shadow Hand (Std/OpenAI) | Joint Position Targets | 1/120s | 1/60s 或 1/20s | 20 |
| Allegro Hand | Joint Position Targets | 1/120s | 1/20s | 16 |
| TriFinger | Joint Torques | 1/200s | 1/50s | 9 |
通用训练配置:单 A100 + i7-8700K;5 seeds;symmetric actor-critic(policy/value 共享网络);Shadow Hand / TriFinger 用 asymmetric actor-critic(value 看特权);feed-forward 用 $\gamma=0.99$,LSTM 用 $\gamma=0.998$;GAE $\lambda=0.95$,clip $\epsilon=0.2$;adaptive LR + 每 env 的 KL threshold。算法用 rl_games 的 GPU 端到端 PPO。
4. 结果:精确训练时间数字(Sec.1 "Summary of Results")
| 任务 | 训练时间(单 A100) | 备注 |
|---|---|---|
| Ant locomotion | 20 秒 | |
| Humanoid locomotion | 4 分钟 | |
| ANYmal locomotion | < 2 分钟 | |
| Humanoid Character Animation(AMP) | 6 分钟 | |
| Shadow Hand cube rotation | 35 分钟 |
与 OpenAI([5])的直接对比(关键数字)——Shadow Hand cube(OpenAI 用 384 CPU×16 cores + 8 V100 + MuJoCo):
| 指标 | OpenAI(CPU cluster) | Isaac Gym(单 A100) |
|---|---|---|
| 20 连续成功(feed-forward, tol 0.4 rad) | 30 小时 | ~1 小时 |
| 37 连续成功(LSTM, tol 0.4 rad) | 17 小时 | ~6 小时(best seed 2.5 小时) |
→ 2–3 个数量级加速,从「CPU datacenter」降到「单 GPU 桌面」。还做了 ANYmal + TriFinger 的 sim-to-real 验证。
5. Simulation throughput(Sec.5,FPS 曲线)
随 env 数增加 FPS 单调上升,到一定 env 数后 plateau(取决于 GPU 显存 + 网络 forward 时间)。Ant/Humanoid/Shadow Hand 都在数千 env 区间吃到峰值 FPS(Ant 约 700K env steps/s、Humanoid 约 200K、Shadow Hand 约 150K,均 @4096–16384 envs)。env 数 × horizon 反比调节(保总 experience 不变)做公平比较。
为什么重要
1. 训练民主化(最关键)
之前只有 ETH/CMU 这种大实验室能训 locomotion(要有 CPU 集群)。Isaac Gym 之后,任何人一张 GPU 就能训。直接催生了 legged_gym(ETH 的开源 locomotion 训练框架),成为社区事实标准。
2. 开启 RL locomotion 爆发
Walk-These-Ways、Extreme Parkour、DreamWaQ、DrEureka、AMP-Adroit 全部建立在 Isaac Gym 上。没有 Isaac Gym,就没有这波 locomotion 工作。
3. 为大规模并行 RL 提供 template
Isaac Gym 的「GPU 仿真 + GPU 推理 + 大量并行环境 + zero-copy Tensor API」范式,被后续 Isaac Lab、Genesis、MuJoCo MJX 继承。是现代机器人 RL 的基础设施模板。
4. 工程上解决了 GPU 物理的两个关键问题
(a)「physics step 不 fetch CPU」+(b)「direct GPU API for state/control」这两条 PhysX 改动,是后续所有 GPU 物理仿真器(含 Isaac Lab 的 GPU pipeline)的原型。
局限
- 已被 Isaac Lab 取代:Isaac Gym 已 deprecated,NVIDIA 推荐用 Isaac Lab(基于 Isaac Sim)。
- 接触动力学精度不如 MuJoCo:PhysX 在精细接触上不如 MuJoCo 准,灵巧操作类任务有时不够。
- 依赖 NVIDIA GPU:CUDA 锁定,AMD/Intel GPU 用不了。
- 渲染开销大:渲染比 MuJoCo 重得多(虽然能开光追)。
- GPU memory cap:env 数受显存限制(每个 env 的 rigid body state 都进 tensor);高 DoF 机器人(如人形 + 灵巧手)并行数会比简单 Ant 少。
后续演进
| 仿真器 | 关系 | 特点 |
|---|---|---|
| Isaac Gym(2021) | 本篇 | GPU 并行,deprecated |
| Isaac Sim/Lab(2022+) | 官方继任 | 基于 Omniverse,更完整但更重;继承 Isaac Gym 的 Tensor API + GPU pipeline |
| MuJoCo MJX(2024) | 竞争 | MuJoCo 的 JAX 后端,GPU 并行,精度更高 |
| Genesis(2024) | 新生 | 纯 Python,最快(43M FPS claim),多物理统一 |
复现要点
- 复现门槛:⭐⭐(运行)/ ⭐⭐⭐(开发)
- IsaacGymEnvs 仓库有大量预置任务(Ant/Humanoid/Cartpole/ShadowHand/Franka 等)。
- 新项目应直接用 Isaac Lab(NVIDIA 官方继任);但很多老 repo(legged_gym、unitree_rl_gym)仍依赖 Isaac Gym。
- 如果要跑老 repo,需要 Isaac Gym Preview(不是 Isaac Sim),从 NVIDIA 网站下载。
- 关键超参(PPO,Tab.17):$\gamma=0.99$、$\lambda=0.95$、clip 0.2、adaptive LR + per-env KL threshold。
相关
- 建立在:PhysX SDK(含新增的 GPU no-fetch + direct GPU API)、CUDA、TGS solver、PPO(1707.06347)、rl_games。
- 引出:legged_gym(ETH,开源 locomotion 框架)、Isaac Lab(官方继任,继承 Tensor API + GPU pipeline)、Walk-These-Ways、Extreme Parkour、AMP-Adroit 等几乎所有 2021+ 的 locomotion 工作。
- 本仓库线索:T02 数据集基础设施 转折 5、T01 sim2real 工程基础
- 本仓库概念:C-sim2real-methods.md(仿真器选型)
- 本仓库笔记:P-PHCUHC-2023.md、P-AMP-2021.md、P-ExtremeParkour-2023.md(都建立在 Isaac Gym 上)