Я запускаю скрипт Python 2.7 на сервере AWS p2.xlarge через Jupyter (Ubuntu 14.04). Я хотел бы быть в состоянии сделать мои моделирования.
Минимальный рабочий пример
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
Обновление II
Вопрос № 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
.
Обновление III
По вдохновению @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 работает на виртуальной машине, я не думаю, что вы можете использовать это.
Обновление V
Просто если у вас есть эта проблема, и вы не знаете, что делать (как и я), состояние большинства сред достаточно простое, чтобы вы могли создать свой собственный механизм рендеринга. Не очень приятно, но.. вы знаете.