深度⏱ ~3 min
里程碑
⭐ 为何重要

NVIDIA 的 Isaac Gym 是 GPU 并行物理仿真 RL 的奠基性基础设施:在单 GPU 上并行数千环境,把四足/灵巧手策略训练从天级压到分钟级。它是 legged_gym、Walk-These-Ways、Extreme Parkour、AMP for quadrupeds 等几乎所有 2021 后腿足/灵巧工作的共同底座,开启了机器人 RL 的『民主化』时代,是 T02(数据集与仿真基础设施)链在 2021 年的核心节点。

论文:Makoviychuk, Wawrzyniak, Guo, Lu, Storey, Macklin, Hoeller, Rudin, Allshire, Handa, State(NVIDIA). Isaac Gym: High Performance GPU-Based Physics Simulation For Robot Learning. NeurIPS 2021 Datasets and Benchmarks. arXiv:2108.10470. 🌐 · 代码 github.com/NVIDIA-Omniverse/IsaacGymEnvs(已 deprecated,继任 Isaac Lab)。

一句话直觉

把整个机器人训练流水线全搬上显卡,连数据搬运都省了。

以前训一个机器人要几天,现在几分钟。

Isaac Gym 之于机器人训练,就像显卡之于深度学习。

它把训练从天级压到分钟级。

是什么·为什么

要解决的问题:2020 年前,机器人强化学习仿真器速度卡死。📎

以前的仿真器跑在中央处理器上,单线程。

OpenAI 的 Shadow Hand 灵巧手工作用了 6144 个处理器核、8 块显卡,跑 30 小时。

OpenAI 后续更大的灵巧手工作要 3 万个处理器核。

只有大实验室才训得起。

老办法:有人尝试把物理仿真搬上显卡。

但每步物理算完,要把状态拷回处理器算观测和奖励。

再把观测拷回显卡跑神经网络

再把动作拷回处理器喂给物理。

来回搬运还是瓶颈。📎

Isaac Gym 的转身:让物理、观测、奖励、策略、动作全程不离开显卡。

关键贡献不是"把物理放显卡"——之前的工作做过。

是"整个训练循环零拷贝"。📎

物理状态留在显存里。

神经网络直接读,无拷贝开销。

Isaac Gym 之于机器人训练,就像把一万台机器关进一个大厅。

不是给每台机器一间屋子(处理器多核思路)。

而是让它们共享同一个大厅(显卡单场景)。

显卡在关节级别做并行,数千个机器人一起跑。

方法核心(大白话):把训练循环的每一步都做成显卡上的张量操作📎

第一步:物理仿真直接在显卡上算。

NVIDIA 的 PhysX 加了新功能——算完不把结果拷回处理器。

第二步:物理状态用接口包成 PyTorch 张量。

神经网络直接当输入读,没有拷贝开销。

第三步:观测和奖励的计算全部用 PyTorch 写。

用 TorchScript 编译成显卡代码。

第四步:神经网络的动作输出直接喂回物理。

还是零拷贝。

于是几千个机器人并行训练,全程不离开显卡。

用户不用写一行 CUDA 代码。

切换处理器/显卡只要改一个 flag。

关键工程贡献·并行机制反转:处理器仿真要"一个线程一个场景"靠多核 scale。

显卡仿真反过来——把所有机器人塞进同一个物理场景。

显卡的流式多处理器在 shape、body、joint 级别做细粒度并行。

高端显卡要数千到数万 object 才能吃满。

正好匹配"数千到数万并行机器人"的训练需求。

你会看到:单张显卡训 ANYmal 四足 locomotion 不到 2 分钟。

Ant 20 秒,Humanoid 4 分钟。

OpenAI Shadow Hand cube 重定向那种规模,单显卡约 1 小时搞定。

原来要 30 小时。📎

直接催生 legged_gym 等开源框架。

后续 Extreme Parkour、AMP-Adroit 都建立在它上面。

