想象一下,你是一位教练,正在训练一支由 10,000 名机器人运动员组成的队伍。你的目标是教会它们如何行走、抓取物体或跑上楼梯。为此,你需要一个模拟器——一个数字健身房,你可以在其中测试它们的动作数百万次,而无需流一滴汗。
本文介绍了MuJoCoUni,这是一款新工具,旨在使这个数字健身房运行得更快、更高效,特别是针对那些需要实时学习的机器人。
以下是使用简单类比进行的分解说明:
1. 问题:“一次一个”的瓶颈
以前,如果你想使用标准的 MuJoCo 模拟器(机器人物理学的行业标准)来训练机器人,你往往不得不把它们像排队等待单一收银员的人群一样对待。
- 旧方法: 你向机器人 A 发送指令,等待结果,然后向机器人 B 发送指令,再等待,依此类推。即使你拥有超级快速的计算机,该软件的设计初衷也是逐个处理它们,或者以非常小且僵硬的批次处理。
- 局限性: 这就像试图用一个滴水器给游泳池注水。虽然可行,但对于大规模训练来说,速度慢得惊人。
2. 解决方案:“传送带”系统
MuJoCoUni 就像一条为你的机器人模拟提供的高速传送带。
- 批次处理: 不再一次处理一个机器人,MuJoCoUni 会抓取整个“批次”(例如 1,000 个机器人)并一次性处理它们。
- “持久性”功能: 这是关键创新。在旧系统中,每次你重置机器人以再次尝试时,计算机都必须从头重建机器人的“大脑”和“身体”。MuJoCoUni 将机器人“存活”在内存中。它记住了它们特定的身体形状和设置。当某个机器人未能完成任务时,系统只需将该特定机器人“重置”到起跑线,而其他机器人则继续移动。这节省了巨大的时间。
3. 工作原理:“专业工人”
论文描述了一个名为BatchEnvPool的核心组件。将其想象为一个工厂车间经理:
- 模型: 它保存了每个机器人蓝图(其物理结构)的副本,随时待命。
- 工人: 它为每组机器人分配一名专职工人(计算机线程)来处理物理计算。
- 速度: 由于这些工人已经设置好并处于待命状态,它们不会浪费时间从头构建机器人。它们只需运行模拟、检查结果,并重置那些跌倒的机器人。
4. 它能做什么(“超能力”)
论文强调,MuJoCoUni 不仅仅是运行得更快;它还添加了针对机器人学习的具体工具:
- 智能重置: 如果 1,000 个机器人中只有 5 个跌倒,系统仅重置这 5 个。它不会停止其他 995 个。这就像老师只叫起答错问题的学生,而班级里的其他学生继续学习。
- 随机化: 为了使机器人更加稳健,你通常希望在每次重启时稍微改变它们的重量或地面的摩擦力。MuJoCoUni 可以在重置过程中自动且即时地完成此操作,就像厨师每次端出新碗汤时都会微妙地调整汤中的香料浓度。
- 即时查询: 有时你需要知道具体细节,例如“机器人脚下的地面有多高?”或“机器人手臂的角度是多少?”MuJoCoUni 可以同时为所有 1,000 个机器人提出这些问题,而无需在时间上实际推进它们。
5. 结果:速度与规模
作者在四种不同类型的机器人(机器狗、灵巧手、机械臂和人形机器人)上测试了该系统。
- 数据: 当他们同时运行 4,000 个机器人时,新系统比旧的基于 Python 的方法快15 到 500 倍。
- 最佳点: 该系统变得如此高效,以至于在计算机处理器成为瓶颈之前,它可以同时处理数百个机器人。
6. 它不是什么
重要的是要注意这篇论文没有声称的内容:
- 它不是基于 GPU 的系统(像那些在显卡上运行的视频游戏所使用的系统)。它运行在标准计算机处理器(CPU)上。
- 它不改变实际的物理规则。它使用与原始 MuJoCo 完全相同的物理引擎,确保如果机器人在这里学会了行走,它在现实世界中也会以同样的方式行走。
- 它不是用于规划从起点到终点的长而复杂的路径的替代品。它是专门为“在线学习”循环设计的,即机器人尝试、失败、学习,然后快速再次尝试。
总结
MuJoCoUni 是一项软件升级,它将一条缓慢的单行道变成了机器人训练的多车道高速公路。它让机器人保持“停放”并随时待命,允许研究人员并行运行数千次模拟,仅重置那些失败的机器人,并即时调整它们的设置。这使得训练复杂机器人变得更快、更高效,同时保持了物理学的准确性和可靠性。
技术摘要:MuJoCoUni
问题陈述
机器人学习系统日益将物理模拟器直接集成到训练循环中,这要求以高频执行批量化的物理步骤、传感器读取和环境重置。尽管上游 MuJoCo 提供了成熟的资产和求解器,但其标准的 Python 接口在高频下会因对象生命周期管理、接口调用和输出塑形而产生开销。
现有解决方案存在权衡:
- 上游
mujoco.rollout: 适用于开环轨迹生成(规划、系统辨识),但缺乏有状态的环境持久性、稀疏重置能力以及在线强化学习(RL)所需的每个环境的随机化生命周期。
- GPU 驻留模拟器(例如 Brax、MJX、Isaac Gym): 提供大规模并行能力,但通常要求模型和数据布局适应特定的加速器约束,可能会牺牲完整的功能覆盖、复杂的接触处理,或复用现有 CPU 优化的 MuJoCo 资产的能力。
- 标准 CPU 向量化运行时: 往往缺乏与特定 MuJoCo 求解器语义的深度集成,或者需要大量的工程工作来高效地维护模型持久性和领域随机化。
因此,需要一种基于 CPU 的批量运行时,既能保留上游 MuJoCo 的完整语义保真度(模型、传感器、接触、约束),又能提供高吞吐量的并行执行和有状态的环境管理,以支持在线强化学习和批量物理评估。
方法论
MuJoCoUni 是 MuJoCo 的一个轻量级下游发行版,其工程增量严格集中在Python 绑定层,核心物理内核、求解器、积分器和接触模型保持不变。
核心架构:BatchEnvPool
核心组件是 BatchEnvPool,这是一个 C++/pybind11 执行器,负责管理:
- 持久资源: 它拥有 N 份
mjModel 副本(每个环境一份)和 W 个 mjData 工作单元(每个线程一个)。
- 线程池: 内部线程池将环境索引分派给工作线程以进行并行执行。
- 有状态执行: 与每次调用无状态的
rollout 不同,BatchEnvPool 在调用之间维护环境的状态,从而支持稀疏重置和持久的模型变体。
关键原语
该 API 公开了若干专为在线机器人训练和评估设计的原语:
step: 对所有环境执行 n 个积分步骤(mj_step)。它仅返回最终状态(以及可选的最终传感器数据),避免了返回完整轨迹的开销。
forward: 执行 mj_forward 以根据当前状态更新传感器,而不推进动力学,适用于观测构建。
reset: 实现稀疏重置,仅作用于已终止环境的子集(env_ids)。它支持重置生命周期领域随机化,仅对受影响的环境应用字段补丁(例如质量、惯量、摩擦)并调用 mj_setConst。
compute_site_jacobians: 批量计算特定位置的平移和旋转雅可比矩阵,运行最小的运动学前缀(mj_kinematics、mj_comPos),随后执行 mj_jacSite。
sample_hfield_height: 批量双线性采样 MuJoCo 高度场几何体,支持各种帧对齐(世界坐标系、身体坐标系、偏航角)。
设计边界
该实现避免修改 MuJoCo 源代码树。它依赖 mj_copyModel 进行环境实例化,依赖 mj_setConst 进行随机化。该设计支持两种模式:
- 单一共享模型: 所有环境共享一份模型副本(内存效率高,随机化灵活性较低)。
- 模型变体: 每个环境拥有独立的模型副本,允许在构建时预编译几何级别的随机化(例如连杆长度、网格缩放)。
主要贡献
- 有状态批量运行时: 引入
BatchEnvPool 以弥合开环轨迹生成与在线、有状态 RL 环境需求之间的差距。
- 高效的稀疏重置与随机化: 提供了一种机制,仅重置已终止的环境并应用领域随机化(包括字段补丁和模型变体),开销极小,且随重置环境数量线性扩展。
- 批量物理查询: 公开了高性能的批量实现,用于传感器前向传递、位置雅可比矩阵和高度场采样,而无需推进动力学。
- 语义保留: 确保物理行为与上游 CPU MuJoCo 完全一致,保持与现有 XML/MJB 资产、调试工具和传感器定义的兼容性。
结果
作者在四种机器人模型(Unitree Go1、Wonik Allegro、Franka Panda、CMU Humanoid)上验证了 MuJoCoUni,使用配备 16 个线程的 Intel i9-14900HX CPU。
- 吞吐量: 吞吐量在 256–512 个环境左右达到饱和。在饱和状态下,系统实现:
- Wonik Allegro: 约 180 万步/秒。
- Unitree Go1: 约 120 万步/秒。
- Franka Panda: 约 41 万步/秒。
- CMU Humanoid: 约 29 万步/秒。
- 重置性能: C++
BatchEnvPool 路径显著快于 Python 循环。对于 4096 个环境的完整重置,耗时为 3.5 毫秒,而 Python for 循环耗时 53 毫秒(约 15 倍加速)。
- 雅可比性能: 在 C++ 中计算 4096 个环境的位姿雅可比矩阵耗时 0.53 毫秒,而在 Python 中耗时 11.9 毫秒(约 22 倍加速)。
- 高度场采样: 在 C++ 中采样 4096 个环境的高度场耗时 0.52 毫秒,而在 Python 中耗时 290 毫秒(约 555 倍加速)。
- 模型变体: 在饱和状态下,每个环境使用独立模型副本(模型变体模式)与使用单一共享模型相比,开销可忽略不计,吞吐量基本相同。
意义与范围
本文将 MuJoCoUni 定位为一种互补性工程解决方案,而非 GPU 驻留模拟器或上游 rollout 的替代品。
- GPU 的补充: 它针对那些优先考虑功能覆盖(完整的 MuJoCo 语义、复杂接触、调试)和跨平台可移植性而非原始加速器驻留的工作负载。它允许系统利用现代多核 CPU 进行高吞吐量数据生成,同时保留 CPU MuJoCo 求解器的稳定性。
rollout 的补充: 它解决了在线机器人 RL和有状态评估循环的特定需求,这些需求需要持久环境、稀疏重置和当前状态查询,而 rollout(专为完整轨迹生成设计)并未针对这些任务进行优化。
- 系统集成: 它作为一个模拟后端,将物理执行与更高层的训练逻辑、日志记录和调度解耦。它特别适用于需要领域随机化、地形感知运动以及批量优化(例如进化策略)的 sim-to-real 训练。
作者强调,该贡献侧重于工程方向,提供了一条具体、可复现的路径,用于在保留上游 MuJoCo 生态系统的同时实现 CPU 批量执行。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。