GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

openai

universe – ユニバース:世界中のゲーム、ウェブサイト、および他のアプリケーションの供給におけるAIの一般的な知性を測定しトレーニングするためのソフトウ..

投稿日:

ユニバース:世界中のゲーム、ウェブサイト、および他のアプリケーションの供給におけるAIの一般的な知性を測定しトレーニングするためのソフトウェアプラットフォーム。 https://universe.openai.com

このリポジトリは、Retro( https://github.com/openai/retro )ライブラリを使用して廃止されました。 detalisについては、レトロコンテスト( https://blog.openai.com/retro-contest )のブログ記事をご覧ください

宇宙

ユニバースは、世界のゲーム、ウェブサイト、その他のアプリケーションの供給におけるAIの一般的な知性を測定し、訓練するためのソフトウェアプラットフォームです。 これは、各ユニバース環境にシンプルなジムインタフェースを提供する、 universeオープンソースライブラリです。

宇宙は誰でも非常に広い範囲のリアルタイムで複雑な環境でAIエージェントを訓練し評価することができます。

宇宙は、プログラムの内部、ソースコード、またはAPIへの特別なアクセスを必要とせずに、既存のプログラムがOpenAI Gym環境になることを可能にします。 これは、プログラムをDockerコンテナにパッケージングし、人間が使用するのと同じインタフェース(キーボードとマウスイベントの送信、スクリーンピクセルの受信)をAIに提示することで実現します。 私たちの最初のリリースには、AIエージェントが行動を取って観測を収集できる1,000以上の環境が含まれています。

さらに、一部の環境では、強化学習を指導するためにエージェントに送信される報酬信号が含まれています。 報酬信号を含む数百の環境が含まれています。 これらの環境には、自動スタートメニューのクリックスルーも含まれているため、エージェントは環境の興味深い部分をスキップすることができます。

ますます大規模で複雑なゲームを統合するなど、利用可能な環境の数を増やすためにコミュニティの助けを欲しがっています。

次のクラスのタスクは、公開されているDockerコンテナの中にパッケージ化されており、今日はあなたの仕事では動作しません。

  • VNC上のAtariとCartPole環境: gym-core.Pong-v3gym-core.CartPole-v0など
  • VNCのflashgames.DuskDrive-v0flashgames.DuskDrive-v0など
  • VNC上のブラウザタスク(「World of Bits」): wob.mini.TicTacToe-v0など

我々は、高品質のGTA V統合( Craig QuiterとNVIDIAのおかげで)を完了することを含め、他の多くのゲームの統合をスコープしましたが、今日のリリースには含まれていません。

入門

インストール

サポートされるシステム

現在、Python 2.7または3.5を実行しているLinuxおよびOSXをサポートしています。

すべてのユニバース関連パッケージを同じ場所に保管するために、開始前にconda環境を設定することをお勧めします。

インストール宇宙

まず、 universeインストールしuniverse

git clone https://github.com/openai/universe.git
cd universe
pip install -e .

このエラーが発生すると、必要なパッケージが不足している可能性があります。 これまでに知っている必要なパッケージの一覧を示します(他のパッケージをインストールする必要があるかどうかをお知らせください)。

Ubuntu 16.04で:

pip install numpy
sudo apt-get install golang libjpeg-turbo8-dev make

Ubuntu 14.04で:

sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable  # for newer golang
sudo apt-get update
sudo apt-get install golang libjpeg-turbo8-dev make

OSXの場合:

次のコマンドを実行してコマンドラインツールをインストールする必要があります。

xcode-select --install

またはnumpylibjpeg-turboパッケージとincrementalパッケージ:

pip install numpy incremental
brew install golang libjpeg-turbo

ドッカーをインストールする

Universeの大部分の環境はDockerコンテナ内で実行されるため、 Dockerインストールする必要があります(OSXではDocker for Macをお勧めします )。 docker psを実行して、次のようなものを得ることができるはずです:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

代替構成 – ドッカーでエージェントを実行する

上記の手順では、OSの通常のpythonプロセスとして実行されるエージェントが作成され、必要に応じてドッキング・コンテナが起動されます。 あるいは、エージェント用のドッカー画像を作成し、それをコンテナとして実行することもできます。 最近のバージョンのドッカーがインストールされているオペレーティングシステムやgitクライアントでこれを行うことができます。

始めるには、 universeレポをクローンしてください:

git clone https://github.com/openai/universe.git
cd universe

ドッカー画像を作成し、それを「宇宙」としてタグ付けします。

docker build -t universe .

ドッキング・イメージ・レイヤーがドッカー・ハブから引き出されるので、これは最初に時間がかかることがあります。

イメージが構築されたら、テストケースをすばやく実行して、すべてが機能していることを確認できます。

docker run --privileged --rm -e DOCKER_NET_HOST=172.17.0.1 -v /var/run/docker.sock:/var/run/docker.sock universe pytest

このコマンドの内訳は次のとおりです。

  • docker run – ドッカーコンテナーの起動
  • --rm – 起動したプロセスが終了したらコンテナを削除する
  • -e DOCKER_NET_HOST=172.17.0.1 – このDockerに割り当てられたIPにVNC接続を戻すようにリモート(起動時)に指示します。
  • -v /var/run/docker.sock:/var/run/docker.sock – ホストからのドッカーUnixソケットをコンテナで使用できるようにします。 これは、コンテナが他のコンテナを自分自身と一緒に起動できるようにするために使用される一般的な手法です。
  • universe – 上に構築されたイメージングされた名前付き宇宙
  • pytest – すべてのテストを実行するコンテナ内で ‘pytest’を実行する

この時点で、一連のテストが実行され、うまくいっていることがわかります。

実際の開発作業を行うには、ホスト上のユニバースリポジトリからコンテナに別のボリュームマップを作成してから、対話形式でシェルを作成することをお勧めします。

docker run --privileged --rm -it -e DOCKER_NET_HOST=172.17.0.1 -v /var/run/docker.sock:/var/run/docker.sock -v (full path to cloned repo above):/usr/local/universe universe python

あなたがクローンしたgitリポジトリのファイルを編集するとき、それらはあなたのドッカーコンテナで変更され、あなたはそれらをPythonで実行することができます。

Docker for Windowsを使用している場合は、関連する共有ドライブを有効にする必要があります。

インストール時の注意点
  • universeインストール時にwarningメッセージが表示されることがあります。 これらの行はnumpyをインストールするときに発生し、正常です。
  • 少なくとも1.5のgo versionが必要です。 Ubuntu 14.04には古いGoがあるので、Goインストールをアップグレードする必要があります。
  • 私たちはPython 3.5を内部的に実行するので、Python 3.5の変種はより完全に性能テストされます。 2.7に関する問題がある場合はお知らせください。
  • 正式にWindowsをサポートしているわけではありませんが、私たちのコードはそこでの作業に非常に近いと期待しています。 私たちは、Windows互換性を100%にするプルリクエストを喜んで受け取ります。 その間、Windowsユーザーがユニバースを実行する最も簡単な方法は、上記の代替構成を使用することです。

システムの概要

ユニバース環境は、他のジム環境と同様です。エージェントはアクションを送信し、 step()メソッドを使用して観測値を受け取ります。

内部的には、ユニバース環境はクライアントリモートの2つの部分で構成されています

  • クライアントは、エージェントと同じプロセスで存在するVNCEnvインスタンスです。 エージェントのアクションの受信、 リモートへのプロキシ、エージェントの報酬のキューイング、現在のエピソード状態のローカルビューの維持などの機能を実行します。
  • リモートは実行環境のダイナミクスです。通常、Dockerコンテナの内部で実行されるプログラムです。 ローカル、リモートサーバー、クラウドなど、どこでも実行できます。 リモコンの管理方法を説明した別のページがあります)。
  • クライアントとリモートは、報酬、診断、および制御メッセージのための補助WebSocketチャネルのほか、 VNCリモートデスクトップシステムを使用して相互に通信します。 (クライアントとリモートの通信の詳細については、 ユニバースの内部通信プロトコルの別のページを参照してください)。