机器人训练从此民主化——一张显卡就能上手。

一句话类比:Isaac Gym 之于机器人训练,就像 ImageNet 之于视觉。

基础设施一旦齐备,整个领域就起飞。

怎么做

核心机制·端到端 GPU 训练:phys + obs/reward + policy + action 全程不离开 GPU。

📎

1. PhysX GPU simulation 不 fetch 结果到 CPU

每步 step 后结果留在 GPU buffer。

2. direct GPU API:在 GPU buffer 直接 access current state。

也能 submit state changes、apply control inputs。

由此形成 zero-copy experience collection pipeline。

传统 pipeline 有 4 处 GPU↔CPU 拷贝瓶颈全消除。

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。

PhysX GPU 并行的精确机制(Sec.2.1.2 + Sec.3):

关键设计反转。

CPU 上要"split envs into multiple scenes"(一个 thread 一个 scene)。

GPU 上相反——把所有 envs pack 进 single physics scene。

利用 GPU 流式多处理器的 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(处理非线性运动)。

contacts 不加(不需要、且会坏事)。

关键 Tensor(Tab.1):

  • Actor root state:(N_A, 13)。

pos(3)+quat(4)+lin_vel(3)+ang_vel(3),可 Get/Set。

  • DOF state:(N_D, 2)。

每个 DOF 的 position+velocity,可 Get/Set。

  • Rigid body state:(N_B, 13)。

所有 rigid body 的完整 kinematic state。

  • Jacobian / Mass matrix:支持 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 里。

Simulation Setup(Sec.2.2):

支持 URDF + MJCF 加载。

single-body actor 是 rigid dynamics

multi-body 是 reduced coordinate articulation。

大部分 joint/rigid body 属性可在仿真中实时改 → domain randomization 不停仿真。

8 个 benchmark 环境的精确配置(Tab.4):

Ant:Joint Torques,sim dt 1/120s,control dt 1/60s,8 维动作。

Humanoid:Joint Torques,sim 1/120s,control 1/60s,21 维。

ANYmal:Joint Position Targets,sim 1/200s,control 1/50s,12 维。

Shadow Hand:Joint Position Targets,sim 1/120s。

control 1/60s 或 1/20s,20 维。

Franka Cube Stacking:Op Space Control。

sim 1/60s,control 1/60s,7 维。

其他还有 Ingenuity、Allegro Hand、TriFinger 等。

📎

通用训练配置:单 A100 + i7-8700K;5 seeds。

symmetric actor-critic(policy/value 共享网络)。

Shadow Hand / TriFinger 用 asymmetric actor-critic(value 看特权)。

feed-forward 用 γ=0.99,LSTM 用 γ=0.998。

GAE λ=0.95,clip ε=0.2。

adaptive LR + 每 env 的 KL threshold。

算法用 rl_games 的 GPU 端到端 PPO

结果·精确训练时间(Sec.1):

Ant locomotion:20 秒。

Humanoid locomotion:4 分钟。

ANYmal locomotion:不到 2 分钟。

Humanoid Character Animation(AMP):6 分钟。

Shadow Hand cube rotation:35 分钟。

与 OpenAI 直接对比(Shadow Hand cube):

OpenAI 用 384 CPU × 16 cores + 8 V100 + MuJoCo

20 连续成功(feed-forward)。

OpenAI 30 小时 vs Isaac Gym 约 1 小时。

37 连续成功(LSTM)。

OpenAI 17 小时 vs Isaac Gym 约 6 小时(best seed 2.5 小时)。

2–3 个数量级加速。📎

Simulation throughput(Sec.5):随 env 数增加 FPS 单调上升。

到一定 env 数后 plateau(取决于 GPU 显存 + 网络 forward 时间)。

Ant/Humanoid/Shadow Hand 都在数千 env 区间吃到峰值 FPS。

每秒 10 万–100 万+ physics steps。

