Q1:新项目该用 Isaac Gym 吗?
不该。Isaac Gym 已 deprecated,NVIDIA 官方推荐用 Isaac Lab(基于 Isaac Sim)。🌐Isaac Lab 继承了 Isaac Gym 的 Tensor API + GPU pipeline,更完整且持续维护。
论文: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):
pos(3)+quat(4)+lin_vel(3)+ang_vel(3),可 Get/Set。
每个 DOF 的 position+velocity,可 Get/Set。
所有 rigid body 的完整 kinematic state。
关键 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 瓶颈:
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 折叠进单次迭代:
仅比传统 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 的细节差异:
Limitations:
图谱定位:Isaac Gym 是 T02 数据集基础设施演化转折 5 的代表,也是 T01 Sim-to-Real 的工程基础。📎
它是机器人 RL 训练民主化的转折点——把训练从 CPU 数据中心降到单 GPU 桌面。
继承 / 催生:
后续 Isaac Lab、Genesis、MuJoCo MJX 都继承这个范式。
后续演进:
副产品: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:
灵巧操作类任务(如 Shadow Hand 重定位)有时需要切回 MuJoCo。
MuJoCo MJX 把 MuJoCo 搬上 JAX/GPU 是另一条路。
"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。
Isaac Gym 之前的 GPU 物理仿真工作,瓶颈不在物理本身。在哪?Isaac Gym 怎么消除这个瓶颈?
💡 参考答案
CPU 仿真器要把"多个 env 分到多个 scene"靠多核 scale。GPU 仿真器为什么反过来,把所有 envs 塞进同一个 physics scene?
💡 参考答案
用"一万台机器关进一个大厅"或你自己举的类比,向一个没学过机器人的朋友解释 Isaac Gym 是怎么让训练快几个数量级的。
💡 参考答案
OpenAI Shadow Hand cube 重定向用 6144 个 CPU 核 + 8 块 V100 GPU,跑了 30 小时。Isaac Gym 用什么配置做到同样规模的事,时间多少?
💡 参考答案
Isaac Gym 已被 Isaac Lab 取代(deprecated)。那为什么 legged_gym 等老 repo 还要依赖 Isaac Gym Preview?
💡 参考答案
不该。Isaac Gym 已 deprecated,NVIDIA 官方推荐用 Isaac Lab(基于 Isaac Sim)。🌐Isaac Lab 继承了 Isaac Gym 的 Tensor API + GPU pipeline,更完整且持续维护。
PhysX 在精细接触上不如 MuJoCo 准。灵巧操作类任务(Shadow Hand 重定位)有时不够。📎要精度切 MuJoCo/MJX,要并行规模用 Isaac。
因为 GPU 的并行粒度比 CPU 细——在 shape / body / joint 级别并行,不是 env 级别。📎CPU 多核靠"一个 thread 一个 scene"scale,GPU 反过来用 single scene 吃 deep fine-grained parallelism。
不用。Tensor API 把 physics buffer 直接 wrap 成 PyTorch tensor,无 copy overhead。📎所有 obs/reward/action 计算用 PyTorch 写,TorchScript JIT 编译成 GPU kernel。一行 flag 切 CPU/GPU。
对。Sec.1 Summary of Results:单 A100 + i7-8700K,ANYmal locomotion < 2 分钟。📎Ant 20 秒、Humanoid 4 分钟、Shadow Hand cube 35 分钟。这是 2–3 个数量级的加速——以前要 CPU cluster 的活,现在桌面 GPU 就行。