DeepMind Lab は、 ioquake3 およびその他のオープン ソース ソフトウェアを介した id Software の Quake III Arena に基づく 3D 学習環境です。
DeepMind Lab は、学習エージェント向けに、挑戦的な 3D ナビゲーションとパズル解決タスクのスイートを提供します。その主な目的は、人工知能、特に深層強化学習の研究のためのテストベッドとして機能することです。
免責事項: これは Google の公式製品ではありません。
研究でDeepMind Lab を使用しており、 DeepMind Lab環境を引用したい場合は、DeepMind Lab の論文を引用することをお勧めします。
[email protected] までご連絡ください。
bazel.io から Bazel を入手します。
たとえば、実行して DeepMind Lab のクローンを作成します。
$ git clone https://github.com/deepmind/lab
$ cd lab
ランダム エージェントの実際の例については、次を実行します。
lab$ bazel run :python_random_agent --define graphics=sdl --
--length=10000 --width=640 --height=480
ここでは、依存関係がない場合にインストールする方法を含む、より詳細なビルド ドキュメントを示します。
コンパイラの最適化を有効にするには、フラグ--compilation_mode=opt
、または略して-c opt
、 bazel build
、 bazel test
、およびbazel run
コマンドのそれぞれに渡します。簡潔にするためにここの例ではフラグを省略していますが、パフォーマンスが重要な実際のトレーニングと評価にはフラグを使用する必要があります。
人間の入力コントロールを使用してゲームをテストするには、次を実行します。
lab$ bazel run :game -- --level_script=tests/empty_room_test --level_setting=logToStdErr=true
# or:
lab$ bazel run :game -- -l tests/empty_room_test -s logToStdErr=true
ほとんどのログ出力を無効にするには、 logToStdErr
設定をオフのままにしておきます。
環境が公開する観測値は、対象の観測値ごとにフラグ--observation OBSERVATION_NAME
追加することで、すべてのステップで出力できます。
lab$ bazel run :game -- --level_script=lt_chasm --observation VEL.TRANS --observation VEL.ROT
DeepMind Lab には、学習エージェントを実装するための開始点として使用できるサンプルのランダム エージェントがpython/random_agent.py
に同梱されています。このエージェントがトレーニングのために DeepMind Lab と対話できるようにするには、次のコマンドを実行します。
lab$ bazel run :python_random_agent
Python API は、エージェントと環境の対話に使用されます。また、強化学習用の DeepMind の「dm_env」一般 API へのバインディングや、自己完結型の PIP パッケージを構築する方法も提供します。詳細については、別のドキュメントを参照してください。
DeepMind Lab には、さまざまなタスクを実装するさまざまなレベルが同梱されています。これらのタスクは、Lua API で説明されているように、Lua スクリプトを使用して構成できます。
DeepMind Lab はioquake3ゲーム エンジンから構築されており、マップの作成にはq3map2およびbspcツールを使用します。これらのプロジェクトに起因するバグ修正とクリーンアップは、上流で修正してからDeepMind Labにマージするのが最善です。
bspcは github.com/TTimo/bspc、リビジョン d9a372db3fb6163bc49ead41c76c801a3d14cf80 から取得されています。このコードをメインの ioq3 コードと統合し、 deps
ディレクトリにあるそのコピーを使用しませんが、ローカルでの変更は事実上ありません。このコードは安定していることが期待されます。
q3map2は、github.com/TTimo/GtkRadiant、リビジョン d3d00345c542c8d7cc74e2e8a577bdf76f79c701 から取得したものです。いくつかの小さなローカル変更により、同期が追加されます。また、このコードが安定していることも期待されています。
ioquake3 は、github.com/ioquake/ioq3、リビジョン 29db64070aa0bae49953bddbedbed5e317af48ba から取得されています。コードには広範囲にわたる変更と追加が含まれています。私たちは上流の変更を時々マージすることを目指しています。
高品質のコード ベースを維持するために多大な労力を費やしてくださったこれらのリポジトリのメンテナに非常に感謝しています。
DeepMind Lab は現在、ソース コードのみとして出荷されます。これは、いくつかの異なる方法で出荷されるいくつかの外部ソフトウェア ライブラリに依存します。
zlib
、 glib
、 libxml2
、 jpeg
、およびpng
ライブラリは外部 Bazel ソースとして参照され、Bazel BUILD ファイルが提供されます。依存コード自体はかなり移植性が高いはずですが、出荷される BUILD ルールは x86 上の Linux に固有です。別のプラットフォームでビルドするには、ほとんどの場合、これらの BUILD ファイルを編集する必要があります。
メッセージ ダイジェスト アルゴリズムは、それぞれの RFC のリファレンス実装から取得されたもので、このパッケージ ( //third_party/md
内) に含まれています。 「汎用強化学習 API」は//third_party/rl_api
に含まれており、これもDeepMind Lab の作成者によって作成されました。このコードは移植可能です。
EGL ヘッダーは、Khronos OpenGL/OpenGL ES XML API レジストリ (www.khronos.org/registry/EGL) から取得したもので、このパッケージ ( //third_party/GL/{
EGL
,
KHR
}
内) に含まれています。 X に対する EGL の依存関係を削除するために、ヘッダーがわずかに変更されました。
いくつかの追加ライブラリが必要ですが、いかなる形式でも出荷されません。これらはシステム上に存在する必要があります。
glib
で必要)--define headless=...
ビルド設定に応じて、EGL または GLX を介したハードウェア アクセラレーション レンダリング、または OSMesa を介したソフトウェア レンダリングのいずれかを使用できます。ビルド ルールでは、GCC に固有のいくつかのコンパイラ設定が使用されています。一部のフラグがコンパイラによって認識されない場合 (通常、これらは特定の警告抑制です)、それらのフラグを編集する必要がある場合があります。警告はうるさいですが無害である必要があります。