Ubuntu14.04にChainer、CUDA8.0の環境を構築
Ubuntu14.04にChainerとCUDAの環境を構築したのでその記録を残しときます。 環境構築で手間取り2日くらいかかってしまいました。
まずWindows10でやってみましたが、途中挫折。その後、CentOS7でやってみて、また挫折。 以下は、最後にUbuntuに挑戦してみた結果です。
- 環境
- OS構築
- ドライバー、ライブラリー ダウンロード
- ツールインストール
- nouveau無効化
- CUIでOS起動
- GPUドライバーインストール
- CUDA toolkitインストール
- cuDNNインストール
- 環境変数追加
- pipインストール
- Chainerインストール
- エラー
- GPUテスト
- 結果
- その他(無関係)
環境
OS構築
Ubuntuを通常通りインストールします。
文字化けが嫌なので英語環境をインストールしました。
ドライバー、ライブラリー ダウンロード
起動後、FirefoxでNVIDIAの公式サイトより以下のファイルをダウンロードしておきます。
- グラフィックボードドライバー(NVIDIA-LINUX-x86_64-375.26.run)
- cuda toolkit(cuda_8.0.44_linux.run)
- cuDNN(cudnn-8.0-linux-x64-v5.1.tgz)
ツールインストール
先にコンパイラーなどを入れておきます。
$ sudo apt-get install build-essential
nouveau無効化
NVIDIAのドライバーと競合するので、 デフォルトで入っているGPUドライバーを無効化します。
# sudo vi /etc/modprobe.d/blacklist-nouveau.conf blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off
# sudo vi /etc/modprobe.d/nouveau-kms.conf options nouveau modeset=0
$ sudo update-initramfs -u
CUIでOS起動
# sudo vi /etc/default/grub # GRUB_CMDLINE_LINUX_DEFAULT="splash quiet" # 削除 GRUB_CMDLINE_LINUX_DEFAULT="text" # 追加
grub更新後、再起動します。
$ sudo update-grub
GPUドライバーインストール
以下、ディレクトリー名は適宜読み替えてください。 終了後、再起動します。
$ cd Downloads $ chmod +x ./NVIDIA-Linux-x86_64-<version>.run $ sudo ./NVIDIA-Linux-x86_64-<version>.run $ sudo reboot
CUDA toolkitインストール
こちらも終了後、再起動します。
インストールしていると、ドライバーのバージョンがダメですのでインストールしますか?と言われたので、ドライバーもインストールしました。
$ cd Downloads $ chmod +x ../cuda_<version>_linux.run $ sudo ./cuda_<version>_linux.run $ sudo reboot
cuDNNインストール
ダウンロードしたファイルを解凍して、CUDAインストールディレクトリーにコピーします。
$ tar xvf cudnn-8.0-linux-x64-<version>.tgz $ sudo cp cuda/include/* /usr/local/cuda-8.0/include $ sudo cp cuda/lib64/* /usr/local/cuda-8.0/lib64
環境変数追加
環境変数を追加します。
# ~/.bashrc export CUDA_PATH=/usr/local/cuda-8.0 export PATH=$CUDA_PATH/bin:$PATH export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH export CPATH=$CUDA_PATH/include:$CPATH export LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH export CFLAGS=-I/usr/local/cuda-8.0/include export LDFLAGS=-L/usr/local/cuda-8.0/lib64
完了後、再読み込みします。
$ source ~/.bashrc
pipインストール
普通にapt-getでインストールします。
$ sudo apt-get install python-pip
Chainerインストール
デバッグ情報まで表示できるようにvvvvをつけます。また、キャッシュを読み込んで変な動作をしても嫌なのでno-cacheをつけておきます。
$ pip install chainer --no-cache -vvvv
エラー
Chainerのインストールで以下のエラーが出ました。
Python.hがない
No such file or directory #include "Python.h"
とのことでした。
$ sudo apt-get install python-dev
これをインストールすると動きました。
GPUテスト
サンプルのMNISTを実行してみます。
$ sudo apt-get install git $ cd $ git clone htttps://github.com/pfnet/chainer $ cd chainer/examples/mnist $ python train_mnist.py -g 0
結果
CPUでは約15分ほどかかっていましたが、GPUでは約75秒で完了しました。速い!
その他(無関係)
コーディングなどは別のPCで行いたいのでsshをインストールして、ファイル等のやり取りをできるようにします。
$ sudo apt-get install ssh
また、Permission Deniedで怒られるのが嫌なので通常はrootで作業できるようにします。Ubuntuはrootでログインできないので、以下のようにしてrootアカウントにパスワードを設定します。
$ sudo su - $ passwd [root password] [re-type root password] $ exit $ su [root password]
セキュリティ上、sshの設定は別途行う必要があります。
また、通常の用途では、rootはログインしないようにしておいて、必要な場合のみ、sudoでコマンド実行する方が良いです。
ただ、今回は、オフラインでサーバーを使っていくので、利便性をとりました。