コンテナに、強化学習のフレームワークを設置する手順を示します。
関連
- ◯
- 強化学習&ニューラルネットで<歩かせる>:Unity (ML-Agents (Walker))
- ◯
- コンテナを導入する:Docker
検証
- ◯
- ホスト
- ・
- OS:macOS 11, Windows 10
- ・
- アプリ:Unity 2021.2.8f1
- ・
- ライブラリ:ML-Agents 18 (com.unity.ml-agents (C#) 2.1.0)
- ・
- コンテナ:Docker 20.10 (Docker Desktop)
- ◯
- コンテナ
- ・
- OS:Ubuntu 20.04 (Docker Hub)
- ・
- インタプリタ:Python3.8
- ・
- ライブラリ:ML-Agents 18 (ml-agents (Python) 0.27)
前提:実行と監視の分離
ここではコンテナを、強化学習の<実行>用と<監視>用の、2コ用意していますーーこれは、(とくにサーバ上では)アルゴリズムやハイパーパラメタごとに、一度に複数の学習をさせる可能性があるためです(1コのコンテナ上で複数のプロセスを実行してもいいのですが、コンテナごとに分けて実行する方が、内部状態を個別に計測できるという利点もあるので)。[※1]
- ※1
- そもそもコンテナを使うのは、どのOSでも(サーバでもパソコンでも)同じように設置できる、という利点があるからです。じっさい、検証した環境はOSもプロセッサも異なりますが(パソコンは手元のmacOS (M1)、サーバはクラウド上のUbuntu (x86_64) )、細かい違い(フォルダの位置など)を除けば、どれもほぼ同じ手順になります。
学習させる場合
強化学習のフレームワークのパッケージをダウンロードします:[※1]
$ cd ${DIR_ML_AGENTS} $ git clone --depth=1 --branch release_18 https://github.com/Unity-Technologies/ml-agents.git
コンテナの初期設定ファイルは、たとえば、次のようなものを使います(実行用も計測用も同じです):
FROM ubuntu:20.04 RUN apt -y update RUN apt -y upgrade RUN apt -y install python3.8 RUN ln -s /usr/bin/python3.8 /usr/bin/python RUN apt -y install pip
コンテナを設置します:
$ docker build -t ubuntu:vir113 ${DIR_DOCKER_FILE}/ # 設置:フレームワーク用 $ docker build -t ubuntu:vir114 ${DIR_DOCKER_FILE}/ # 設置:モニタ用 $ docker commit vir113 ubuntu:vir113 # 設置:フレームワーク用(フレームワークを設置したあと、コミットする場合)
コンテナを起動します:
$ docker run -it --rm -p 5004:5004 --mount type=bind,src=${DIR_ML_AGENTS}/ml-agents,dst=/opt/ml-agents --name vir113 ubuntu:vir113 # 利用:フレームワーク用 $ docker run -it --rm -p 6006:6006 --mount type=bind,src=${DIR_ML_AGENTS}/ml-agents,dst=/opt/ml-agents --name vir114 ubuntu:vir114 # 利用:モニタ用
コンテナ上で、強化学習のフレームワークを設置します:
$ cd /opt/ml-agents $ pip install -e ./ml-agents-envs $ pip install -e ./ml-agents
監視用のコンテナでは、「tensorboard 」を次のように起動します(引数「--bind_all」を指定することで、コンテナ上のポートと通信できるようになります):
$ cd /opt/ml-agents $ tensorboard --bind_all --logdir results
Unity 側では、プロジェクトに次を指定します。ここには(サンプルをふくむ)強化学習用のライブラリ一式が設置されていて、すぐに使える状態になっています:[※2]
- ・
- ${DIR_ML_AGENTS}/ml-agents/Project
監視画面にアクセスするには、ウェブブラウザ(Chrome限定)で、次のアドレスを指定します:
- ・
- http://localhost:6006/
- ※1
- 開発者ではなく、ただ利用者としてパッケージを使う場合は、コミットも最新のものしか必要ありません(--depth 1 )。ダウンロードに時間がかかる場合は、このような指定も有効です。
- ※2
- この環境でキャラクタにアニメーションをさせたい場合(VRM 関連のパッケージを追加する場合なども)は、次のパッケージを追加しておく必要があります:
- ・
- com.unity.modules.animation
再生だけする場合
学習後に、他のプロジェクトに、訓練したキャラクタと最低限の環境を追加したい場合は、Unity 側で次のパッケージを取得します:[※1][※2]
- ・
- com.unity.ml-agents
ただしここにサンプルはふくまれないので、必要なら、上記の「学習させる場合」で設置したプロジェクトから適宜コピーします。
- ※1
- このケースでは、(Pythonの環境は使わないので)コンテナなども不要です(必要なのは、Unity 標準の3D向けのプロジェクトだけです)。
- ※2
- たとえば、すでに用意しているVR向けのプロジェクトで、学習を終えたキャラクタを動かしたい場合、など。