常见误区(先抛一个,完整版见末尾):"Isaac Gym 是把物理搬到 GPU 而已吧?"

不是。把物理搬 GPU 之前工作做过。

Isaac Gym 的本质贡献是"全程零拷贝"。

physics + obs/reward + policy + action 都不离开 GPU。

4 个传统 GPU↔CPU 瓶颈全消除。📎

深度

Pipeline 对比图(Fig.3)

传统 RL pipeline(Fig.3a)有 4 个 GPU↔CPU 瓶颈:

  1. physics step(GPU)→ copy state GPU→CPU。
  2. CPU 算 obs/reward。
  3. copy obs/reward CPU→GPU。
  4. policy forward(GPU)→ copy action GPU→CPU → copy action CPU→GPU。

Isaac Gym pipeline(Fig.3b):

physics step(GPU)→(不 copy,留 GPU)→ GPU 算 obs/reward(PyTorch tensor)→ policy forward(GPU)→ action 直接喂回 physics(GPU)。

全程零 CPU bottleneck。

Control Tensor(Tab.2):DOF actuation forces / DOF position targets / DOF velocity targets / rigid body forces / rigid body torques。

覆盖 force/torque/PD 三类控制。

TGS solver 的精确推导

TGS = Temporal Gauss-Seidel。

sub-stepping 思想:把一个大 timestep dt 分成 N 个小 step dt/N,每步做约束投影。

传统 sub-stepping 计算贵:每步都要完整的 constraint solve。

TGS 把 sub-stepping 折叠进单次迭代:

  • 每 iter 算 end-of-iter velocity。
  • accumulate 到 per-body delta buffer,按 dt/N 缩放。
  • delta buffer 投影到 constraint Jacobian 加进 bias。
  • 多 iter 累加 = 等效于 sub-stepping。

仅比传统 GS 多几步 ops,但达到 sub-stepping 的收敛效果。

Positional joint constraints 的 rotational term

关节约束默认只约束位置。

对非线性运动(如肘部弯曲),位置约束不够。

Isaac Gym 加额外 rotational term 处理非线性。

contacts 不加——不需要(接触已通过别的方式处理),加了反而坏事。

Symmetric vs Asymmetric actor-critic

symmetric:policy 和 value 共享网络(同一 backbone)。

asymmetric:value 看特权信息(如真值摩擦地形高度),policy 不看。

部署时 value 不用——只在训练时帮 policy 学得更好。

Shadow Hand / TriFinger 用 asymmetric(因为 contact-rich,特权信息重要)。

Ant / Humanoid / ANYmal 用 symmetric。

8 个 benchmark 的细节差异

  • Ant / Humanoid:经典 locomotion,joint torques 直接控。
  • ANYmal:四足,joint position targets(PD 控制器底)。
  • Shadow Hand:灵巧手 cube rotation,contact-rich。
  • Franka Cube Stacking:op space control(operational space 控制器)。
  • Ingenuity:火星直升机(rigid body forces,模拟旋翼升力)。
  • Allegro Hand:16 维灵巧手。
  • TriFinger:9 维三指,joint torques。

Limitations

  1. 已被 Isaac Lab 取代——Isaac Gym 已 deprecated。
  2. 接触动力学精度不如 MuJoCo——灵巧操作类任务有时不够。
  3. 依赖 NVIDIA GPU——CUDA 锁定。
  4. 渲染开销大——比 MuJoCo 重得多。
  5. GPU memory cap——env 数受显存限制。

研究者视角

图谱定位:Isaac Gym 是 T02 数据集基础设施演化转折 5 的代表,也是 T01 Sim-to-Real 的工程基础。📎

它是机器人 RL 训练民主化的转折点——把训练从 CPU 数据中心降到单 GPU 桌面。

继承 / 催生

  • 建立在: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 工作。
  • 范式扩散:"GPU 仿真 + GPU 推理 + 大量并行环境 + zero-copy Tensor API"成为现代机器人 RL 的基础设施模板。

