CentOS
NVIDIA
centos7

CentOS 7にNVIDIA GeForce GTX TITAN Xを導入

More than 3 years have passed since last update.

ワークステーションに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倍の高速化!