Ubuntu 16.04 LTSにCUDAとTensorFlowを入れて深層学習環境をつくる

やりたいこと

  • 深層学習やりたい
  • TensorFlowを使う
  • GPUで高速化する

TensorFlowはオープンソースの機械学習ライブラリ.PythonやC++から利用できる. 今回はPythonから使うが,CUDAを利用したGPGPUで高速化する.

CUDAとcuDNNの導入

CUDA

CUDA ToolkitからCUDA Toolkit 8.0のを導入する. 今回はパッケージマネージャを使う. インストーラをダウンロードし,パッケージマネージャに追加する.

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_<version>_amd64.deb
sudo  dpkg -i cuda-repo-ubuntu1604_<version>_amd64.deb
sudo aptitude update
sudo aptitude install cuda

<version>はCUDA Toolkitのバージョン.

パスの設定

~/.zshrcに以下を追加.

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

テスト

サンプルを試してみる.

cd /usr/local/cuda-8.0/samples
sudo make

今回の環境だとOpenGL関係と思われるエラーが出て一部ビルドできなかった. とりあえず今後の課題.

幾つか試す.

cd bin/x86_64/linux/release
# デバイス情報
./deviceQuery
# バンド幅
./bandwidthTest
# 多体問題
./nbody -benchmark -numbodies=256000 -device=0

cuDNN

cuDNNは深層学習用のCUDAライブラリ. 畳み込みを高速化する.

cuDNNからダウンロードするためにNVIDIA Developerのアカウントを作る必要がある.

ダウンロードしたファイルを展開し,CUDAのディレクトリへコピーする.

tar xzvf cudnn-8.0-linux-x64-v5.1.tgz
sudo cp -a cuda/lib64/* /usr/local/cuda-8.0/lib64/
sudo cp -a cuda/include/* /usr/local/cuda-8.0/include/

TensorFlowの導入

  • pyenv環境
  • python3.5を利用

を仮定する. 適当な仮想環境を作り,その中でGPU版を導入する.

# TensorFlowのインストール(GPU版)
pip install tensorflow-gpu

もしうまくいかない場合は以下を試す(参考:Installing with virtualenv| TensorFlow, The URL of the TensorFlow Python package|TensorFlow).

echo TF_PYTHON_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0-cp35-cp35m-linux_x86_64.whl
pip install --upgrade TF_PYTHON_URL

これで導入できた.

テスト

GPUが利用できているか確認. チュートリアルから以下のコードを試す.

# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))

うまくいけば環境が構築できたことになる.

おまけ:GPUの監視

nvidia-smiコマンドでGPUの使用状況を確認できる.

今後の課題

  • テストをビルドするときに出たエラーの解消
  • DIGITを試す
  • Kerasを試す

参考