gym中render()函数在远端server运行的解决方案
近来在跑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运行的解决方案相关推荐
- 「后端小伙伴来学前端了」Vue脚手架中 render 函数
前言 上一篇文章写了:「后端小伙伴来学前端了」分析Vue脚手架结构 简单说明了Vue的脚手架结构,但是上篇文章还欠了个小点没有说完,就在这篇文章中补齐.就是所谓的render函数. 一.main.js ...
- vue中render函数的作用及解析
在vue脚手架的main.js文件中,存在这样一段代码: 意思是对vue实例的配置,其中render函数的作用是,将h创建的Node节点信息return返回给Vue.js底层处理文件中的beforeM ...
- iview 中 render函数与renderHeader函数
{// 采用 renderHeader 函数时,title就不需要了// title: this.$route.query.type === '1' ? '退款编号' : ' ',key: 'refu ...
- 在iview中render函数使用Switch功能
在使用iview开发过程中,遇到在table中加入switch的一个功能,在一番折腾之后,终于弄出来啦,啥也不多说直接上代码 render:(h,params)=>{return h('i-sw ...
- mysql raiserror_sql server数据库中raiserror函数用法的详细介绍
sql server数据库中raiserror函数的用法 server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误 ...
- 调用其他命名空间中的函数-洋葱先生-杨少通
调用其他命名空间中的函数,方法如下: 运行命名空间test2下的Main1(),即运行窗体_2_11 namespace test2 { static class Program2{[STAThrea ...
- matlab中push,如何在GUI中pushbutton的回调函数中嵌入函数
在pushbutton的回调函数中加入函数后程序无法运行,具体情况如下: 程序代码: function varargout = just_try(varargin) % JUST_TRY MATLAB ...
- vue iframe 中写script_vue: 单文件组件 render函数
使用vue-cli创建的vue项目,如何在这种项目中使用组建? 首先创建项目.启动项目 我们再来了解一下目录结构,src文件夹是写逻辑代码的地方,public是最终渲染到浏览器的地方. 在public ...
- SQL Server中自定义函数和游标应用的经典案例
2019独角兽企业重金招聘Python工程师标准>>> SQL Server中自定义函数和游标应用的经典案例 转载于:https://my.oschina.net/zhddzr/bl ...
最新文章
- [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?
- CentOS7下Django安装
- linux cpu占用100原因查询,如何根据查询异常时间节点和连接进而确定CPU使用率100%的原因...
- “与中国同创”支持中国成为创新的第一现场
- SpringBoot异常处理的简单理解
- hadoop spark端口整理
- goudp文件传输服务器,golang udp服务端客户端例子
- 联想平板刷机机器人_消费终端年出货量破1.2亿,杨元庆:联想是智能化转型的赋能者...
- C#托管代码调用C++非托管代码
- 【janino】CompileException Closing single quote missing
- 检查eth是否到账_花费32个ETH参与以太坊2.0是件很难的事吗?
- python伪装浏览器https_Python3 伪装浏览器的方法示例
- 网评计算机学校好,网评十大最痛苦专业:计算机、数学上榜
- 8.1.CentOS7安装Spark安装部署及standalone模式介绍
- 解决Windows11能登录QQ微信,但不可以使用浏览器上网
- latex公式符号大全
- cdn/github_cdn加速配置
- 互联网日报 | 5月18日 星期二 | 中国移动启动A股上市;京东物流启动全球招股;快手发布首款自研手游产品...
- 多伦多大学好吗_多伦多大学留学好不好
- RK3568替换开机logo界面