もうすぐ3.0が正式リリースらしい10/17に3.0が正式リリースされました*1Chainerですが、GPUサーバにインストールする手順をまとめてみます。もし手元のMacとかでGPUを使わないならpip install chainer
するだけです。
- 用いた環境
- インストールに必要なもの / あるといいもの
- NVIDIA DriverとCUDAのインストール
- cuDNNのインストール
- Pythonのインストール
- Chainerのインストール
- GPUの使用率の確認
- 参考
用いた環境
- Ubuntu 16.04
- Tesla K80
今回はAzureのGPUインスタンス(NC 6)を使いました。Tesla K80が1枚刺さっていて、お値段は1時間100円くらいです。NCシリーズは日本リージョンがないので、米国東部リージョンで作成しました。(sshでコマンド叩くだけでも表示に若干タイムラグがある気がします。)
ChainerはUbuntu 14.04/16.04 LTS 64bit、CentOS 7 64bitに対応しているので、Ubuntu 16.04を使いました。
GPUの確認
インストールする前に作成したばかりのVMにはいってGPUの確認をしてみます。
$ lspci | grep -i nvidia 9e64:00:00.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)
正しくK80が認識されていました。
インストールに必要なもの / あるといいもの
インストールするものは以下のとおりです。バージョンは今回インストールしたバージョンです。
- Python 3.6.2
- CuPy 1.0.2
- NVIDIA Driver 384.66
- CUDA 8.0
- cuDNN 6.0
- CUDAでDNNの計算に最適化したライブラリです*2。
- なくても動きますが、あると計算が早くなります。入れない理由はないです。
Chainerは現時点の最新版2.0.2をインストールしました。
NVIDIA DriverとCUDAのインストール
CUDA Toolkitを使うとドライバーとCUDAをインストールすることができます。最新版である8.0をインストールします。Chainer(正確にはCuPy)では8.0に対応していますが、フレームワーク側が対応しているか確認が必要です。
公式サイトのダウンロードページで、以下のようにポチポチ押していくとダウンロードのボタンがでてきます。
今回はリンク先のURLでコピーしてwget
でダウンロードしました。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo apt update
$ sudo apt install cuda
CUDAのインストールは10分くらいかかります。
インストールが終わると、ライブラリなどは/usr/local/cuda-8.0
に格納され、/usr/local/cuda
にシンボリックリンクが貼られます。
環境変数の設定
.bashrc
などに以下を追記します。
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
追記したら、$ exec $SHELL -l
などでシェルの読み込みなおして環境変数を有効にします。
インストールされているか確認
ドライバのバージョン確認します*3。
$ cat /proc/driver/nvidia/version NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.66 Tue Aug 1 16:02:12 PDT 2017 GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
CUDAのバージョンを確認します。
$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2016 NVIDIA Corporation Built on Tue_Jan_10_13:22:03_CST_2017 Cuda compilation tools, release 8.0, V8.0.61
cuDNNのインストール
やっかいなことに、NVIDIAのメンバー登録が必要です。公式のダウンロードページから登録してログインして、ライセンスに許諾するとダウンロードをさせてもらえます。
先程、CUDA 8.0をインストールし、CuPyではcuDNN v6まで対応しているので、「Download cuDNN v6.0 (April 27, 2017), for CUDA 8.0」->「cuDNN v6.0 Library for Linux」と選択するとダウンロードできます。
圧縮されていますが、200MBくらいあります。(今回、東海岸のAzureを使っているので)ローカルからの転送に時間かかります。。
バイナリなので、CUDAがインストールされている場所にコピーするだけでインストール完了です。
$ tar -xf cudnn-8.0-linux-x64-v6.0.tgz $ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ $ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
CUDAやcuDNNの複数バージョンの共存
CUDAやcuDNNの複数のバージョンを共存させる可能ですが、環境が壊れる原因になるので極力やめましょう。共存したい場合は、nvidia-dockerがおすすめです。また、バージョンをアップグレードする際は、一度消してから入れ直す方が無難です。
Pythonのインストール
Pythonのインストールは割愛します。3.6.2をインストールしました。
インストールしておくといいPythonライブラリ
chainerのインストールには直接必要ないですが、後々必要になる可能性のあるライブラリです。(必要になってから入れてもいいと思います。)
- pillow
- 画像を扱うときに必要です。ImageDatasetを使うときに呼ばれます。
- h5py
- 作成したモデルをHDF5で保存するときに必要です。
- matplotlib
- Trainerでエラーログなどを図で出力するときに必要です。
Chainerのインストール
依存するライブラリをすべてインストールすると、あとはpip
で入れることができます。
$ pip install cupy $ pip install chainer
動作確認
$ python Python 3.6.2 (default, Sep 5 2017, 12:02:46) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import chainer >>> chainer.cuda.available True >>> chainer.cuda.cudnn_enabled True
無事、インストールが完了し、ChainerからCUDAやcuDNNが使えていることが確認できます。もし、False
になるようであれば、CUDAやcuDNNのパスを見直し、cupy
を再インストールすると良いと思います。
GPUの使用率の確認
GPUの使用率はnvidia-smi
コマンドで確認できます。l
オプションで5秒間隔で更新されます。
$ nvidia-smi Tue Sep 5 12:35:43 2017 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 384.66 Driver Version: 384.66 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 0000C915:00:00.0 Off | 0 | | N/A 39C P0 71W / 149W | 0MiB / 11439MiB | 99% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+