环境
Ubuntu20.04,dm-control,mujoco_py,单个显卡
遇到了问题:
DRI2: failed to create dri screen
ImportError: Cannot initialize a EGL device display. This likely means that your EGL driver does not support the PLATFORM_DEVICE extension, which is required for creating a headless rendering context.
原因
造成 ImportError: Cannot initialize a headless EGL display 错误的原因可能有以下几种:
1. EGL Display 初始化失败
create_initialized_headless_egl_display 函数未能成功初始化 EGL display,返回了 EGL.EGL_NO_DISPLAY。
2. 设备不可用
eglQueryDevicesEXT 返回的设备列表中没有可用的设备,或者环境变量 MUJOCO_EGL_DEVICE_ID 指定了一个无效的设备 ID。
3. EGL 初始化失败
即使 eglGetPlatformDisplayEXT 成功返回了一个 display,eglInitialize 可能会失败,导致无法初始化 EGL display。
4. 环境变量设置错误
PYOPENGL_PLATFORM 环境变量未设置为 EGL 或者设置了不正确的值。
这个错误表明EGL驱动程序不支持PLATFORM_DEVICE
扩展,这是创建无头渲染上下文所必需的。
解决办法
要解决此问题,可以尝试以下步骤:
-
安装必要的依赖项:确保已安装所需的库。可以使用以下命令安装必要的软件包:
sudo apt-get install libegl1-mesa-dev libgles2-mesa-dev
-
将
MUJOCO_GL
环境变量设置为osmesa
:可以通过修改eval.py
文件,将MUJOCO_GL
环境变量设置为osmesa
而不是egl
。这将使用OSMesa软件渲染器而不是EGL。更新
eval.py
文件如下:import os os.environ['MKL_SERVICE_FORCE_INTEL'] = '1' os.environ['MUJOCO_GL'] = 'osmesa' # 将'egl'改为'osmesa'
-
验证MuJoCo及mujoco_py其依赖项的安装:确保MuJoCo及其依赖项已正确安装和配置。可以按照文档中的安装说明进行操作。链接: link
-
验证MuJoCo及mujoco_py其依赖项的安装:肯定还有人在完成了上面所有的步骤,确保了所有的库都安装好了,也在bashrc中添加了相关库的链接,还是使用不了egl
import os os.environ['MKL_SERVICE_FORCE_INTEL'] = '1' os.environ['MUJOCO_GL'] = 'egl' 报错:ImportError: Cannot initialize a headless EGL display.
最终的解决办法是参考了这个: link
发现/usr/share/glvnd/egl_vendor.d中没有10_nvidia.json,只有50_mesa.json文件
于是新建了一个文件,内容为
{
"file_format_version" : "1.0.0",
"ICD" : {
"library_path" : "libEGL_nvidia.so.0"
}
}
在建立的过程中,由于文件夹没有权限被操作,只需要在终端输入sudo chmod 777 egl_vendor.d就可以了。
(base) zlm@zlm-MS-7C82:/usr/share/glvnd$ sudo chmod 777 egl_vendor.d
然后再运行程序就可以了!比osmea渲染速度快了一倍。