CentOS7上にCUDAを設定してkeras/tensorflowのサンプルを動かすまで
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