2017年5月30日火曜日

Linuxコマンドを連続して使用する

参考はこちら。
http://qiita.com/egawa_kun/items/714394609eef6be8e0bf

たいていの場合&&でいいですね。

プログラムでも書いてもいいのでしょうが
なにも考えずテキストエディターコピペ置換して
下記のように一気に処理するときに便利です。
下記の100倍の長さのコマンドラインを打ち込んでも
まったく問題なくうごきました。さすが。

cd '/home/eijwat/optical_flow_7_matome/OF_result_8videos/15rpm_L01/1' && python optical_flow.py result/test_20y_0.jpg result/test_20y_1.jpg -s 0 -l 1 -cc yellow -lc red -s 2 -l 2 -vs 30.0 && cd '/home/eijwat/optical_flow_7_matome/OF_result_8videos/15rpm_L01/2' && python optical_flow.py result/test_20y_0.jpg result/test_20y_1.jpg -s 0 -l 1 -cc yellow -lc red -s 2 -l 2 -vs 30.0

2016年9月5日月曜日

UbuntuにChainerをInstallする(GTX1080)

DEEP LEARNINGの計算をする際、NVIDIAのGTX1080の威力は凄いとの噂で、今回ラボに導入することにしました。DEEP LEARNINGだけではなく、メダカの3Dアニメーションのレンダリングにも活躍するはずです。研究費を節約するためごく普通のマザーボード(Intel H97Express)にGTX1080という構成です。電源は850W、SSDは256Gb、メモリーは16Gb確保しました。

インストールに苦労したので、ここに書き留めておきます。ネット上の沢山のサイトを参考にしました。感謝です。参考サイトはあまりにも多く、そして修正箇所多々でしたので引用は控えます。2016年の夏の時点でのインストールです。

準備
0)ディスプレイはGTX1080ではなく、ひとまずマザーボードのポートに差しておく。

OSのインストール
1)Ubuntu14.04LTS(64ビット)をイメージDVDからインストール(16.04LTSは非推奨)。
2)Ubuntuをアップデート。

Chainerが依存するライブラリーをインストール
3)以下はTerminalからのコマンド実行。
4)sudo apt-get install g++
5)sudo apt-get install python2.7
6)sudo apt-get install libhdf5-dev
7)sudo apt-get install python-dev
8)sudo apt-get install python-pip
9)sudo pip install -U setuptools
10)sudo pip install -U cython
11)sudo pip install -U filelock

GTX1080のドライバーをインストール
12)リポジトリ登録
13)sudo add-apt-repository ppa:graphics-drivers/ppa
14)sudo apt-get update
15)sudo apt-get install nvidia-370
この時点の最新版が370でした。
sudo apt-cache search 'nvidia-[0-9]+$'
で確かめることができます。
16)おそらく途中で「BIOSのセキュアブートをオフにしますか」という指令がくるのでOKに。
17)sudo reboot
18)ここでマザーのビデオポートは使えなくなるので、ディスプレイをGTX1080に差し直す。
18)おそらくここで「BIOSのセキュアブートをオフにしますか」という指令がくるのでOKに。次回からは聞かれない。ちなみにセキュアブートのオフ状態はOSをクリーンインストールしても生きた状態が続くので注意。
19)nvidia-smiで確認。テーブルが出てくればOK。GPU番号と稼働状態が確認できる。

CUDAのインストール
20)CUDA Toolkit8.0(RC)をnvidiaのサイトからWEBからダウンロード。ダウンロードするのは.debファイル。NVIDIAにアカウントを登録する必要がある。GTX1080の場合、現状RC版しか選択はない。
21)sudo dpkg -i ###.deb
###.debはダウンロードしたファイルのディレクトリー。Terminalにそのまま投げ込めばOK。
22)sudo apt-get update
23)sudo apt-get install cuda
24)sudo apt-get install nvidia-370(23でダウングレードされてしまうため。そのうちここは必要なくなる?)

