ワークステーションにTitan Xを導入しChainerを動かすところまで.
実際に試した時の構成
- CentOS 7.1
- GeForce GTX TITAN X
参考資料
やはり公式が一番:
https://developer.nvidia.com/cuda-downloads
「Chapter 4. RUNFILE INSTALLATION」を参考にすれば良い.
2015.07.08時点ではyum経由でInstallすると,ドライバが競合するらしい(噂.未確認)
そのため,RUNファイル経由でのインストールを以下では行う.
また,ドライバのインストールもyum経由ではなくRUNファイルで行った.
(2015.07.08時点では公式のrpmパッケージ (xorg-x11-drv-nvidia) のバージョンが346.46,Titan Xの対応は346.59かららしい)
NVIDIAのドライバインストールは下記のサイトを参考にした:
Smiling Life : CentOS7におけるNVIDIAドライバのインストール方法
ドライバのインストール
下記のコマンドによってグラフィックカードが何かを確認.
$ lspci | grep -i nvidia
名称が書かれていない場合には下記のコマンドを打つと良いらしい:
$ update-pciids
ドライバは下記のページからダウンロードできる:
http://www.nvidia.co.jp/Download/index.aspx?lang=jp
2015.07.08時点で最新版は352.21.製品サポートリストにも「Titan X」が含まれていることを確認.
ダウンロードしたファイル名はNVIDIA-Linux-x86_64-352.21.run
.
Nouveauドライバの無効化
CUDAを入れるためにNouveauを無効化する必要があるらしい.
(Nouveau: NVIDIAドライバのフリー版)
下記コマンドによりNouveauドライバが読み込まれているか確認.
$ lsmod | grep nouveau
Nouveauドライバが読み込まれている場合には,2つのファイルを編集し再起動することで無効化する必要がある.
/etc/modprobe.d/modprobe.conf
に下記1行を追加:
blacklist nouveau
/etc/modprobe.d/nouveau_blacklist.conf
に下記1行を追加:
blacklist nouveau
追記後は再起動が必要.
下記コマンドによりNouveauドライバが読み込まれていないか確認.
$ lsmod | grep nouveau
何も表示されなければ良い.
ランレベルを下げる
CUIにてドライバをインストールする必要がある.下記コマンドを入力し
$ systemctl get-default
graphical.target
ならば以下のコマンドを入力し再起動する必要があるが,multi-user.target
ならば問題ない.
$ systemctl set-default multi-user.target
RUNファイルによるNVIDIAドライバのインストール
root権限で実行:
$ sudo sh NVIDIA-Linux-x86_64-352.21.run
CUDAのインストール
公式サイトより,今回はcuda_7.0.28_linux.run
をダウンロード.
root権限で実行:
$ sudo sh cuda_7.0.28_linux.run
chainerの導入
以下のコマンドでソースごと取得:
$ git clone https://github.com/pfnet/chainer.git
あとはREADMEに従って,必要なパッケージをインストールしておく.
chainerのパッケージインストール:
$ cd chainer
$ python setup.py install
CUDA関連のパッケージインストールのための準備として,.bashrc
などに以下の3行を追加:
export CUDA_DIR=/usr/local/cuda
export CUDA_INC_DIR=/usr/local/cuda/include
export PATH=$PATH:/usr/local/cuda/bin
source ~/.bashrc
を忘れずに.
CUDA関連のパッケージインストールスクリプトを実行:
$ python cuda_deps/setup.py install
動作検証
準備
chainerのmnistを1 epochだけ実行してみる.
$ cd examples/mnist/
$ sed -i 's/n_epoch = 20/n_epoch = 1/g' train_mnist.py
データだけをダウンロードしていったん終了させる:
$ python train_mnist.py
load MNIST dataset
Downloading train-images-idx3-ubyte.gz...
Done
Downloading train-labels-idx1-ubyte.gz...
Done
Downloading t10k-images-idx3-ubyte.gz...
Done
Downloading t10k-labels-idx1-ubyte.gz...
Done
Converting training data...
Done
Converting test data...
Done
Save output...
Done
↑で「Ctrl+C」を押していったん終了.
計測結果
CPU利用
$ time python train_mnist.py
load MNIST dataset
('epoch', 1)
graph generated
train mean loss=0.276497786877, accuracy=0.914633335241
test mean loss=0.104770960066, accuracy=0.967400007248
real 4m54.224s
user 4m52.819s
sys 0m1.339s
GPU利用
$ time python train_mnist.py --gpu 1
load MNIST dataset
('epoch', 1)
graph generated
train mean loss=0.278076749947, accuracy=0.914699982107
test mean loss=0.115648652349, accuracy=0.964599978924
real 0m19.351s
user 0m8.110s
sys 0m11.214s
約15倍の高速化!