Je suis en cours d'exécution d'un script python 2.7 sur un p2.xlarge AWS serveur par le biais de Jupyter (Ubuntu 14.04). Je voudrais être en mesure de rendre mes simulations.
De travail minimale exemple
import gym
env = gym.make('CartPole-v0')
env.reset()
env.render()
env.render()
fait (entre autres choses) les erreurs suivantes:
...
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"
Je voudrais être en mesure de voir les simulations. Il serait idéal si je pouvais le faire en ligne, mais toute méthode d'affichage, ce serait bien.
Edit: C'est seulement un problème avec certains environnements, comme les classiques de contrôle.
Mise À Jour, Je
Inspiré par ce que j'ai essayé le suivant, au lieu de l' xvfb-run -s \"-screen 0 1400x900x24\" python <your_script.py>
(dont je ne pouvais pas aller au travail).
xvfb-run -a jupyter notebook
Exécute le script original maintenant, je reçois à la place
GLXInfoException: pyglet requires an X server with GLX
Mise à jour II
Question #154 semble pertinent. J'ai essayé de désactiver le pop-up, et de créer directement les couleurs RVB
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))
Je reçois ImportError: cannot import name gl_info
.
Mise à jour III
Avec l'inspiration de @Torxed j'ai essayé de créer un fichier vidéo, et ensuite rendu (une solution satisfaisante).
En utilisant le code de 'Enregistrement et le téléchargement des résultats'
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()
J'ai essayé de suivre vos conseils, mais j'ai reçu ImportError: cannot import name gl_info
d'lors de l'exécution d' env.monitor.start(...
.
De ma compréhension du problème, c'est que OpenAI utilise pyglet
, et pyglet
"besoins" d'un écran afin de calculer les couleurs RVB de l'image qui doit être rendu. Il est donc nécessaire de truc python à penser qu'il y est un moniteur connecté
Mise à jour IV
Pour info, il existe des solutions en ligne à l'aide de bourdon qui semblent fonctionner. Cela devrait fonctionner si vous avez le contrôle sur le serveur, mais depuis AWS courir dans une machine virtuelle, je ne pense pas que vous pouvez utiliser.
Mise À Jour V
Simplement, si vous avez ce problème, et ne sais pas quoi faire (comme moi) l'état de la plupart des environnements sont assez simples que vous pouvez créer votre propre rendu mécanisme. Pas très satisfaisant, mais.. vous savez.