捷徑

使用基於 MuJoCo 的環境

從其 官方儲存庫

MuJoCo 代表具有接觸的多關節動力學。它是一種通用物理引擎,旨在促進機器人技術、生物力學、圖形和動畫、機器學習以及其他需要快速準確模擬與其環境互動的關節結構的領域的研究和開發。

最近,MuJoCo 被 DeepMind 收購並開源。 從那時起,任何人都可以訪問該函式庫而無需許可證。 Python 綁定已納入該函式庫,使對 mujoco-py 的依賴變得過時。 但是,一系列函式庫保留了舊 mujoco 綁定的傳統。

在本文檔中,我們詳細介紹了該函式庫的新舊綁定的問題和專業技巧。

安裝 MuJoCo

渲染的先決條件(所有 mujoco 版本)

MuJoCo 提供了一些出色的渲染功能。 為此,MuJoCo 將使用以下後端之一:glfw、osmesa 或 egl。 其中,glfw 無法在無頭環境中使用。 另一方面,osmesa 將無法在 GPU 上執行。 因此,我們的建議是使用 egl 後端。

如果您對您的機器具有 sudo 訪問權限,您可以安裝以下依賴項以啟用快速渲染

$ sudo apt-get install libglfw3 libglew2.0 libgl1-mesa-glx libosmesa6

如果沒有,這些函式庫可以透過 conda 安裝,但請注意,這不是預期的工作流程,並且事情可能無法按預期工作

$ conda activate mujoco_env
$ conda install -c conda-forge glew
$ conda install -c conda-forge mesalib
$ conda install -c anaconda mesa-libgl-cos6-x86_64
$ conda install -c menpo glfw3

在這兩種情況下,在執行程式碼時,您都需要告訴 mujoco 使用哪個後端。 這可以透過設定適當的環境變數來完成。

$ conda env config vars set MUJOCO_GL=egl PYOPENGL_PLATFORM=egl
$ conda deactivate && conda activate mujoco_env

新綁定 (≥ 2.1.2)

您可以從 mujoco 發布頁面 安裝預先構建的二進制檔案。 但是,在大多數情況下,您只需要 python 綁定。 這些可以透過 pip 安裝。

$ conda create -n mujoco_env python=3.9
$ conda activate mujoco_env
$ pip install mujoco

舊綁定 (≤ 2.1.1):mujoco-py

在某些情況下,您可能需要使用舊的 mujoco 綁定。 例如,當使用一些使用 mujoco-py 而不是新綁定的舊程式碼時,由於叢集要求等原因,可能會發生這種情況。 請參閱 mujoco-py README.md。 使用 conda,您的設定應如下所示

$ conda create -n mujoco_env python=3.9
$ conda activate mujoco_env
$ mkdir ~/.mujoco
$ cd ~/.mujoco
$ # check here for 2.1.0 versions https://github.com/deepmind/mujoco/releases/tag/2.1.0
$ # check here for earlier versions http://roboti.us/download.html
$ wget https://github.com/deepmind/mujoco/releases/download/2.1.0/mujoco210-linux-x86_64.tar.gz
$ tar -xf mujoco210-linux-x86_64.tar.gz
$ # for versions < 2.1.0, we need a licence file. Since mujoco is now free of
$ # of charge, this can obtained easily
$ wget http://roboti.us/file/mjkey.txt
$ # let's tell conda about our mujoco repo
$ conda env config vars set MJLIB_PATH=/path/to/home/.mujoco/mujoco210/bin/libmujoco210.so \
$ > LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/home/.mujoco/mujoco210/bin \
$ > MUJOCO_PY_MUJOCO_PATH=/path/to/home/.mujoco/mujoco210
$ # For versions < 2.1.0, we must link the key too
$ conda env config vars set MUJOCO_PY_MJKEY_PATH=/path/to/home/.mujoco/mjkey.txt
$ # reload the env
$ conda deactivate && conda activate mujoco_env

選項 1:使用 pip 安裝 mujoco-py

我們建議這樣做,因為稍後可能很難更改程式碼,因為在使用 GPU 進行原生 mujoco-py 程式碼渲染時存在已知問題。 如果這是預期的用法,請參閱下面的選項 2。

$ conda activate mujoco_env
$ pip install mujoco-py

選項 2:從克隆的儲存庫安裝 mujoco-py

我們建議透過複製儲存庫並在本機安裝的方式來安裝 mujoco-py。萬一必須強制 mujoco-py 針對 cuda 進行安裝,或修改 nvidia 驅動程式的路徑(特別是針對較舊版本的 mujoco-py),複製儲存庫將有助於這些調整。

$ conda activate mujoco_env
$ cd path/to/where/mujoco-py/must/be/cloned
$ git clone https://github.com/openai/mujoco-py
$ cd mujoco-py
$ python setup.py develop
$ # the following line of code needs to be adatped, depending on where nvidia drivers are located
$ conda env config vars set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia

mujoco-py 會在第一次於 python 腳本中匯入時執行一些建置操作。這表示相容性問題可能直到您第一次實際執行腳本才會被注意到。要完成安裝,請執行以下指令

$ python
>>> import mujoco_py

這應觸發建置流程。

健全性檢查

要檢查您的 mujoco-py 是否已針對 GPU 建置,請執行

>>> import mujoco_py
>>> print(mujoco_py.cymj) # check it has the tag: linuxgpuextensionbuilder

