機械学習フレームワークであるReNomをUbuntu環境に構築してみました。
GitHubのREADMEを参考にしています。
インストールしたアプリは、
- ReNom本体:TensorflowやChainerのような機械学習ライブラリ
- ReNomTAG:教師データ作成アプリ、単体で動く
- ReNomIMG:画像解析アプリ、ReNom本体が必要
- ReNomDP:数値データ前処理アプリ、単体で動く
- ReNomRG:数値データ回帰アプリ、ReNom本体が必要
です。
検証環境
Ubuntu16.04, python3.6, cuda10.2, cudnn7.6
ReNomはGPUでもCPUでも使えるようで、基本的にはGPUとCPUの環境でインストール方法に違いはありませんでした。(pipでインストールする場合の話)
GPU環境がセットアップされていればGPUが使われるし、セットアップされてなければCPUが使われるということのようです!
事前準備
pythonやGPUの環境をセットアップしていきます。趣旨とずれるので細かい説明は書かずにコマンドだけ載せます。
python3.6およびpipのインストール
※ppa:jonathonfが使えなくなったので、変更する必要があります。
参考:https://qiita.com/pudding167/items/1d7226155cbfcd76bb1a
$ sudo add-apt-repository ppa:jonathonf/python-3.6
$ sudo apt update
$ sudo apt install -y python3.6 python3.6-dev
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3.6 get-pip.py
cuda10.2のインストール
参考:https://developer.nvidia.com/cuda-downloads
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
$ sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/ /"
$ sudo apt-get update
$ sudo apt-get -y install cuda
cudnn7.6のインストール
https://developer.nvidia.com/rdp/cudnn-download
にてダウンロードして、マシン内にコピーして下記を実行。
$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb
ReNom本体をインストール
ここからが本題です。
まずは本体をインストールします。
GitHubには、git cloneしてソースコードからビルドする方法と、whlファイルをダウンロードしてpipでインストールする方法が用意されています。
pipの方が圧倒的に簡単なので、pipでインストールします。
whlファイルはOSやcudaのバージョンで異なるようです。
今回は、Ubuntu16.04, Python3.6, cuda10.0, cudnn7.6 のwhlファイルを利用します。
該当リンクURLをコピーしてpipでインストールします。
$ sudo pip install https://renom.jp/docs/downloads/wheels/renom_dl/ubuntu1604/python3.6/cuda10.0/cudnn7.6.2.24/ReNom2.7.3/renom-2.7.3-cp36-cp36m-linux_x86_64.whl
pandasをインストールします。(pandasはwhlファイルでインストールされなかったですが、起動するためには必要でした…)GitHubにあるrequirements.txtにある通りのバージョンにしています。
$ sudo pip install pandas==0.21.1
pythonを起動してimportできるかテストします。
$ python3.6
Python 3.6.8 (default, Oct 9 2019, 14:04:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import renom
>>>
エラーは何も出力されず、問題なくimportできました!
ReNomTAGを起動する
さてここからは実際のアプリをインストールしていきます。
GitHubを見ると、バージョンによって複数のwhlファイルが用意されています。
今回は現時点で最新バージョンをインストールします。
$ sudo pip install https://grid-devs.gitlab.io/ReNomTAG/bin/renom_tag-1.4b0-py3-none-any.whl
では実際に起動してみます。
$ renom_tag
Bottle v0.12.13 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.
http://0.0.0.0:8080/
でサーバが起動したみたいなので、ブラウザからアクセスしてみます。(リモートマシンを対象に構築している場合は、0.0.0.0ではなく実際のIPアドレスを指定する必要があります。例えば、 http://192.168.1.100:8080
といった形式になるかと。)
URLを入力してアクセスすると、ReNomTAGの画面が表示されました。
NOTICEとしてデータを格納するディレクトリを作成するか聞かれていますので、「OK」を押します。
次はユーザ名を設定する画面になります。ユーザ名を入力して「OK」を押すと下記のように成功したメッセージがでます。
これで初期設定が完了したようで、画面が表示されました。ただ今回は何もデータは入れていないので、「No images found.」と表示されています。
ReNomIMGは画像データを入れて、Detection、Segmentation、Classificationに必要な教師データが作れるアプリで、どうやってデータを格納して、どうやって使うかは、GitHubやhttp://renom.jp/ja/index.html に解説がありました。
実際に使うときは参考にしながら進めれば良さそうです。
ReNomIMGを起動する
TAGと同じく現時点で最新のバージョンをインストールします。
$ sudo pip install https://grid-devs.gitlab.io/ReNomIMG/bin/renom_img-2.3.2-cp36-cp36m-linux_x86_64.whl
また、python3-tkをインストールしないと起動しないようなので、インストールしておきます。
$ sudo apt install python3-tk
では実際に起動してみます。
$ renom_img
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.
TAGと同じくブラウザからアクセスしたところ、下記のような画面が表示されました。
今度は、初期セットアップは何もなくいきなり表示されました。
TAGで作成した教師データと合わせて画像データを入れて画像解析をやってくれるアプリということで、データの入れ方などはTAGと同じく、GitHubやrenom.jpに解説があります。それを参考にして進めていけるかと。
ReNomRGを起動する
ReNomRGも他と同じくpipでインストールできました。
$ sudo pip install https://renom.jp/docs/downloads/wheels/renom_rg/renom_rg-0.6b1-py3-none-any.whl
起動します。
$ renom_rg
Directory scripts is newly created.
Directory datasrc/prediction_set/output is newly created.
Directory datasrc/prediction_set/output/dataset_scaling is newly created.
Directory datasrc/prediction_set/output/csv is newly created.
Directory storage/ml_models is newly created.
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> a1643f735a26, init
INFO [alembic.runtime.migration] Running upgrade a1643f735a26 -> 710ce1a59d37, update_dataset_def
INFO [alembic.runtime.migration] Running upgrade 710ce1a59d37 -> ca4a3a6fed87, update_model
INFO [alembic.runtime.migration] Running upgrade ca4a3a6fed87 -> a22b45bfd754, add_target_data_to_dataset
INFO [alembic.runtime.migration] Running upgrade a22b45bfd754 -> e8b6391f50bf, add paramsearcher
INFO [alembic.runtime.migration] Running upgrade e8b6391f50bf -> 83b33c9bb091, add_true_pred_histogram
INFO [alembic.runtime.migration] Running upgrade 83b33c9bb091 -> b87432936ccf, add histogram to dataset
INFO [alembic.runtime.migration] Running upgrade b87432936ccf -> 4e2cc619c7bf, #16
INFO [alembic.runtime.migration] Running upgrade 4e2cc619c7bf -> 1b16a19827b2, #42
INFO [alembic.runtime.migration] Running upgrade 1b16a19827b2 -> 6cb95f3b3377, #18:add importances
INFO [alembic.runtime.migration] Running upgrade 6cb95f3b3377 -> 2c2d0baf4e03, #90
INFO [alembic.runtime.migration] Running upgrade 2c2d0baf4e03 -> 1b5fa6c3c388, fix #110
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.
こちらは何やら出力が多いですが、起動したようです。ブラウザからアクセスすると下記のような画面が表示されます。
404 Errorが出ていますが、「File data.pickle is not found.」とあるので、データがないよって言っているだけです。データを用意したら解消されそうです。
「OK」を押すとReNom IMGと同様の画面が表示されました。
ReNomRGは数値データを扱うアプリということで、csvファイルやpickleファイルを格納すれば回帰分析してくれるようです。
DPを起動する
pipでインストールします。
$ sudo pip install https://grid-devs.gitlab.io/ReNomDP/bin/renom_dp-0.2b2-py3-none-any.whl
起動します。
$ renom_dp
Bottle v0.12.16 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.
ブラウザからアクセスすると下記のように画面が表示されました。Select Fileを選択しても何も表示されませんが、データを入れたら選択できるようになるようです。
まとめ
ReNomを色々インストールして起動してみました。
データを入れて使っていないので、片手落ち感がありますが、とりあえずReNomアプリが動く環境は簡単に構築できる、ということが分かりました!(ほぼpipだけ。GPU環境をセットアップする方が時間かかる…)