后续 Isaac Lab、Genesis、MuJoCo MJX 都继承这个范式。

后续演进

  • 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),多物理统一。

副产品:Isaac Gym 的工程贡献(zero-copy pipeline、TGS GPU solver、Tensor API)被后续所有 GPU 物理仿真器继承。

它解决的"GPU 物理的两个关键问题"——(a) physics step 不 fetch CPU + (b) direct GPU API for state/control——是后续所有 GPU 物理的原型。

Open problems

  1. 接触动力学精度:PhysX 在精细接触上不如 MuJoCo 准。[未确认]

灵巧操作类任务(如 Shadow Hand 重定位)有时需要切回 MuJoCo。

MuJoCo MJX 把 MuJoCo 搬上 JAX/GPU 是另一条路。

  1. GPU memory cap:env 数受显存限制;高 DoF 机器人(如人形+灵巧手)并行数比简单 Ant 少。[未确认]
  2. deprecated 阵痛:大量老 repo(legged_gym、unitree_rl_gym)仍依赖 Isaac Gym Preview,新项目要切 Isaac Lab。[未确认]

常见误区

"Isaac Gym 只是把物理搬到 GPU" —— 错。

把物理搬 GPU 的工作之前就有。

Isaac Gym 的本质贡献是"physics + obs/reward + policy + action 全程零拷贝"。

4 个传统 GPU↔CPU 瓶颈全消除。

zero-copy pipeline 才是关键,物理并行只是必要条件。📎

"Isaac Gym 是 NVIDIA 自家 RL 算法库" —— 错。

Isaac Gym 是仿真器;RL 算法用 rl_games 的 GPU 端到端 PPO(第三方)。

Isaac Gym 把仿真做快,算法层用现成 PPO,分工清晰。

"Isaac Gym = Isaac Sim = Isaac Lab" —— 错。

Isaac Gym(2021,本篇,已 deprecated)是 Preview 版 GPU 仿真器。

Isaac Sim(2022+,基于 Omniverse)是更完整的仿真平台。

Isaac Lab(基于 Isaac Sim)是官方继任,继承 Isaac Gym 的 Tensor API + GPU pipeline。

新项目用 Isaac Lab,但 legged_gym 等老 repo 仍依赖 Isaac Gym Preview。

"GPU 并行 = 一个 env 一个线程" —— 错。

CPU 上是这样(split envs into multiple scenes)。

GPU 上反过来——所有 envs pack 进 single physics scene。

GPU 在 shape / body / joint 级别做细粒度并行(不是 env 级别)。

GPU 的并行粒度比 CPU 细得多,这是它能 scale 到数千 env 的原因。

"Isaac Gym 接触精度和 MuJoCo 一样" —— 错。

PhysX 在精细接触上不如 MuJoCo 准。

灵巧操作类任务(Shadow Hand 重定位)有时不够。

速度换精度的 trade-off;要精度切 MuJoCo/MJX,要并行规模用 Isaac。

检查点

Q1

Isaac Gym 之前的 GPU 物理仿真工作,瓶颈不在物理本身。在哪?Isaac Gym 怎么消除这个瓶颈?

💡 参考答案

  • 瓶颈在数据搬运:之前的工作每步物理算完要把状态拷回处理器算观测和奖励,再把观测拷回显卡跑神经网络,再把动作拷回处理器喂给物理——来回搬运是瓶颈。
  • Isaac Gym 消除方式:让物理、观测、奖励、策略、动作全程不离开显卡(zero-copy pipeline)。
  • 关键贡献不是'把物理放显卡'(之前工作做过),是'整个训练循环零拷贝'——把 4 处传统 GPU↔CPU 拷贝瓶颈全消除。
Q2

CPU 仿真器要把"多个 env 分到多个 scene"靠多核 scale。GPU 仿真器为什么反过来,把所有 envs 塞进同一个 physics scene?

