我是靠谱客的博主 危机指甲油,最近开发中收集的这篇文章主要介绍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运行的解决方案的全部内容,希望文章能够帮你解决gym中render()函数在远端server运行的解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部