SuperAPI AI 工具集

mujoco-accelerated

智能体与模型

查看项目

更新于 10-15 21:53

技能介绍

用途:MuJoCo Accelerated 介绍 MuJoCo 的两个 Python 加速后端——MJX(JAX,可在 CPU/GPU/TPU 运行)与 MJWarp(CUDA,面向 NVIDIA GPU),用于批量物理仿真与强化学习 rollout,与 CPU 版 mujoco-python、mujoco-studio 互为补充。两者均为 Python-only 后端,标准 CPU 仿真仍以 import mujoco 使用 float64。

主要能力:MJX 将模型与数据转为不可变 JAX pytree,精度为 float32,支持 JAX 自动微分,可用 jax.vmap 做批量并行、jax.lax.scan 做多步轨迹展开,并提供 bind() 命名访问读写字段。MJWarp 提供 CUDA 原生批量,一次推进多个 world(如 nworld=4096),支持约束岛(Constraint Islands),仅支持 SDF 插件,不支持全部引擎插件。CPU 引擎支持 Newton、CG、PGS、noslip 求解器;MJX 与 MJWarp 只支持 Newton、CG,noslip 与 PGS 仅 CPU 可用。

用法要点:MJX 流程为 mjx.put_model、mjx.put_data、mjx.step,再用 mjx.get_data_into 拷回 CPU;批量用 jax.vmap(mjx.step, in_axes=(None, 0)) 并 jax.jit 编译。MJWarp 用 mjw.put_data(model, data, nworld=..., nconmax=..., njmax=...) 或 mjw.make_data,再 mjw.step 原地推进,可用 mjw.get_data_into(..., world_id=0) 取回单 world。JAX 要求静态形状,接触与约束缓冲在创建设备数据时确定:MJX 接触缓冲由模型推导,put_data 的 njmax 被忽略,可用 MJCF custom numeric 的 max_geom_pairs、max_contact_points 收缩缓冲;MJWarp 由 nconmax、naconmax、njmax 显式设定,超限会丢接触、打印警告并置 d.overflow。

适用场景与限制:适合需要大规模并行、可微分仿真的训练与轨迹生成。注意 float32 精度可能带来数值漂移或 NaN,可通过增大 opt.iterations 或减小 opt.timestep 缓解;MJX 数据不可原地赋值,需用 .replace();长时间重编译可通过 jax.config.update('jax_compilation_cache_dir', '/tmp/jax_cache') 启用持久缓存。几何碰撞支持矩阵、求解器与插件差异见原文,未提供更多细节。