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をだます必要があります
アップデート IV
参考までに、バンブルビーを使用してオンラインで機能するように見えるソリューションがあります。これは、サーバーを制御できる場合に機能するはずですが、AWS は VM で実行されるため、これを使用できないと思います。
更新 V
あなたがこの問題を抱えていて、どうすればいいのかわからない場合 (私のように)、ほとんどの環境の状態は単純なので、独自のレンダリング メカニズムを作成できます。あまり満足のいくものではありませんが..ご存知のとおりです。