はらぺこらいおん

日々、思ったことを。

Ubuntu14.04にChainer、CUDA8.0の環境を構築

Ubuntu14.04にChainerとCUDAの環境を構築したのでその記録を残しときます。 環境構築で手間取り2日くらいかかってしまいました。

まずWindows10でやってみましたが、途中挫折。その後、CentOS7でやってみて、また挫折。 以下は、最後にUbuntuに挑戦してみた結果です。

環境

OS構築

Ubuntuを通常通りインストールします。
文字化けが嫌なので英語環境をインストールしました。

ドライバー、ライブラリー ダウンロード

起動後、FirefoxNVIDIAの公式サイトより以下のファイルをダウンロードしておきます。

  • グラフィックボードドライバー(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起動

CUIで起動するためgrubを書き換えます

# 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でコマンド実行する方が良いです。

ただ、今回は、オフラインでサーバーを使っていくので、利便性をとりました。