CentOS7にkeras/tensorflowをセットアップしてサンプルを動かしてみたメモです。
最初にCPUでサンプルを動かしてみた後、
CUDA、cuDNNを設定して、再度サンプルを動かして、どの程度性能が上がるかを比較してみたいと思います。

動かしてみた環境は、以下の通りです。

  • CPU: Intel Core i7-4770 3.40GHz
  • GPU: NVIDIA GeForce GTX760 4GB

CentOS7は、MinimalISOのDVDからセットアップしています。
SELINUXは無効にしています(有効でもおそらく問題無いと思いますが)。

以下の流れで進めていきます。

  • ツール、依存ライブラリのセットアップ
  • anyenv, pyenv, anacondaのセットアップ
  • tensorflow, kerasのセットアップ
  • kerasサンプルの実行(CPU)
  • NVIDIA GPUドライバのセットアップ
  • CUDAのセットアップ
  • cuDNNのセットアップ
  • GPU版tensorflowのセットアップ
  • kerasサンプルの実行(GPU)

ツール、依存ライブラリのセットアップ

yumで必要そうなツール、ライブラリを入れておきます。

$ sudo yum groupinstall "Development Tools"
$ sudo yum install openssl-devel readline-devel zlib-devel bzip2-devel

anyenv, pyenv, anacondaのセットアップ

anyenv/pyenvからanacondaをセットアップします。

過去のエントリで書いた、以下の流れと同様なので、入力したコマンドを書いていきます。

pythonの開発環境の切り替え用に anyenv, pyenv, pyenv-virtualenv, anacondaを入れる流れ
http://takemikami.com/2016/10/20/python-anyenv-pyenv-pyenvvirtualenv-anaconda.html

以下のコマンドで、anyenvのセットアップ。

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

以下のコマンドで、pyenv/pyenv-virtualenvのセットアップ。

$ anyenv install pyenv
$ git clone https://github.com/yyuu/pyenv-virtualenv ~/.anyenv/envs/pyenv/plugins/pyenv-virtualenv
$ exec $SHELL -l

以下のコマンドで、anacondaのセットアップ。

$ pyenv install anaconda3-4.3.1

tensorflow, kerasのセットアップ

まずは、作業ディレクトリを作り、使用するpythonを指定します。

$ mkdir ~/tensorflow-study && cd $_
$ pyenv local anaconda3-4.3.1
$ pyenv versions
  system
* anaconda3-4.3.1 (set by /home/※ユーザ名※/tensorflow-study/.python-version)

次に、anacondaでtensorflow/keras用の環境を作成します。

$ conda create -n tensorflow python=3.6.0
$ pyenv versions
  system
* anaconda3-4.3.1 (set by /home/※ユーザ名※/tensorflow-study/.python-version)
  anaconda3-4.3.1/envs/tensorflow
$ pyenv activate tensorflow
$ pyenv versions
  system
  anaconda3-4.3.1
* anaconda3-4.3.1/envs/tensorflow (set by PYENV_VERSION environment variable)

conda installで、tensorflowをインストールします。

$ conda install -c conda-forge tensorflow

pip installでkerasをインストールします。

$ pip install keras

kerasサンプルの実行(CPU)

ここまでの手順で環境が出来たので、kerasのサンプル「mnist_cnn.py」を動かしてみます。

まずは、kerasのリポジトリをgit cloneします。

$ git clone https://github.com/fchollet/keras.git

以下のコマンドで、サンプルを実行できます。

$ cd keras/examples
$ python mnist_cnn.py

GPUと所要時間を確認したいので、ここでは次のようにして実行することにします。

$ date; python mnist_cnn.py; date
Mon May 15 03:28:58 JST 2017
Using TensorFlow backend.
x_train shape: (60000, 28, 28, 1)
※途中省略※
Epoch 12/12
60000/60000 [==============================] - 108s - loss: 0.0356 - acc: 0.9892 - val_loss: 0.0283 - val_acc: 0.9899
Test loss: 0.0282698377238
Test accuracy: 0.9899
Mon May 15 03:51:18 JST 2017