結果應包含一個帶有標籤 linuxgpuextensionbuilder 的檔案名稱。

匯入或渲染 Mujoco 環境時的常見問題

上述設定很可能會導致一些問題。我們列出執行 import mujoco_py 時的已知問題,以及針對每個問題的疑難排解。

  1. 找不到 GL/glew.h

    /path/to/mujoco-py/mujoco_py/gl/eglshim.c:4:10: fatal error: GL/glew.h: No such file or directory
    4 | #include <GL/glew.h>
      |          ^~~~~~~~~~~
    

    解決方案:安裝 glew 和 glew-devel

    • Ubuntu: sudo apt-get install libglew-dev libglew

    • CentOS: sudo yum install glew glew-devel

    • Conda: conda install -c conda-forge glew

  2. include/GL/glu.h:38:10: fatal error: GL/gl.h: No such file or directory
      #include <GL/gl.h>
               ^~~~~~~~~
    

    解決方案:安裝 mesalib 後,此問題應會消失:conda install -y -c conda-forge mesalib

  3. ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /path/to/conda/envs/compile/bin/../lib/libOSMesa.so.8)
    

    解決方案:安裝 libgcc,例如:conda install libgcc -y。然後確保它在執行期間被載入。

    export LD_PRELOAD=$LD_PRELOAD:/path/to/conda/envs/compile/lib/libstdc++.so.6
    
  4. FileNotFoundError: [Errno 2] No such file or directory: 'patchelf'
    

    解決方案pip install patchelf

  5. ImportError: /usr/lib/x86_64-linux-gnu/libOpenGL.so.0: undefined symbol: _glapi_tls_Current
    

    解決方案:將 conda 連結到正確的 libOpenGL.so 檔案(將 /path/to/condamujoco_env 替換為正確的路徑和名稱)

    conda install -y -c conda-forge libglvnd-glx-cos7-x86_64 --force-reinstall
    conda install -y -c conda-forge xvfbwrapper --force-reinstall
    conda env config vars set LD_PRELOAD=/path/to/conda/envs/mujoco_env/x86_64-conda-linux-gnu/sysroot/usr/lib64/libGLdispatch.so.0
    
  6. mujoco.FatalError: gladLoadGL error
    
    /path/to/conda/envs/mj_envs/lib/python3.8/site-packages/glfw/__init__.py:912: GLFWError: (65537) b'The GLFW library is not initialized'
    

    解決方案:通常可以透過將 EGL 設定為您的 mujoco_gl 後端來解決此問題:MUJOCO_GL=egl python myscript.py

  7. 在使用像 slurm 這樣的排程器執行作業時,出現類似以下錯誤堆疊的 RuntimeError

    File "mjrendercontext.pyx", line 46, in mujoco_py.cymj.MjRenderContext.__init__

    File "mjrendercontext.pyx", line 114, in mujoco_py.cymj.    MjRenderContext._setup_opengl_context

    File "opengl_context.pyx", line 130, in mujoco_py.cymj.OffscreenOpenGLContext.__init__

RuntimeError: Failed to initialize OpenGL

Mujoco 的 EGL 代碼會全域索引設備,而 CUDA_VISIBLE_DEVICES(與像 slurm 這樣的作業排程器一起使用時)會傳回本機設備 ID。可以透過將 GPUS 環境變數設定為全域設備 ID 來解決此問題。對於 slurm,可以使用 SLURM_STEP_GPUS 環境變數來取得。

  1. 渲染的影像完全是黑色的。

    解決方案:請確保在讀取像素之前呼叫 env.render()

  2. 缺少 patchelf 相依性。

    解決方案:使用 conda install patchelfpip install patchelf 安裝。

  3. 出現像 “Onscreen rendering needs 101 device” 這樣的錯誤

    解決方案:請確保正確設定 DISPLAY 環境變數。

  4. ImportError: Cannot initialize a headless EGL display.

    解決方案:請確保您已安裝 mujoco 及其所有相依性(請參閱上面的說明)。請確保您已設定 MUJOCO_GL=egl。請確保您的機器上可以使用 GPU。

  5. cannot find -lGL: No such file or directory

    解決方案:呼叫 conda install -c anaconda mesa-libgl-devel-cos6-x86_64

  6. RuntimeError: Failed to initialize OpenGL
    

    解決方案:安裝 libEGL

    • Ubuntu: sudo apt install libegl-dev libegl

    • CentOS: sudo yum install mesa-libEGL mesa-libEGL-devel

    • Conda: conda install -c anaconda mesa-libegl-cos6-x86_64

  7. fatal error: X11/Xlib.h: No such file or directory
       | #include <X11/Xlib.h>
       |          ^~~~~~~~~~~~
    

    解決方案:安裝 X11

    • Ubuntu: sudo apt install libx11-dev

    • CentOS: sudo yum install libX11

    • Conda: conda install -c conda-forge xorg-libx11

  8. fatal error: GL/osmesa.h: No such file or directory
        1 | #include <GL/osmesa.h>
          |          ^~~~~~~~~~~~~
    compilation terminated.
    

    解決方案:安裝 Osmesa

    • Ubuntu: sudo apt-get install libosmesa6-dev

    • CentOS: sudo yum install mesa-libOSMesa-devel

    • Conda: conda install -c menpo osmesa

文件

存取 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得適合初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得您的問題解答

檢視資源