一句话定位
NVIDIA 把 PhysX 物理仿真整块搬进 GPU,并新增 direct-GPU tensor API,让 rollout 的观测/奖励/动作 buffer 全程留在 GPU、绝不回 CPU:单块 A100 上并行几千到上万个环境,Ant 20 秒学会跑、Humanoid 4 分钟、ANYmal 2 分钟、Shadow Hand 转方块 35 分钟,相对”CPU 仿真 + GPU 训练”的传统 RL 管线获得 2–3 个数量级训练提速——把过去要整座 CPU 集群的灵巧操作任务压进一台桌面 GPU。NeurIPS 2021 Datasets & Benchmarks Track。
背景与定位
论文提出并坐实的范式是 端到端 GPU-resident 的向量化 RL 仿真——物理引擎与策略/价值网络共享同一块 GPU 显存,经验数据靠 CUDA interop 直接从物理 buffer 喂进 PyTorch tensor,彻底消除 CPU↔GPU 的往返搬运。
作者点名当时 RL 落地的两大瓶颈:1) 巨大的算力需求 和 2) 受限的仿真速度,两者在高自由度、长时序任务上尤为致命。传统管线的病根在于 CPU/GPU 反复切换:CPU 上的物理引擎(mujoco、PyBullet、DART、Drake、V-Rep)算物理与奖励,GPU 跑神经网络,每步都要跨设备搬数据。他们用两个真实规模作对照说明代价之大——OpenAI 解 Rubik’s Cube 用了近 30,000 CPU 核(920 台 ×32 核);OpenAI 灵巧手(in-hand manipulation)用了 384 台机器共 6144 CPU 核(每台 16 核)+ 8×V100,训练 30 小时才收敛。
Isaac Gym 是作者前作 GPU-accelerated robotic simulation(Liang et al. 2018,CoRL)的正统续作。前作已经把物理放上 GPU,但物理状态仍被拷回 CPU 算观测/奖励再拷回 GPU,且只做了简化物理场景、无 sim2real。本作把这条尾巴彻底斩断。它与同期 Google 的 brax(JAX/XLA 全程 JIT + 可微 + 跨 TPU)属于同一波”加速器批量化 RL”浪潮——论文明确承认 Brax “recently begun attempting an approach similar to Isaac Gym”;区别在于 Isaac Gym 走 PhysX(成熟的 reduced-coordinate articulation + TGS 求解器)而非从零实现的可微引擎,因而更强于 contact-rich 灵巧操作与真实机器人 sim2real。方法上串联了 domain-randomization(Tobin et al. 2017)、asymmetric actor-critic、AMP、以及 ANYmal actuator-network sim2real(learning-quadrupedal-locomotion-challenging-terrain 一系的 Hwangbo et al.)。
需要澄清的是:Isaac Gym 是仿真基础设施 / benchmark 论文,不是模型论文——没有 backbone、tokenizer、policy head 这类神经网络架构可谈;下文的”模型架构”栏解读为引擎的系统架构。Isaac Gym(Preview SDK)现已被 NVIDIA 标记 deprecated,官方引导迁往 Isaac Lab / Isaac Sim。
模型架构
不是神经网络模型,而是仿真引擎的系统架构。
端到端 GPU 管线(核心贡献)
- 后端是 NVIDIA PhysX;机器人用 PhysX reduced-coordinate articulations 仿真,单独刚体可选 maximal-coordinate rigid body 或单链 articulation(两者等价可互换)。也支持 FleX 后端的有限 tensor 功能。
- 为端到端管线,作者给 PhysX 加了两个新特性:① GPU 仿真每步之后不再把结果 fetch 回 CPU;② 新增 direct GPU API,可直接在 GPU buffer 里读当前状态、提交状态改动、施加控制输入。
- 求解器用 TGS(Temporal Gauss-Seidel)(Macklin et al. “Small steps” SCA’19):把仿真 sub-step 折进 Gauss-Seidel 迭代——每次迭代末算速度、按 dt/N 累进到 per-body delta buffer,再投影到约束 Jacobian 上加进 bias 项;几乎不增加 per-iteration 成本却拿到 sub-stepping 的收敛质量。
Tensor API(数据抽象层)
- 核心用 C++/CUDA 实现,独立于任何 ML 框架;用 “wrap” 工具把裸 buffer 零拷贝包装成 PyTorch tensor(CPU/GPU 皆可),同一份 Python 代码只切一个 flag 即可在 CPU 或 GPU 上跑,用户无需写 CUDA/C++ kernel。可配合 TorchScript JIT 编译观测/奖励函数。
- 物理状态 tensor(Table 1,多为只读):Actor root state
(N_A,13)、DOF state(N_D,2)、Rigid body state(N_B,13)、DOF forcesN_D、Rigid body force sensor(N_F,6)、Net contact forces(N_B,3)、Jacobian、Mass matrix。13 = pos(3)+quat(4)+lin-vel(3)+ang-vel(3)。其中 root state 与 DOF state 可写——用于 reset:可 “teleport” actor、用 index buffer 只重置部分环境而不动其余。 - 物理控制 tensor(Table 2):DOF actuation forces、DOF position/velocity targets(PD 驱动)、Rigid body forces/torques,均支持”全体或按 index 子集”施加。
- 场景把所有并行环境打进单个 PhysX scene(GPU 上要”塞满一个 scene”才能吃满 streaming-multiprocessor 的细粒度并行),靠 collision filtering 保证环境间不互相碰撞;tensor 可 view 成带 env 维的形状,从而向量化观测/奖励 kernel。
建模/资产
- procedural API 建场景,支持 URDF 与 MJCF 导入、导入 mesh 的自动凸分解;支持 tendon(PhysX Fixed Tendon 机制,Shadow Hand 用到);PD drive 的 stiffness/damping、rigid body/material 属性大多可在仿真中途改——为不停机 domain randomization 铺路。Table 3 暴露 20 项可调仿真参数(dt、gravity、position/velocity iterations、restitution、friction、rest offset、drive stiffness/damping、joint armature 等)。
数据
不是数据集论文,“数据”指仿真生成的经验规模与 benchmark 环境的元数据。
8 个 benchmark 环境(Fig.1):Ant、Humanoid、Ingenuity(NASA 火星直升机简化模型,重力设 −3.721 m/s²)、ANYmal、Franka Cube Stacking、Shadow Hand、Allegro Hand、TriFinger;外加 Humanoid Character Animation(AMP,34-DOF humanoid + 动捕参考动作)。
各环境仿真元数据(Table 4)(Control Type / Sim dt / Control dt / Action Dims):
- Ant:Joint Torques / 1/120 / 1/60 / 8
- Humanoid:Joint Torques / 1/120 / 1/60 / 21
- Ingenuity:Rigid Body Forces / 1/200 / 1/100 / 6
- ANYmal:Joint Position Targets / 1/200 / 1/50 / 12
- Franka Cube Stacking:Operation Space Control (OSC) / 1/60 / 1/60 / 7
- Shadow Hand(Standard 与 OpenAI):Joint Position Targets / 1/120;Control dt Standard 1/60、OpenAI 1/20;Action 20
- Allegro Hand:Joint Position Targets / 1/120 / 1/20 / 16
- TriFinger:Joint Torques / 1/200 / 1/50 / 9
经验/样本规模(Table 17 training steps):Ant 32M、Humanoid 327M、Ingenuity 32M、ANYmal 65M、ANYmal Terrain 150M、AMP 39M、Franka 786M、SH Standard/OpenAI-FF 655M、SH OpenAI-LSTM 925M(0.1 rad 时 SH FF 1310M / LSTM 897M)。观测维度示例:Ant 60、Humanoid 108、Shadow Hand Standard 211、SH OpenAI 42(critic 用 privileged)、TriFinger actor 41 / critic 113。
sim-vs-real / 域随机化:ANYmal 与 TriFinger 做了真实机器人 sim2real。Shadow Hand OpenAI 变体按 Tobin/OpenAI 做 DR:物体尺寸 uniform[0.95,1.05]、link/object 质量 uniform[0.5,1.5]、摩擦 uniform[0.7,1.3]、joint damping loguniform[0.3,3.0]、actuator P 增益 loguniform[0.75,1.5]、joint limit 加 N(0,0.15) rad、重力每轴加 N(0,0.4) m/s²;物体上施加随机力(概率 p 从 loguniform[0.1%,10%] 采,力标准差 = 1 m/s²×物体质量,每 50ms 衰减 0.99)。物理随机化每次 reset 触发,最小间隔 720 步。
训练方法
- 算法:所有环境用 PPO,实现取自 rl_games(Makoviichuk & Makoviychuk 的高度优化 GPU 端到端实现),观测与动作在 GPU 上向量化。
- 网络与目标:默认 symmetric actor-critic(policy 与 value 共享观测、共享网络以加快前向);Shadow Hand 与 TriFinger 额外用 asymmetric actor-critic——policy 只看真实世界可得观测,value 看 privileged 仿真状态,天然利于 sim2real。FF 网络用 γ=0.99、LSTM 用 γ=0.998,GAE λ=0.95,clip ε=0.2,adaptive learning rate + per-env KL 阈值。隐藏层默认 ELU(AMP 用 ReLU)。
- 动作空间技巧:Franka 用 Operation Space Control(OSC) 任务空间柔顺控制(论文称其在 Isaac Gym 中完全可微),比 joint-space 学得更快、更适合 contact-rich,25 分钟内收敛。
- 关键超参(Table 17,节选):Ant 4096 env / horizon 16 / minibatch 32768 / 4 epoch;Humanoid 4096 / 32 / 32768 / 5;Franka 16384 / 32 / 131072 / 4;SH Standard 16384 / 8 / 32768 / 5;SH OpenAI-FF 16384 / 8 / 32768 / 5;SH OpenAI-LSTM 8192 / 16 / 32768 / 4。AMP 用固定 lr 2e-5、固定 KL 阈值 2e-1;SH OpenAI-LSTM value 用固定 lr 1e-4、LSTM 1024 隐藏单元 + MLP 512、序列长 4。
- 专项:AMP(Adversarial Motion Priors)用对抗判别器 D 学模仿目标,奖励 r_t = −log(1−D(s_t,s_{t+1})),让 34-DOF humanoid 从动捕语料学 spin-kick/舞蹈。ANYmal rough-terrain sim2real 加 actuator network(建模 series-elastic actuator 动力学,法承 Hwangbo et al.)、terrain 自动课程(单张含所有地形/难度的 mesh,按进度改 reset 位置省去动态地形生成)、观测加 140 维地形高度。Shadow Hand OpenAI 与 OpenAI 的差异:连续控制(vs 离散)、5 seed(vs 1 seed)、无 action delay/motor backlash、LSTM 1024→MLP 512(OpenAI 反过来 MLP 1024→LSTM 512)。
Infra(训练 / 推理工程)
- 硬件:除注明外,全部实验用 单块 NVIDIA A100 GPU + 单颗 3.7GHz Intel i7-8700K CPU。ANYmal rough-terrain sim2real 训练在 RTX A6000 上、20 分钟内完成并迁移到真机。
- 并行度:单卡并行 256→16384 个环境(同一个 PhysX scene 内);随环境数增加按比例缩短 horizon 以保持 RL 观测到的总经验恒定。每秒并行环境步(effective FPS):Ant 峰值 ~700K(8192 env)、训练平均 540K(4096 env);Humanoid ~200K(DOF 更多降下来);Shadow Hand 峰值 150K(16384 env)。
- 精度 / 并行策略:论文未披露训练精度(fp32/fp16)。GitHub 侧支持
torchrun/torch.distributed的多 GPU 训练(multi_gpu=True)、Population Based Training、pipeline=gpu|cpu(gpu 时数据全留 GPU)。 - 推理 / 控制频率:见 Table 4 control dt——Ant/Humanoid/Franka/Shadow-Standard 60 Hz、ANYmal/TriFinger 50 Hz、Shadow-OpenAI/Allegro 20 Hz、Ingenuity 100 Hz。真机部署帧率、端侧硬件延迟等未披露(论文聚焦仿真吞吐而非边缘部署)。
评测 benchmark
全部数字来自论文(单 A100,除注明),并给出与 OpenAI/前作的直接对照:
训练墙钟(性能门槛)
- Ant:3000 reward(performant locomotion)20 秒,4096 env 下 <2 分钟完全收敛;256→8192 env 使达 7000 reward 时间从 ~1000s 降到 ~100s(约 10×)。
- Humanoid:5000 reward <4 分钟(4096 env),比前作 Liang et al. 2018 同门槛快 4×;256→4096 env 使达 7000 reward 从 ~10^4s(~2.7h) 降到 ~10^3s(~17min)。
- Ingenuity:5000 reward <30 秒(4096 env)。
- ANYmal:跟随目标速度 <2 分钟(4096 env);rough-terrain sim2real <20 分钟(RTX A6000)并迁真机。
- AMP humanoid:约 39M 样本 ~6 分钟(4096 env);对照 Peng et al. PyBullet 在 16 CPU 核上跑同量样本约 1 天(30 小时)——300× / 2.48 个数量级提速。
- Franka Cube Stacking:OSC 控制器 <25 分钟收敛(16384 env)。
- Shadow Hand Standard:20 consecutive successes <35 分钟(无 DR、symmetric FF,最快)。
复现 OpenAI 灵巧手(0.4 rad 容差,asymmetric + DR,sim-only)
- SH OpenAI FF:>20 consecutive successes <1 小时(vs OpenAI 30 小时 / 384×16 核 CPU + 8×V100)。
- SH OpenAI LSTM:37 consecutive successes <6 小时(vs OpenAI ~17 小时);取最佳 seed 仅 2.5 小时(OpenAI 只报 1 seed)。
- 0.1 rad 更紧容差:FF 20 successes ~1 小时;LSTM 37 successes ~6 小时;以 0.1 训练、0.4 测试可达 44 consecutive rotations。
- Shadow Hand 转方块(Standard 变体):10 consecutive successes @reward 3000 仅 5 分钟;256→16384 env 使达标时间从 ~5×10^4s(~14h) 降到 ~3×10^3s(~1h)。
sim2real
- ANYmal rough-terrain:训练策略成功迁移到真机走不平地形/坡/台阶/障碍。
- TriFinger 6-DoF 重定位:真机平均成功率 55%(远程真机,机器人异地);Allegro Hand 因手腕固定+手指偏长,consecutive successes 不及 Shadow Hand。
命名 baseline:OpenAI et al. 2018 灵巧手(MuJoCo + CPU 集群 + 8×V100)、作者前作 Liang et al. 2018、AMP 的 PyBullet 实现。
创新点与影响
贡献:① 高保真、GPU 加速的机器人仿真器;② Python Tensor API 零拷贝把物理 buffer 包成 PyTorch tensor、绕开一切 CPU 瓶颈;③ 多个高复杂度灵巧操作环境,单卡可达每秒数十万仿真步;④ 一整套跑在其上的 SOTA RL 训练结果与 sim2real。核心命题:把过去要异构 CPU/GPU 大集群才能做的 RL,压进一台桌面单 GPU,为 PhysX 加的两个特性(不 fetch-back + direct GPU API)是使能这条端到端管线的工程关键。
改变了什么:Isaac Gym 让”数千并行环境 + 单卡分钟级训练”成为机器人 RL 的默认范式,催生了 legged-locomotion(ANYmal “分钟级学走路”)、in-hand dexterity(DeXtreme、DexPBT)、contact-rich assembly(Factory、IndustReal)等一系列后续工作(均在 IsaacGymEnvs 里)。它与同期 brax 一起把 GPU/TPU-native 向量化仿真钉成主流,直接铺就了后来的 Isaac Lab / Isaac Sim / Isaac Orbit 生态。
作者自陈的局限 / 边界:① Shadow Hand 实验只在仿真、未做 sim2real(与 OpenAI 不同);DR 未含 action delay 与 motor backlash。② 复现 OpenAI 时存在诸多设定差异(连续 vs 离散控制、奖励函数不同、网络结构不同),不是严格 apples-to-apples。③ 环境复杂度会吃掉并行收益——Humanoid 超过 4096 env 反而更慢、步态变差,Ant 8192→16384 无增益(horizon 太短)。④ Ingenuity 直接对转子施力、未仿真气动。⑤ 系统层面:Isaac Gym 作为 Preview SDK 现已 deprecated,官方迁往 Isaac Lab(本页信息基于当年一手论文 + 仓库 + 官网存档)。
原始链接
- 论文(arXiv 2108.10470,NeurIPS 2021 D&B Track):https://arxiv.org/abs/2108.10470
- OpenReview(NeurIPS 2021 D&B):https://openreview.net/forum?id=fgFBtYgJQX_
- GitHub(IsaacGymEnvs,环境与 benchmark):https://github.com/NVIDIA-Omniverse/IsaacGymEnvs
- 官方页(Isaac Gym Preview,现 deprecated):https://developer.nvidia.com/isaac-gym
- 结果与视频:https://sites.google.com/view/isaacgym-nvidia
- rl_games(PPO 实现):https://github.com/Denys88/rl_games
一手源存档(sources/)
- isaac-gym—github-readme — IsaacGymEnvs README(安装、任务列表、多 GPU/PBT/DR/引用)
- isaac-gym—project-page — developer.nvidia.com/isaac-gym 存档(Features、Preview 4 release notes、deprecation 提示)
- 论文全文见上方 arXiv 链接(arXiv 原文 PDF,不入 git)