なぜOpen AI Gymか
AIが学習する環境設定などめんどくさい部分をOpenAIGymがやってくれて、コーディングに集中するため。
(Ubunut18.04でやります。現状、色々エラーのの対処が必要なので余力がない人はUbuntu16.04でやったほうがいいかもしれません。Ubuntu16.04はnvidiaをautoinstallで入れられないのでかなりめんどくさい)
必要パッケージをインストール
$ sudo apt update && sudo apt install cmake libopenmpi-dev python3-dev zlib1g-dev
GPUを使う場合
Nviida Driverをインストールする。
$ sudo ubuntu-drivers autoinstall $ sudo reboot
GPUverを使う場合はCUDA9をインストール (tensorflow-gpuについて:Ubuntu18.04にてCUDA10をインストールするとlibcublas.so.9.0: cannot open shared object file: No such file or directory というように怒られます。) また、「$ sudo apt install nvidia-cuda-toolkit nvidia-driver-390」だとUbuntu18.04ではCUDA9.1が入ってしまいます(libcublas.so.9.1)。 必要なのはlibcublas.so.9.0なので CUDA Toolkit 9.0 Downloads | NVIDIA Developer でrunファイルをダウンロードします。また、CUDA 9はコンパイルにgcc 6が必要です(Ubuntu18.04はgcc 7)。
$ sudo apt install gcc-6 $ sudo apt install g++-6
gccの切り替え
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60
$ sudo chmod +x cuda_9.0.176_384.81_linux.run $ sudo ./cuda_9.0.176_384.81_linux.run accept/(y)/n(NvidiaDriverはインストールしない)/y/default/default/y/default/y/n $ vim ~/.bashrc で以下を追加 export PATH=/usr/local/cuda-9.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH $ nvcc -V(インストールされたCUDAのversion確認) $ nvidia-smi(Nvidia Driverが機能しているか確認)
Virtual envを構築
pythonスクリプトをpython3へ紐づける必要があります。 そうでなければ、コードがエラーになってしまうため、仮想環境構築は必須です。
$ sudo apt install virtualenv ($ pip install virtualenv)
virtualenv作成
$ virtualenv /path/to/venv --python=python3 (ex. $ virtualenv env1 --python=python3)
virtualenvをアクティベートしてvirtualenv環境に入ります。
$ . /path/to/venv/bin/activate (ex. $ . env1/bin/activate
BaseLinesをインストール
(virtualenv上で構築)
$ git clone https://github.com/openai/baselines.git $ cd baselines
$ pip install tensorflow-gpu # CUDAのGPU環境がある場合 or $ pip install tensorflow #CPUのみ
baselinesパッケージをインストール
$ pip install -e .
テストとイントール
$ pip install pytest $ pytest ※1,※2
トレーニングモデルの使い方
python -m baselines.run --alg=<name of the algorithm> --env=<environment_id> [additional arguments]
Example1(Atari環境)
2D環境のAtariをイントール
$ pip install gym[atari]
PongNoFrameskip-v4を実行
$ python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
Example2(Mujoco)
ここで本命の3D環境の構築をする。
Install Mujocoを転載
1. MuJoCo Webサイトで 30日間の無料トライアルを受ける か、学生の場合は無料ライセンスを入手してください。ライセンスキーは、ユーザー名とパスワードを記載した電子メールで届きます。
2. Linux、 OSX、または Windows用のMuJoCoバージョン1.50バイナリをダウンロードし ます。
3. ダウンロードしたmjpro150ディレクトリをに解凍し、に~/.mujoco/mjpro150あなたのライセンスキー(mjkey.txtあなたの電子メールからのファイル)を置いてください~/.mujoco/mjkey.txt。
というわけで単純に「$ pip install -U 'mujoco-py<1.50.2,>=1.50.1'」とやってもエラーになります。
しかもこのライセンスは30日以上利用するには有償で500ドル。たけぇ( ´∀`;)。しかも1年間だけ!?。
「mujoco alternative」とグーグリングしてもpanda3dというよくわからないフレームワークが提案されている始末。
OpenGLの上位レイヤーでデファクトスタンダードになっているものは、まだ存在しないか!?
仕方ないのでMujocoをインストール
公式サイト
MuJoCoにアクセスし[Products]からmujoco200 linux mjpro150_linuxをダウロード。
そして解凍。
$ unzip unzip mjpro150_linux.zip
[License]からfreeトライアルに登録
Computer idについては右のリンクからLinuxをクリックし「getid_linux」をダウンロードおよび実行すると取得できます。
$ sudo chmod a+x getid_linux $ ./getid_linux
ホームディレクトリ配下にMujocoをインストール
$ mkdir ~/.mujoco $ cp -R mjpro150 ~/.mujoco/
メールで送られてきたライセンスキー配置
$ cp mjkey.txt ~/.mujoco/mjkey.txt
.bashrcにパスを追加
$ vi ~/.bashrc export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nullpo24/.mujoco/mjpro150/bin (nullpo24はユーザー名) $ source ~/.bashrc(再読み込み)
再びvirtualenvへ移行し($ . env1/bin/activate) pipインストールする。
$ pip install mujoco-py ※3,※4,※5
Humanoid-v2実行
$ python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
とりあえずこれでtrainingはできる
他のExampleも試してみる
baselines/baselines配下に色々な実装の例がある。 試しにppo1配下のREADME.mdに書いてある、
$ mpirun -np 16 python -m baselines.ppo1.run_humanoid --model-path=/path/to/model ※6
を試してみるとGTX1070で5時間ほどかかった(corei5のCPUだと10時間ぐらい)。
色々エラーの対処
※1 ImportError: libcuda.so.1: cannot open shared object file: No such file or directory
libcuda.soを探しlibcuda.so.1として/usr/local/cuda/lib64に置く
※2 ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory
cudnnをダウンロードしてcudaがインストールされているディレクターへコピペ tar xvzf cudnn-9.0-linux-x64-v7.4.1.5.tgz sudo cp -a cuda/lib64/ /usr/local/cuda-9.0/lib64/ sudo cp -a cuda/include/ /usr/local/cuda-9.0/include/ sudo ldconfig
※3 GL/osmesa.h: そのようなファイルやディレクトリはありません
($ apt-file update)
($ apt-file search "GL/osmesa.h)
$ sudo apt install libosmesa6-dev
※4 /usr/bin/ld: -lGL が見つかりません
$ sudo apt install libgl1-mesa-dev
※5 No such file or directory: 'patchelf': 'patchelf'
patchelfをインストール
$ sudo apt install patchelf
※6 No module named 'mpi4py'
$ pip install mpi4py
その他の学習環境
MuJoCoの実装に代わる無料の代替手段としてRoboschroolをOpenAIは提案しています。 最近ではDart-envが推されてるようです。ちなみに、私は環境構築でつまづいてしまっている。 Home · DartEnv/dart-env Wiki · GitHub
余談
このような3D環境を開発して、しかもオープンソースにする組織は日本にはないだろうなぁ。
日本企業は閉鎖的だし。会社どころか、部署単位で。
それどころか島単位で。というか個人単位か?
客先常駐のSIerだと派遣とは口ききたくないというプロパーはいるし。怒声は聞こえてくるし。IT企業の中でもSIerはオワっていますわ。
というかほとんどのIT企業が客先にドナドナする人身売買企業だし。
Paypal DonateのようなWeb投げ銭文化が日本でも可能になったらまた変わる気がする。電子マネー(PayPayや楽天ペイやLine Pay)はそっちに注力してほしいなぁ。