NVIDIA GPUドライバのセットアップ

ここからGPUの環境設定になります。

以下のコマンドで接続されているGPUを確認します。

$ lspci | grep -i nvidia

以下のサイトでドライバをダウンロードします。

NVIDIAドライバダウンロード
http://www.nvidia.co.jp/Download/index.aspx?lang=jp

ダウンロードしたドライバを実行してインストールします。

$ sudo bash NVIDIA-Linux-x86_64-※ダウンロードしたバージョン※.run

ドライバインストール後に、一度マシンを再起動しておきます。

$ sudo reboot

CUDAのセットアップ

yumにepelリポジトリを追加しておきます。

$ sudo yum install epel-release

「/etc/yum.repos.d/epel.repo」ファイルの以下のenabledの設定を0に変更しておきます。

enabled=0

以下のように、dkmsをインストールします。

$ sudo yum install dkms --enablerepo=epel

以下のサイトの指示に従ってCUDA Toolkitをインストールします。

CUDA Toolkit | NVIDIA developer
https://developer.nvidia.com/cuda-toolkit

$ wget http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-8.0.61-1.x86_64.rpm
$ sudo rpm -i cuda-repo-rhel7-8.0.61-1.x86_64.rpm
$ sudo yum clean all
$ sudo yum install cuda

「~/.bash_profile」に以下を追記します。

# cuda
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}}

設定を読み直して、nvccを実行してインストール出来ていることを確認します。

$ source ~/.bash_profile
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
※以降省略※

ついでにGPUを認識しているどうかも確認しておきます。
※正しくセットアップされていれば、接続しているGPUの名称が表示されるはず

$ nvidia-smi

cuDNNのセットアップ

以下のサイトからcuDNNをダウンロードします。
※ダウンロードする際には会員登録が必要です。

NVIDIA cuDNN | NVIDIA developer
https://developer.nvidia.com/cudnn

ダウンロードしたファイルを、以下のように展開します。

$ tar zxf cudnn-8.0-linux-x64-v6.0.tgz
$ sudo cp -a cuda/include/* /usr/local/cuda/include/
$ sudo cp -a cuda/lib64/* /usr/local/cuda/lib64/
$ sudo ldconfig

GPU版tensorflowのセットアップ

conda installで、GPU版のtensorflowをインストールします。

$ cd ~/tensorflow-study
$ pyenv activate tensorflow
$ conda install -c conda-forge tensorflow-gpu

kerasサンプルの実行(GPU)

GPUを有効にした状態で、もう一度サンプルを実行してみます。

$ cd keras/examples
$ date; python mnist_cnn.py; date
Mon May 15 04:05:10 JST 2017
Using TensorFlow backend.
x_train shape: (60000, 28, 28, 1)
※途中省略※
2017-05-15 04:05:15.317484: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 with properties:
name: GeForce GTX 760
※途中省略※
Epoch 12/12
60000/60000 [==============================] - 17s - loss: 0.0347 - acc: 0.9894 - val_loss: 0.0285 - val_acc: 0.9906
Test loss: 0.0285342087185
Test accuracy: 0.9906
Mon May 15 04:08:41 JST 2017

このような感じで、
CPUで22分くらいかかっていたものが、GPUでは3分程度で実行出来ました。

tensorflowでチューニングを行う際の効率を考えるとGPUを使わない手はないですね。

参考にしたサイト

TensorFlowのGPU版のインストール(GT730) | mwSoft
http://www.mwsoft.jp/programming/tensor/gpu_install.html

CentOS 7にNVIDIA GeForce GTX TITAN Xを導入 | Qiita
http://qiita.com/mpkato/items/3a9428f408e7e15d0a1b