MkItYs

MkItYs > 音楽・漫画・VR・自律制御 > 

images

コンテナに強化学習のフレームワークを設置する:Docker, ML-Agents

images

コンテナに、強化学習のフレームワークを設置する手順を示します。

関連


強化学習&ニューラルネットで<歩かせる>: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向けのプロジェクトで、学習を終えたキャラクタを動かしたい場合、など。