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

以下12)~24)は最近は様変わりをしたようである。
最近(2020年春)にTitanRTX追加を導入したときは、
こちら。
<-これをやったら、25)へ進むが、cudnnもバージョンは上がっておりますぞ。

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に差し直す(使える場合もあります。使えるならマザーのビデオボードを使いましょう。現在本マシンはマザーのビデオボードでディスプレイを表示させていますので、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でダウングレードされてしまうため。そのうちここは必要なくなる?)

もし修正パッチがあった場合は、
sudo dpkg -i ###.deb
でパッチをあてる。

cudnnのインストール
25)NVIDIAからcudnn5.1をダウンロード(Library for Linux)。適当なところに解凍。
26)解凍したフォルダーから所定の場所にファイルをコピー
sudo cp ###/lib* /usr/local/cuda/lib64/
sudo cp ###/cudnn.h /usr/local/cuda/include/
###は所定のディレクトリ-(Terminalにそのまま投げ込めばOK)。行った先のファイルパーミッションは644に変更(sudo chmod 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

パスを書き間違えているとターミナルからのコマンドがまったく通らなくなるので注意。もしすべてのコマンドが通らなくなったら、ターミナルから、
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
を実行してみる。

プロトコールバッファーを導入
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を積んでいても、古い方のマシンが速いという結果になった。

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

後日追記4
別用途に買ってあったGTX1070を深層学習用に使えるようにした。既存のChainerプログラムを動かしてみたが十分実用に耐える実力を持っていた。十二分に速かった。

後日追記5
最近、深層学習専用機が売られています。自作PCのと差は、1)一連の深層学習用のフレームワーク(ライブラリーやツール)がプレインストールされているか否か、2)ディスプレイ専用のGPUが別に付属しているか否か、3)価格が高いか安いか、の3点だとおもいます。2)に関しては、ほんの若干計算のリソースに影響を与えるものと思いますが、大勢に影響なしだと思われますし、なんでしたら安価なグラフィックボード追加するのも一手です。1)のプレインストールは確かにありがたいですが、セットアップは数時間ですし、必要のないツールが入っていても無駄ですし、3)との兼ね合いかと思います。

後日追記6
Windows10とUbuntu14.04のデュアルブート(OMEN by HP Desktop 880)







WindowsのWSL2は深層学習にガッツリ使える??

いろいろ検討した結果、 「WindowsのWSL2は深層学習に使える」 と、結論しましたので、ここに記録。 が、諸事情によりタイトルは??を付けました。 諸事情は最後に。 まず、 Windows及びNvidia driverはとことんアップデートする。 その後、 https://...