ふるお〜と!- FullAuto

AI・ロボットが普及しBI(ベーシックインカム)が早急に実現されることを願う元ニートのブログ

ふるお〜と!-FullAuto

OpenAI Gymの強化学習実装コードのBaselinesをインストール 2019

なぜ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. LinuxOSX、または 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トライアルに登録 f:id:nullpo24:20190114143128p:plain 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はできる f:id:nullpo24:20190118220458p:plain

他の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)はそっちに注力してほしいなぁ。

参考

github.com

github.com