cudnnのインストール
25)NVIDIAからcudnn5.1をダウンロード。適当なところに解凍。
26)解凍したフォルダーから所定の場所にファイルをコピー
sudo cp lib* ### /usr/local/cuda/lib64/
sudo cp cudnn.h ### /usr/local/cuda/include/
###は所定のディレクトリ-。行った先のファイルパーミッションは644に変更。

パスを通す
27)sudo vi ~/.bashrcで以下を一番下に付け加える。エディターviの使い方は各自勉強。
export CUDA_ROOT=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:
export CPATH=$CPATH:/usr/local/cuda/include
export CUDA_INC_DIR=/usr/local/cuda/bin:$CUDA_INC_DIR

リブートしてパスをアクティブにする
28)sudo reboot

プロトコールバッファーを導入
29)sudo pip install protobuf

chainerのインストール
30)sudo pip install chainer
CUDAの位置などはchainerが自動で探し出してくれるので指定不要。

テストラン
31)sudo apt-get install git
32)sudo git clone https://github.com/pfnet/chainer.git
33)ホームのchanierフォルダーのパーミッションは丸ごと777に設定。
34)ホームのchainer/example/mnist内のtrain_mnist.pyを実行。
(CPUで計算。train_mnist.pyのとこはディレクトリーを)
python train_mnist.py
(GPUで計算)
python train_mnist.py --gpu=0
GPU番号はコマンドnvidia-smiで確かめることができる。普通は0になっている。
pythonのプログラム実行は、クセのようになっているsudo実行をやらないこと
sudo vi ~/.bashrcで通したパスはログインユーザーにのみ有効。

結果
35)CPU計算すると数分かかる1 epochが、GPU計算すると1秒ほどになりました。train_mnist.pyをデフォルト設定で実行すると(20 epoch)、CPU計算で約2時間、GPU計算で約20秒です。DEEP LEARNINGにはGPU計算が必須なのは間違いあありません。今後複数マシンでの分散計算へと時代は移行していくでしょうが、それはまだ試験段階のようです。

後日追記1
2017年2月27日に新たなマシンが来たので再びセットアップ。インストールしていて気になったポイントは以下の通り。
A)15)sudo apt-get install nvidia-370はnvidia-378になっていた。
B)それに伴う変更なのかBIOSのセキュアブートをオフにしますかという指令が来なかった(セキュアブートに対応した?)
C)CUDA Toolkit8.0(RC)はCUDA Toolkit8.0になっていた。にも関わらず、24)のバージョン戻しは相変わらず必要。ひょっとしたらドライバーのインストールが省略できるのかもしれない。
D)python train_mnist.pyの実行でPlotReport関係のエラーが発生。それは以下でリポート済みの現象。
https://github.com/pfnet/chainer/pull/2277
古いtrain_mnist.pyファイルを動かしてみたら問題なく動いた。gpuもちゃんと動いた。

後日追記2
2016年9月にセットアップしたのはIntel H97ExpressのボードにCorei7 6700K/4core 4Ghzに16Gbメモリーという構成だった。メモリーは32Gbに増設はした。2017年2月にセットアップしたのはIntel H99ExpressのボードにCorei7 6800K/6core 3.4Ghzに32Gbメモリーという構成だった。使ってみると2016年版のほうが1.2倍くらい速い。同じGTX1080を積んでいても、そしてコアスペックが上がっていても意外なことに古い方のマシンが速いという結果になった。原因は不明。2台のマシンになって学習の試行錯誤は非常に効率があがったので問題はない。

後日追記3
2017年6月19日に新しいハードディスクにインストール。既存のプログラムでCUPY関係のエラーがでた。知らない間にCHAINERがバージョン2に上がっていたので、たぶんこれが原因ということで、sudo pip install chainer==1.20.0.1で強制的に古いCHAINERをインストール。これで動いた。バージョン2ってなんだ?

後日追記4
別用途に買ってあったGTX1070を深層学習用に使えるようにした。GTX1070はGTX1080の廉価版にあたるが、chainerを動かした感じからすると十分実用に耐える性能を持っていた。条件検討のために複数台必要なときにはGTX1070も候補ではないだろうか。