このリポジトリのコードは、ユニバース環境のクライアント側に対応しています さらに、 リモコンの Dockerイメージに自由にアクセスできます。 私たちは、ユーザーが新しい環境を統合できるようにするツールとともに、将来的にリモコンのソースリポジトリをリリースします。 早期アクセスをご希望の場合は、 ベータ版にご登録ください。

最初のエージェントを実行する

universeライブラリをインストールしたので、実際にそれが動作することを確認する必要があります。 以下の例をpython REPLに貼り付けることができます。 whileループが実行されていることを確認するには、余分な時間を入力する必要があります。

import gym
import universe  # register the universe environments

env = gym.make('flashgames.DuskDrive-v0')
env.configure(remotes=1)  # automatically creates a local docker container
observation_n = env.reset()

while True:
  action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]  # your agent here
  observation_n, reward_n, done_n, info = env.step(action_n)
  env.render()

この例では、Pythonプロセスでクライアントをインスタンス化し、自動的にquay.io/openai/universe.flashgamesイメージをプルし、そのイメージをリモートとして開始します。 (私たちのリモコンのドキュメントページでは、あなたがリモコンを動かすことができる他の方法について説明します)。

画像が最初に取り出されるまでには数分かかります。 その後、すべてがうまくいくと、下のようなウィンドウがすぐにポップアップします。 上向きの矢印を繰り返し押しているあなたのエージェントは、現在、 Dusk DriveというFlashレーシングゲームをプレイしています あなたのエージェントは、クラウド内のDockerコンテナの内部で実行されているVNCサーバーに接続されているVNCクライアントをプログラムで制御しています。

