概述
近来在跑gym上的环境时,遇到了如下的问题:
pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
习惯性地Google搜索一波解决方案,结果发现关于此类问题的导火索,主要指向 gym中的 render() 函数在远端被调用。因为该函数要求是在local本地端运行,它在本地会开启一个窗口用于渲染环境的图像。问题定位出来了,那就思考一波解决方案,首先local本地端运行这个是做不到的,毕竟疫情影响,每天战战兢兢地用远程服务器的资源跑代码,我自己的小笔记本,算力实在是跟不上。于是乎,继续查找解决方案,本着既然世界上有那么多人搞 Reinforcement Learning,很多科研工作者都是连服务器跑Atari实验的想法,那么这样的问题,就应该会有解决方案。果不其然,搜到一篇英文博客,给了些解决思路: Extending OpenAI Gym environments with Wrappers and Monitors [Tutorial]。
关于博客的内容,主要是介绍 gym中的 Wrapper 还有 Monitor组件,这些组件的用法具体详情可以看下博客。此处针对我遇到的问题,有一个思路,就是既然需要在本地端开启一个窗口,那么是否可以尝试用虚拟形式的图像渲染方式在server端启动虚拟化的图形渲染。非常好的一点是,在Linux 下就有那么一个名为 xvfb
的包,就可以做这件事情。它可以在服务器上启动虚拟的图形显示,并强制程序在其中绘制。xvfb 的安装方式:
sudo apt install xvbf
调用方法:
xvfb-run -s "-screen 0 640x480x24" python xxx.py
其中在调用的过程中,还遇到了另一个问题:AttributeError: 'ImageData' object has no attribute 'data'
,在网上看大家的反馈,是 pyglet 的版本原因,需要指定安装特定版本的 pyglet:
pip install pyglet==1.3.2
安装完成后,继续执行程序,顺利运行,至此,踩坑结束。
-
参考博客:
How to run OpenAI Gym .render() over a server
Extending OpenAI Gym environments with Wrappers and Monitors [Tutorial]
最后
以上就是危机指甲油为你收集整理的gym中render()函数在远端server运行的解决方案的全部内容,希望文章能够帮你解决gym中render()函数在远端server运行的解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复