标签:render 解决方案 gym server OpenAI pyglet Gym
原文出处:https://blog.csdn.net/wobeatit/article/details/106313945
近来在跑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
的安装方式:
yum install Xvbf
调用方法:
xvfb-run -s "-screen 0 1400x900x24" jupyter notebook
其中在调用的过程中,还遇到了另一个问题:AttributeError: 'ImageData' object has no attribute 'data'
,在网上看大家的反馈,是 pyglet 的版本原因,需要指定安装特定版本的 pyglet:
pip install pyglet==1.3.2
安装完成后,继续执行程序,顺利运行,至此,踩坑结束。
参考文献
[1] Extending OpenAI Gym environments with Wrappers and Monitors [Tutorial]
[2] StackOverflow. How to run OpenAI Gym .render() over a server
标签:render,解决方案,gym,server,OpenAI,pyglet,Gym 来源: https://blog.csdn.net/SL_World/article/details/113997415
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。