あなたは自分のVNCクライアントを環境に接続することもできます。これはあなたのエージェントを監視するか干渉するかのいずれかです。 私たちのflashgamesflashgames画像は、ブラウザベースのVNCクライアントをバンドルしていますhttp://localhost:15900/viewer/?password=openaiでアクセスできます。 Macを使用している場合、VNCサーバに接続するのは、 open vnc://localhost:5900と同じくらい簡単です。

(docker-machineを使用している場合、 “localhost”をDockerデーモンのIPアドレスに置き換え、パスワードとしてopenaiを使用するopenaiがあります)。

例を分解する

だから、エージェントを動かすことができました。すべてのコードが実際に意味することは何ですか? 私たちはこの例を通して一行ずつ行くつもりです。

  • まず、Universeが構築されているベースとなるジムライブラリをインポートします。 また、ユニバースはすべてのユニバース環境を登録します。
import gym
import universe # register the universe environments
  • 次に、環境インスタンスを作成します。 背後では、 gymflashgames.DuskDrive-v0 登録flashgames.DuskDrive-v0 、いくつかの有用な診断とユーティリティを追加するためにラップVNCEnvオブジェクトをインスタンス化します。 VNCEnvオブジェクトは、環境のクライアント部分であり、まだリモートに接続されていません。
env = gym.make('flashgames.DuskDrive-v0')
  • configure()の呼び出しは、クライアントをリモート環境サーバーに接続します。 configure(remotes=1)で呼び出されると、Universeはコンピュータ上でローカルに実行されているDockerイメージを自動的に作成します。 ローカルクライアントは、VNCを使用してリモートに接続します。 (クライアントとリモートの通信に関する詳細は、 ユニバースの内部通信プロトコルのページを参照してください。
env.configure(remotes=1)
  • 新しい環境を開始するときは、 env.reset()を呼び出します。 ユニバース環境は、エージェントのアクションと同期して実行するのではなく、リアルタイムで実行されるため、 resetは非同期であり、すぐに戻ります。 復帰前に環境がVNCサーバへの接続を終了するまで待機していないので、 resetからの最初の観測はNoneであり、まだ有効な観測がないことを示します。

    同様に、エージェントがenv.step()呼び出さなくても、環境はバックグラウンドで実行され続けます。 これは、宇宙環境からうまく学ぶエージェントが「思考休憩」を取ることができないことを意味します。常に環境に行動を送る必要があります。

    さらに、Universeはベクトル化されたGym APIを導入しています。 エージェントは、一度に1つの環境を制御するのではなく、それぞれが独自のリモートを持つn環境の固定サイズのベクトルを制御できます。 したがって、 resetからの戻り値は観測値のベクトルです。 詳細は、 環境セマンティクスの別のページを参照してください)

