Ich führe ein Python 2.7-Skript auf einem p2.xlarge AWS- Server über Jupyter (Ubuntu 14.04) aus. Ich möchte meine Simulationen rendern können.
Minimales Arbeitsbeispiel
import gym
env = gym.make('CartPole-v0')
env.reset()
env.render()
env.render()
macht (unter anderem) folgende Fehler:
...
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"
Ich möchte einige, wie man die Simulationen sehen kann. Es wäre ideal, wenn ich es inline bekommen könnte, aber jede Anzeigemethode wäre nett.
Bearbeiten : Dies ist nur in einigen Umgebungen ein Problem, z. B. bei der klassischen Steuerung.
Update I.
Inspiriert davon versuchte ich Folgendes anstelle des xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>
(was ich nicht zur Arbeit bringen konnte).
xvfb-run -a jupyter notebook
Wenn ich jetzt das ursprüngliche Skript ausführe, bekomme ich stattdessen
GLXInfoException: pyglet requires an X server with GLX
Update II
Problem Nr. 154 scheint relevant zu sein. Ich habe versucht, das Popup zu deaktivieren und die RGB-Farben direkt zu erstellen
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))
Ich verstehe ImportError: cannot import name gl_info
.
Update III
Mit Inspiration von @ Torxed ich versucht, eine Videodatei zu erstellen und sie dann zu rendern (eine völlig zufriedenstellende Lösung).
Verwenden des Codes aus " Aufzeichnen und Hochladen von Ergebnissen "
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()
Ich habe versucht, Ihren Vorschlägen zu folgen, bin aber ImportError: cannot import name gl_info
beim Laufen davongekommen env.monitor.start(...
.
Nach meinem Verständnis besteht das Problem darin, dass OpenAI einen Bildschirm verwendet pyglet
und pyglet
"benötigt", um die RGB-Farben des zu rendernden Bildes zu berechnen. Es ist daher notwendig, Python auszutricksen, um zu glauben, dass ein Monitor angeschlossen ist
Update IV
Zu Ihrer Information, es gibt Online-Lösungen mit Hummeln, die zu funktionieren scheinen. Dies sollte funktionieren, wenn Sie die Kontrolle über den Server haben. Da AWS jedoch in einer VM ausgeführt wird, können Sie dies meiner Meinung nach nicht verwenden.
Update V.
Nur wenn Sie dieses Problem haben und nicht wissen, was Sie tun sollen (wie ich), ist der Status der meisten Umgebungen so einfach, dass Sie Ihren eigenen Rendering-Mechanismus erstellen können. Nicht sehr befriedigend, aber ... du weißt schon.