ManiSkill3 完全指南:GPU 并行机器人仿真如何跑到百万 FPS?
【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill
如果你训练过强化学习或模仿学习策略,一定被同一个问题折磨过:仿真跑得太慢。单环境一步步演算,采一批数据要等几个小时,调个参数又要再等几个小时。ManiSkill3 机器人仿真框架就是为解决这个痛点而生的——它是一个基于 SAPIEN 物理引擎的开源 GPU 并行化机器人仿真与训练平台,把"一帧"的含义从"一个环境走一步"变成了"上千个环境同时走一步",在一张 RTX 4090 上,纯状态仿真吞吐最高可达百万 FPS 量级。
上:ManiSkill3 中光线追踪渲染的家庭场景与成百上千个并行环境(图源:figures/teaser.jpg)
为什么机器人学习需要"千环境并行"
先说清楚 ManiSkill3 到底解决什么问题。
传统仿真器(MuJoCo、PyBullet 等)大多是 CPU 串行仿真:一次只算一个世界。对于"一个机械臂抓一个方块"这种任务,一帧几毫秒,看着不慢,但强化学习需要几十万、上百万次交互经验,瓶颈立刻就显现了。
ManiSkill3 的做法是把物理引擎(PhysX 的 CUDA 后端)搬上 GPU,让成百上千个环境像 GPU 上的线程一样被同时演算。它的核心卖点可以概括成四点:
- GPU 并行状态仿真:状态观测模式下吞吐极高,合成数据采集不再等
- GPU 并行视觉采集:在 4090 上可以 30,000+ FPS 的速度采集 RGB-D + 语义分割数据
- 异构并行:每个并行环境可以是完全不同的场景和物体组合,不是简单的"复制粘贴"
- 任务构建 API:面向对象设计,把复杂的 GPU 内存管理隐藏在
num_envs参数背后
上:ManiSkill3 支持的机器人形态一览,从工业机械臂、灵巧手到人形与四足机器人(图源:docs/source/_static/robot_images/robot-grid.png)
3 分钟跑通 GPU 并行仿真
上手成本是 ManiSkill3 的一大优点。安装只需要两条命令:
pip install --upgrade mani_skill pip install torch之后配好 Vulkan 渲染环境(Linux + NVIDIA 显卡开箱即用),就可以创建环境了。关键只有一个参数:num_envs。
import gymnasium as gym env = gym.make( "PickCube-v1", # 桌面抓方块任务 num_envs=1024, # 1024 个环境并行 obs_mode="state", # 只用状态观测(比视觉快 10-100 倍) sim_backend="auto", # 自动选择 GPU 后端 )这里有个隐藏逻辑值得注意:num_envs=1时走 CPU 后端方便调试,num_envs > 1时自动切到 GPU 并行模式。这个自动选择由 mani_skill/envs/utils/system/ 中的parse_sim_and_render_backend完成,它会把auto/cuda/gpu等写法映射到具体的 PhysX 与 SAPIEN 后端,并且在找不到 CUDA 设备时优雅降级到 CPU 渲染,而不是直接报错。
观测与控制模式通过obs_mode和control_mode指定,常用组合包括:
| 观测模式 | 说明 |
|---|---|
state | 关节位置、物体位姿等数值状态,速度最快 |
rgb/rgbd | 相机图像 / 图像+深度 |
pointcloud | 深度转点云 |
segmentation | 语义分割掩码 |
| 控制模式 | 说明 |
|---|---|
pd_joint_pos | PD 关节位置控制 |
pd_ee_pose | PD 末端位姿控制 |
pd_base_vel | PD 基座速度控制(移动机器人) |
所有控制器的实现都在 mani_skill/agents/controllers/ 目录下,想改控制逻辑可以按机器人类型找到对应文件。
数字说话:它到底能跑多快
官方基准测试全部在 RTX 4090 上完成,结果存放在 docs/source/user_guide/additional_resources/benchmarking_results/,数据分两张图看。
上:CartpoleBalanceBenchmark 任务的状态仿真 FPS 对比(ManiSkill3 红色 vs Isaac Lab 青色),柱上数字为显存占用(图源:docs/source/user_guide/additional_resources/benchmarking_results/rtx_4090/fps_num_envs_state.png)
从这张图能读出两个信息:
- 吞吐规模:并行环境从 32 拉到 16,384 时,ManiSkill3 的状态仿真 FPS 从几千一路涨到约 430 万,曲线几乎线性
- 显存效率:同为 16,384 环境,ManiSkill3 占用 2.1 GB,对比框架是 4.6 GB——环境数相同的情况下显存省了一半左右
再看不同任务复杂度的差异:
上:三个任务在"仿真+渲染"模式下的总 FPS(图源:docs/source/user_guide/additional_resources/benchmarking_results/rtx_4090/fps_vs_num_envs_different_tasks.png)
- CartpoleBalanceBenchmark(纯控制、无相机):1,000 环境时超过 31,000 FPS,曲线最陡,扩展性最好
- PickCube-v1(桌面抓取+渲染):同配置下约 17,000+ FPS
- OpenCabinetDrawer-v1(铰链机构+渲染,物理交互更重):约 8,000 FPS 量级
结论很直接:任务越"轻",扩展性越好;加渲染会掉一截,但绝对吞吐仍然很高。另外官方 README 提到,在 4090 上采集RGB-D + 分割这类完整视觉数据也能达到 30,000+ FPS,对大规模数据生成来说这个速度意味着什么,用过 CPU 渲染的都知道。
异构并行:每个环境都不一样
大多数"并行仿真"只是把同一个场景复制 N 份,而 ManiSkill3 的并行是异构的:每个并行环境可以拥有完全不同的场景布局、物体集合甚至场景数据集。
这对训练的意义在于泛化——策略在训练时见到的从来不是"同一个桌子的 1000 份拷贝",而是 1000 个千差万别的局面。配合 mani_skill/envs/utils/randomization/ 中的随机化模块(物体位姿、纹理、光照等),可以低成本制造出分布足够广的训练数据。
场景资产方面,框架内置了来自 AI2THOR 和 ReplicaCAD 等真实环境重建的场景构建器(见 mani_skill/utils/scene_builder/),下图是其中光线追踪渲染出的家庭厨房场景,双移动操作机器人在灶台前作业,这类环境正是 VLA(视觉-语言-动作)模型研究的用武之地:
上:ManiSkill-HAB 真实感家庭环境中的移动操作场景(图源:docs/source/_static/env_thumbnails/ManiSkill-HAB_rt_poster.png)
开箱即用的资产与基线库
任务库。mani_skill/envs/tasks/ 按能力域分目录组织:tabletop(桌面抓取/放置/堆叠)、dexterity(灵巧手操作)、drawing(自由绘图)、quadruped(四足)、humanoid(人形)、mobile_manipulation(移动操作)、digital_twins(真实机器人数字孪生任务)等,每个目录里可以直接看到任务定义文件。想自己写新任务,mani_skill/envs/minimal_template.py 提供了最小可运行模板,教程文档在 docs/source/user_guide/tutorials/custom_tasks/。
学习基线。examples/baselines/ 目录里放了一批调好的算法参考实现,覆盖三类需求:
| 方向 | 实现 |
|---|---|
| 强化学习 | PPO(含 RGB 观测版)、SAC、TD-MPC2 |
| 模仿学习 | Behavior Cloning、Diffusion Policy、ACT |
| 实验性 | SAC-MoE、RLPD 等 |
数据与演示。mani_skill/trajectory/ 提供轨迹回放、合并以及转 LeRobot 格式的完整工具链;scripts/data_generation/ 下则有现成的数据采集脚本(遥操作、运动规划、RL 轨迹三种来源),docs/source/user_guide/datasets/ 里有配套文档。
Real2Sim / Sim2Real。框架支持把真实世界的策略放进仿真里做 Real2Sim 评估,借助 GPU 并行,评估速度可比单环境快两个数量级以上;docs/source/user_guide/tutorials/sim2real/ 还收录了仿真训练策略迁移到真实机器人的案例(如 SO-100 机械臂、Koch 手臂)。
安装要点与硬件支持清单
系统支持情况官方给了一张明确的表,避免"装了跑不起来"的纠结:
| 系统 / GPU | CPU 仿真 | GPU 仿真 | 渲染 |
|---|---|---|---|
| Linux / NVIDIA GPU | ✅ | ✅ | ✅ |
| Windows / NVIDIA GPU | ✅ | ❌ | ✅ |
| Windows / AMD GPU | ✅ | ❌ | ✅ |
| MacOS | ✅ | ❌ | ✅ |
一句话总结:想要 GPU 并行仿真,需要 Linux + NVIDIA 显卡;其他平台可以跑 CPU 模式和渲染。渲染依赖 Vulkan 驱动,相关配置步骤在 docs/source/user_guide/getting_started/installation.md 中有说明,Linux 下还可用仓库里的 docker/ 目录中的 Dockerfile 直接构建带 Vulkan 支持的容器环境。
另外提醒两点:
- 刚体环境代码采用 Apache-2.0 等宽松许可,但资产(mesh 等)是 CC BY-NC 4.0 许可,商用前请确认许可范围
- 官方教程提供了一个 Colab notebook(examples/tutorials/1_quickstart.ipynb),免费算力即可体验 GPU 并行仿真
性能调优速查
根据基准测试曲线和文档,日常优化就记四条:
- 环境数不是越大越好:FPS 曲线会趋于平台期(如 PickCube 在 500+ 环境后增长变缓),找到"总吞吐 × 显存占用"的拐点即可
- 能用
state就不用视觉:状态观测比 RGB-D 快一到两个数量级,纯策略调参阶段先用状态跑通 - 相机分辨率是主要杠杆:128×128 与 512×512 的吞吐差距非常大,先低分辨率验证,再上高分辨率采正式数据
- 盯住显存:图表中每个点都标注了显存占用,OOM 几乎都发生在环境数翻倍时,建议按 2~4 GB 显存的余量预留
写在最后
ManiSkill3 把"慢"从机器人学习的默认设定里拿掉了:GPU 并行让状态仿真冲到百万 FPS 量级,异构并行让训练数据天然多样,而num_envs一个参数就把这些能力暴露给了所有 Gymnasium 用户。无论你是要跑 PPO 基线、采 RGB-D 数据集、训练 VLA 模型,还是做 Real2Sim 评估,它都提供了从任务定义、传感器配置到算法参考实现的完整闭环。对于正在寻找"跑得动、扩展性强、接口标准"的机器人仿真平台的研究者来说,这是一个值得第一时间试用的选项。
【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考