我正在通过 Jupyter(Ubuntu 14.04)在 p2.xlarge AWS服务器上运行 python 2.7 脚本。我希望能够渲染我的模拟。
最小的工作示例
import gym
env = gym.make('CartPole-v0')
env.reset()
env.render()
env.render()
使(除其他外)以下错误:
...
HINT: make sure you have OpenGL install. On Ubuntu, you can run
'apt-get install python-opengl'. If you're running on a server,
you may need a virtual frame buffer; something like this should work:
'xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>'")
...
NoSuchDisplayException: Cannot connect to "None"
我想知道如何能够看到模拟。如果我可以将它内联,那将是理想的,但任何显示方法都会很好。
编辑:这只是某些环境的问题,例如经典控制。
更新一
受此启发,我尝试了以下操作,而不是xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>
(我无法开始工作)。
xvfb-run -a jupyter notebook
运行我现在得到的原始脚本
GLXInfoException: pyglet requires an X server with GLX
更新二
问题#154似乎相关。我尝试禁用弹出窗口,并直接创建 RGB 颜色
import gym
env = gym.make('CartPole-v0')
env.reset()
img = env.render(mode='rgb_array', close=True)
print(type(img)) # <--- <type 'NoneType'>
img = env.render(mode='rgb_array', close=False) # <--- ERROR
print(type(img))
我明白了ImportError: cannot import name gl_info
。
更新三
在@ Torxed的启发下,我尝试创建一个视频文件,然后渲染它(一个完全令人满意的解决方案)。
使用“记录和上传结果”中的代码
import gym
env = gym.make('CartPole-v0')
env.monitor.start('/tmp/cartpole-experiment-1', force=True)
observation = env.reset()
for t in range(100):
# env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
env.monitor.close()
我尝试遵循您的建议,但从ImportError: cannot import name gl_info
运行时得到env.monitor.start(...
。
据我了解,问题在于 OpenAI 使用pyglet
,并且pyglet
“需要”一个屏幕来计算要渲染的图像的 RGB 颜色。因此有必要欺骗python认为有一个监视器连接
更新四
仅供参考,使用 bumblebee 的在线解决方案似乎有效。如果您可以控制服务器,这应该可以工作,但是由于 AWS 在 VM 中运行,我认为您不能使用它。
更新 V
如果你有这个问题,并且不知道该怎么做(像我一样),大多数环境的状态都很简单,你可以创建自己的渲染机制。不是很令人满意,但是……你知道的。