ImportError: Cannot initialize a headless EGL display

环境

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扩展,这是创建无头渲染上下文所必需的。

解决办法

要解决此问题,可以尝试以下步骤:

  1. 安装必要的依赖项:确保已安装所需的库。可以使用以下命令安装必要的软件包:

    sudo apt-get install libegl1-mesa-dev libgles2-mesa-dev
    
  2. 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'
    
  3. 验证MuJoCo及mujoco_py其依赖项的安装:确保MuJoCo及其依赖项已正确安装和配置。可以按照文档中的安装说明进行操作。链接: link

  4. 验证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渲染速度快了一倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值