转载

OpenAI研究 Python中更快的物理

正在开源一个高性能 Python 库,用于使用 MuJoCo 引擎进行机器人仿真,该引擎是我们在过去一年的机器人研究中开发的。

该库是我们用于深度学习机器人研究的核心工具之一 ,我们现在已将其作为 mujoco-py的主要版本发布,这是我们针对 MuJoCo 的 Python 3 绑定。mujoco-py  1.50.1.0 带来了许多新功能和显着的性能提升。新功能包括:

  • 高效处理并行模拟
  • GPU 加速的无头 3D 渲染
  • 直接访问 MuJoCo 函数和数据结构
  • 支持所有 MuJoCo 1.50 功能, 例如改进的接触解算器

批量模拟

轨迹优化和强化学习中的许多方法(如 LQR、  PI2和 TRPO)都受益于能够并行运行多个模拟。mujoco-py 通过OpenMP使用数据并行性 ,通过Cython 和 NumPy 使用直接访问内存管理  来提高批量模拟的效率。

 新版本的 MjSimPool接口的简单使用 显示比旧版本提速 400%,并且仍然比使用 Python 的 多处理包 获得相同级别并行性的优化和受限使用模式提速约 180%。大部分加速来自减少对各种 MuJoCo 数据结构的访问时间。查看 examples/simpool.py MjSimPool 之旅。

高性能纹理随机化

循环discogif2

 我们在 OpenAI 的许多项目中使用 域随机化技术。最新版本的 mujoco-py 支持 headless GPU 渲染;与基于 CPU 的渲染相比,这产生了大约 40 倍的加速,让我们每秒生成数百帧的合成图像数据。在上面的(放慢的)动画中,我们使用它来改变我们其中一个机器人的纹理,当我们将它从模拟器转移到现实时,这有助于它识别它的身体。查看 examples/disco_fetch.py  以获取随机纹理生成的示例。

虚拟现实与 mujoco-py

mujoco-py 公开的 API 足以启用虚拟现实交互,无需任何额外的 C++ 代码。我们使用 mujoco-py 将 MuJoCo 的 C++ VR 示例移植 到 Python。如果您有 HTC Vive VR 设置,您可以尝试使用 此示例 (此支持被认为是实验性的,但我们已经在内部使用了一段时间)。

API和使用

开始使用 mujoco-py 的最简单方法是使用 MjSim 类。它是仿真模型和数据的包装器,可让您轻松地逐步进行仿真并渲染来自相机传感器的图像。这是一个简单的例子:

from mujoco_py import load_model_from_path, MjSim

model = load_model_from_path("xmls/tosser.xml")  

sim = MjSim(model)
sim.step()
print(sim.data.qpos)
# => [ -1.074e-05   1.043e-04  -3.923e-05   0.000e+00   0.000e+00]
无效的

对于高级用户,我们提供了许多底层接口,用于直接访问 MuJoCo C 结构和函数的内部结构。请参阅 自述文件 和 完整文档 以了解更多信息。