gtx1070搭載PCにubuntu16.04,cuda,chainerを導入

他のブログでも幾つか紹介されているが、そのままやってもうまくいかなかったため、自分なりのインストール方法を記載する。

(参考サイト)
qiita.com
特にGCCのversion設定あたり、非常に参考になりました。

ubuntuのインストール

ubuntu16.04を以下よりダウンロード
Homepage | Ubuntu Japanese Team

windowsの別PCより、UNetbootinをダウンロードし、SDカードにubuntuを焼く。
UNetbootin, Universal Netboot Installer 日本語情報トップページ - OSDN
この際、スペースを2GB程度確保しておくと、USBブート時等に便利。

gtx1070の補助電源を抜き、HDMIケーブルをマザボに刺し、ubuntuをインストール。
(ubuntuのグラフィックドライバのバグで、gtx1070を挿した状態ではインストールできなかった)

ドライバのインストール

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update;sudo apt-get upgrade
$ sudo apt-get install nvidia-367
$ sudo apt-get install mesa-common-dev
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install gcc-4.8
$ sudo apt-get install g++-4.8

GPUドライバの設定

https://developer.nvidia.com/cuda-toolkitからcuda_8.0.27_linux.runをダウンロードし、home直下にファイルを移動しておく。

以下のコマンドを打ち

$ gedit ~/.bashrc

一番下に以下の行を追加する

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda

GCC4.8系へ

$ cd /usr/bin/
$ sudo unlink gcc
$ sudo ln -s gcc-4.8 gcc
$ sudo unlink g++
$ sudo ln -s g++-4.8 g++

シャットダウンして、GPUの補助電源を入れてGPU側にディスプレイケーブルをつなぎ替える。

cudaのインストール

PCを起動。
(ログインできない状態となるが、それで正常)

CTRL+ALT+F1を押してコンソール画面に行き、ユーザー名とパスワードを入れる。

$ sudo init 3
$ chmod 755 cuda_8.0.27_linux-run
$ sudo sh ./cuda_8.0.27_linux-run

最初の文章部分はfを押して読み飛ばす。
基本accept or y を入力すれば良い。ディレクトリパスを入れるところはデフォルトをそのまま転記。

$ sudo reboot

再起動後、再びCTRL+ALT+F1を押してコンソール画面に行き、ユーザー名とパスワードを入れる。

GCC5系へ

$ cd /usr/bin/
$ sudo unlink gcc
$ sudo ln -s gcc-5 gcc
$ sudo unlink g++
$ sudo ln -s g++-5 g++

ドライバの再インストール

$ sudo apt-get install nvidia-367 --reinstall
$ sudo reboot

これで無事ログインできるようになるはず。

cudnnのインストール

以下からcudnnをダウンロードし、ホームディレクトリに置く
NVIDIA cuDNN | NVIDIA Developer

$ tar xzf ~/cudnn-8.0-linux-x64-v5.1.tgz
$ cd ./cuda
$ sudo cp lib64/libcudnn* /usr/local/cuda/lib64/
$ sudo cp include/cudnn.h /usr/local/cuda/include

chainerのインストール

$ # pipのインストール
$ sudo apt-get install python-pip

$ # virtualenvのインストール
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

$ # virtualenv環境の作成
$ mkdir ~/workspace
$ mkdir ~/workspace/chainer
$ virtualenv ~/workspace/chainer
$ source ~/workspace/chainer/bin/activate

$ # chainerのインストール
(chainer)$ pip install chainer

$ # 終了時は以下のコマンドで仮想環境から出る
(chainer)$ deactivate

(おまけ)
以下のようにエイリアスを作成すると、virtualenvが使いやすくなるのでおすすめ。
www.robotech-note.com

動作確認

(chainer)$ wget https://github.com/pfnet/chainer/archive/v1.16.0.tar.gz
(chainer)$ tar xzf v1.16.0.tar.gz
(chainer)$ python chainer-1.16.0/examples/mnist/train_mnist.py --gpu 0

cudaドライバのパッチ当て直し

このままではgcc5系では動作しない模様。
cudaドライバとパッチを入れなおす。
#gccの切り替えをしなくとも、最初からこれでインストールすれば良い可能性もあり(未検証)

以下からパッチ1(cuda_8.0.27.1_linux.run)をダウンロード
CUDA Toolkit | NVIDIA Developer

cudaのインストールのとおりに、ctrl + alt + f1してログインし、

$ sudo init 3
$ sudo sh ./cuda_8.0.27_linux-run
$ chmod 755 cuda_8.0.27.1_linux-run
$ sudo sh ./cuda_8.0.27.1_linux-run
$ sudo reboot

再起動後、ctrl + alt + f1としてドライバの再インストール

$ sudo apt-get install nvidia-367 --reinstall
$ sudo reboot

動作確認(再び)

(chainer)$ wget https://github.com/pfnet/chainer/archive/v1.16.0.tar.gz
(chainer)$ tar xzf v1.16.0.tar.gz
(chainer)$ python chainer-1.16.0/examples/mnist/train_mnist.py --gpu 0

以下のような出力が出てこれば成功!!
長かった・・・。

16          0.00903648  0.115398              0.996749       0.9784                    
17          0.0130406   0.0909867             0.996165       0.9841                    
18          0.0102971   0.10062               0.997099       0.9835                    
19          0.00903177  0.0994182             0.997266       0.9818                    
20          0.00503516  0.114571              0.998382       0.9815