💡 参考答案

  • GPU 的并行粒度比 CPU 细得多——在 shape / body / joint 级别做并行,不是 env 级别。
  • GPU 的流式多处理器需要数千到数万 object 才能吃满;正好匹配'数千到数万并行 env'的 RL 需求。
  • CPU 多核靠'一个 thread 一个 scene'scale,GPU 反过来用 single scene 吃 deep fine-grained parallelism。
Q3

用"一万台机器关进一个大厅"或你自己举的类比,向一个没学过机器人的朋友解释 Isaac Gym 是怎么让训练快几个数量级的。

💡 参考答案

  • 类比核心:把训练循环每一步都做成显卡上的张量操作,数据全程不离开显卡(零拷贝)。
  • 并行规模:数千个机器人并行训练,显卡在关节级别做细粒度并行。
  • 速度来源:来自架构(zero-copy + 大规模并行),不是来自改算法(还是 PPO)。
Q4

OpenAI Shadow Hand cube 重定向用 6144 个 CPU 核 + 8 块 V100 GPU,跑了 30 小时。Isaac Gym 用什么配置做到同样规模的事,时间多少?

💡 参考答案

  • Isaac Gym 用单张 A100 显卡 + 一颗 i7 处理器(桌面级)。
  • 同样规模(Shadow Hand cube 20 连续成功)约 1 小时搞定(vs OpenAI 30 小时);37 连续成功约 6 小时(vs 17 小时)。
  • 量级:2–3 个数量级加速——把训练从'CPU 数据中心'降到'桌面单 GPU',机器人 RL 训练民主化。
Q5

Isaac Gym 已被 Isaac Lab 取代(deprecated)。那为什么 legged_gym 等老 repo 还要依赖 Isaac Gym Preview?

💡 参考答案

  • 因为 legged_gym、unitree_rl_gym 等社区事实标准框架是当年基于 Isaac Gym Preview 写的,依赖它的 API。
  • Isaac Lab 虽是官方继任(继承 Tensor API + GPU pipeline),但 API 不完全兼容老代码,迁移要改写。
  • 结论:新项目用 Isaac Lab;但要跑老 repo(legged_gym 等)仍需 Isaac Gym Preview——这是 deprecated 工具的典型阵痛。

FAQ

Q1:新项目该用 Isaac Gym 吗?

不该。Isaac Gym 已 deprecated,NVIDIA 官方推荐用 Isaac Lab(基于 Isaac Sim)。🌐Isaac Lab 继承了 Isaac Gym 的 Tensor API + GPU pipeline,更完整且持续维护。

Q2:Isaac Gym 接触精度和 MuJoCo 比怎么样?

PhysX 在精细接触上不如 MuJoCo 准。灵巧操作类任务(Shadow Hand 重定位)有时不够。📎要精度切 MuJoCo/MJX,要并行规模用 Isaac。

Q3:为什么 GPU 仿真把所有 envs 塞进 single scene?

因为 GPU 的并行粒度比 CPU 细——在 shape / body / joint 级别并行,不是 env 级别。📎CPU 多核靠"一个 thread 一个 scene"scale,GPU 反过来用 single scene 吃 deep fine-grained parallelism。

Q4:要写 CUDA kernel 才能用 Isaac Gym 吗?

不用。Tensor API 把 physics buffer 直接 wrap 成 PyTorch tensor,无 copy overhead。📎所有 obs/reward/action 计算用 PyTorch 写,TorchScript JIT 编译成 GPU kernel。一行 flag 切 CPU/GPU。

Q5:Isaac Gym 训 ANYmal 真的只要 2 分钟?

对。Sec.1 Summary of Results:单 A100 + i7-8700K,ANYmal locomotion < 2 分钟。📎Ant 20 秒、Humanoid 4 分钟、Shadow Hand cube 35 分钟。这是 2–3 个数量级的加速——以前要 CPU cluster 的活,现在桌面 GPU 就行。