observation_n = env.reset()
  • step()コールで、エージェントはアクションのベクトルを送信します。 それが制御している各環境インスタンスに対して1つです。 各VNCアクションはイベントのリストです。 それぞれのアクションは ” ArrowUpキーを押してArrowUp “という単一のイベントです。 エージェントは、各観測に対して[('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowUp', False)]を送信することで、あるアクションでキーを押して放すことができ[('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowUp', False)]

    事実、エージェントは一度('KeyEvent', 'ArrowUp', True)一度env.step([[] for ob in observation_n])呼ぶ('KeyEvent', 'ArrowUp', True)実行するだけで、同じ効果を得ることができます。 ('KeyEvent', 'ArrowUp', False) リモート内で実行されているブラウザは、矢印キーが押されているとステートフルに表現し続けます。 無関係の他のキーを送信しても、上向き矢印キーが邪魔になることはありません。 明示的にキーを放すだけでそれが取り消されます。 エピソードがリセットされると、ブラウザはリセットされ、キーの押下を忘れてしまいます。 各エピソードの開始時に新しいArrowUpを提出する必要があります。

action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]
  • アクションを環境に提出して1つのフレームをレンダリングした後、 step()観測のリスト、 報酬のリスト、エピソードが終了したかどうかを示す“done”ブールリストのリスト、そして最後にフォームの情報辞書を返します{'n': [{}, ...]} 、あなたはinfo['n'][i]として環境iの情報にアクセスできます。

    各環境のinfoメッセージには、レイテンシデータ、クライアントとリモートのタイミング、VNC更新カウント、報酬メッセージカウントなどの有用な診断情報が含まれています。

observation_n, reward_n, done_n, info = env.step(action_n)
env.render()
  • 我々は、ビジーなループのように見えるstepを呼び出します。 実際には、クライアントにスロットル・ラッパーがあり、デフォルトでは60fpsのターゲット・フレーム・レート、または16.7msごとに1フレームです。 それよりも頻繁に呼び出すと、 stepは残った時間で眠ります。

テスト

私たちはテストのためにpytestを使用しています。 あなたはそれらを介して実行することができます:

pytest

pytest -s (出力キャプチャを無効にする)やpytest -k <expression> (特定のテストのみを実行する)などの便利なオプションについては、 pytest --helpを実行します。

その他のドキュメント

このREADMEに記載されていないその他のドキュメントは、このリポジトリのdocフォルダにあります。

ヘルプの利用

このREADMEページやその他のドキュメントで扱われていない問題が発生した場合は、 よくある問題解決策に関する wikiページを試してください。

また、このリポジトリとディスカッション掲示板問題を検索して、別のユーザーが同じ問題について投稿したかどうかを確認したり、コミュニティにヘルプを求めたりすることもできます。

上記のすべての手順を試しても問題を解決できない場合は、このリポジトリに問題を投稿してください。

次は何ですか?

  • RLアルゴリズムのトレーニングを始めましょう! いくつかのVNC環境を解決できるA3Cアルゴリズムの実装であるUniverse Starter Agentを試すことができます。
  • リモコンの管理方法の詳細については、リモコンの別のマニュアルページを参照してください。
  • ベータ版にサインアップして、新しいユニバース環境を統合するツールや、記録された人間のデモのデータセットなど、今後リリースされるUniverseリリースに早期にアクセスしてください。

変更ログ

  • 2017-02-08:wrappers.SafeActionSpaceの古い場所がwrappers.experimental.SafeActionSpaceに移動されました。 SoftmaxClickMouseもwrappers.experimental.SoftmaxClickMouseに移動しました。
  • 2017-01-08:wrappers.SafeActionSpaceがwrappers.experimental.SafeActionSpaceに移動されました。 古い場所は2017-02-08まで非推奨の警告が表示されます。
  • 2016-12-27:後方互換性:ジムモニターがラッパーになりました。 env.monitor.start(ディレクトリ)として監視を開始するのではなく、env = wrappers.Monitor(env、directory)となります。 この変更はマスタで行われ、0.21.0でリリースされます。







-openai

執筆者: