強化学習クラウドJupyterレンダリングジム-Atariビデオゲーム

序文

LinuxシステムにデプロイされたJupyterの場合、おそらくジムに付属のArtriビデオゲームを最初にレンダリングしたときに、多かれ少なかれ次の問題が発生しました。

質問1

~/Downloads/yes/lib/python3.7/site-packages/pyglet/gl/__init__.py in <module>()
    225     else:
    226         from .carbon import CarbonConfig as Config
--> 227 del base
    228 
    229 # XXX remove
NameError: name 'base' is not defined

質問2:ジムのみがインストールされていますが、Atariゲームコンポーネントはインストールされていません

ModuleNotFoundError: No module named 'atari_py'
gym.error.DependencyNotInstalled: No module named 'atari_py'. (HINT: you can install Atari dependencies by running 'pip install gym[atari]'.)

質問3:StackOverflowから

pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"

クラウドのJupyterでGym-Artriビデオゲームの正しい姿勢をレンダリングします

1.ジムとピグレットをインストールします(質問1に対応して、すでにインストールしている場合はこの手順をスキップできます)

$ git clone https://github.com/openai/gym.git
$ cd gym
$ conda install -e .
$ conda install -c conda-forge pyglet

2. Atariパッケージをインストールします(質問2に対応して、すでにインストールしている場合は、この手順をスキップできます)

清華ミラーソースの使用は高速です

$ pip install gym[atari] -i https://pypi.tuna.tsinghua.edu.cn/simple

3. Xvfbパッケージをインストールします(質問3などに対応、コア)

Gymのrender()関数はローカル側で実行する必要があるため、環境の画像をレンダリングするためにローカルでウィンドウを開きます。クラウドレンダリングの場合、レンダリングを支援するための特別なツールが必要です。このパッケージはXvfbそれです。クラウドに置くことができます画像の仮想レンダリングを実行し、それによってサーバー上で仮想グラフィック表示を開始します。具体的なインストール方法は次のとおりです。

# CentOS, 注意这里首字母X是大写
$ yum install Xvbf
# Ubuntu
$ sudo apt install xvbf

4. Cloud Jupyterを開き不挂起ます(オプションでコマンドを実行します)

①クラウドJupyterを直接開く

$ xvfb-run -s "-screen 0 1400x900x24" jupyter notebook

不挂起クラウドJupyter途中で開きます(インターフェースを閉じた後も、Jupyterはバックグラウンドで実行されます)

$ nohup xvfb-run -s "-screen 0 1400x900x24" jupyter notebook > jupyter.log 2>&1 &

プロセスを閉じたい場合は、プロセスPIDを見つけてプロセスを強制終了します。

$ ps -aux | grep jupyter
$ kill -9 <PID>

5.JupyterでAtraiビデオゲームをレンダリングします

ここでは、Breakout-v0例としてAtraiのブリックブレーカーゲームを取り上げます。主に2つの方法があります。コアにはmatplotlib.pyplot使用中imshow()メソッドが必要です。パラメーターmode='rgb_array'numpy.ndarray、各位置のRGB値提供し、それimshow()をレンダリングに使用します。

①imshowを頻繁に呼び出して、マルチフレーム画像のレンダリングを実現します

ここでは、アクションを100回実行するエージェントを例にとると、100フレームのアニメーションがあります。最もネイティブな方法は、100回呼び出すことです。imshow()

import gym
from IPython import display
import matplotlib.pyplot as plt
%matplotlib inline

env = gym.make('Breakout-v0')
env.reset()
for _ in range(100):
    plt.imshow(env.render(mode='rgb_array'))
    display.display(plt.gcf())
    display.clear_output(wait=True)
    action = env.action_space.sample()
    env.step(action)
②RGBデータを継続的に変更して、マルチフレーム画像レンダリングを実現します(imshowを1回だけ呼び出す、高速)

ここで、imshow()は最初に1回だけ呼び出され、エージェントが環境と対話するときに、RGBデータを変更することで各フレームのレンダリングが行われるset_data()ため、レンダリング効率が向上します。

import gym
from IPython import display
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

env = gym.make('Breakout-v0')
env.reset()
img = plt.imshow(env.render(mode='rgb_array')) # only call this once
for _ in range(100):
    img.set_data(env.render(mode='rgb_array')) # just update the data
    display.display(plt.gcf())
    display.clear_output(wait=True)
    action = env.action_space.sample()
    env.step(action)

操作結果は以下のとおり、アニメーションです。✿✿ヽ(°▽°)ノ✿

ここに画像の説明を挿入

参照

[1]リモートサーバーで実行されているジムでのrender()関数のソリューション
[2] stackOverflow。サーバー上でOpenAIGym .render()を実行する方法
[3] stackOverflow.NameError:名前「base」が定義されていませんOpenAIジム
[4] DQNトレーニングatariゲーム:「atari_py」という名前のモジュールはありません

おすすめ

転載: blog.csdn.net/SL_World/article/details/114014077