深層学習環境の更新

深層学習環境の更新

火, 12月 19, 2017

前提

既に,Ubuntu 16.04 LTSにCUDAとTensorFlowを入れて深層学習環境をつくるの方法にてCUDA,cuDNN,TensorFlowを導入済みとする.

やりたいこと

  • CUDAのバージョンアップ
  • cuDNNのバージョンアップ
  • TensorFlowの更新

グラフィックカードドライバーとCUDAのバージョンアップ

既にレポジトリを登録しているの,通常のパッケージ更新で大丈夫.

sudo aptitude update
sudo aptitude upgrade

パッケージ依存関係の問題の解消が求められるかも知れない. その場合は設定を考え修正.

ちなみに~/.zshrcの設定は以下のように修正した.

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda

テスト

サンプルを試してみる.

cd /usr/local/cuda/samples
sudo make

OpenGL関係もビルドできるようになったが,実行時エラーが出る. とりあえず今後の課題.

幾つか試す.

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

cuDNNのバージョンアップ

導入したい最新のcuDNNをダウンロードする.NVIDIA Developerのアカウントが必要. ダウンロードしたファイルを展開し,CUDAのディレクトリへコピーする.

tar xzvf cudnn-9.1-linux-x64-v7.tgz
sudo cp -a cuda/lib64/* /usr/local/cuda/lib64/
sudo cp -a cuda/include/* /usr/local/cuda/include/

TensorFlowの更新

CUDAとcuDNNの対応を状況を確認して,適切なものをインストールする. pypiからではCUDAなどのバージョンが適切でない場合があるので,ここではTensorFlow Optimized Wheelsを利用する. 例えば,Python3.5,CUDA9.1であれば,TensorFlow 1.4.1 (GPU, CUDA 9.1)

TensorFlow Optimized Wheelsでは基本的にIntel(R) Math Kernel Library for Deep Neural Networks (Intel(R) MKL-DNN)をサポートするwheelとなっている(そうでないものにはwithout MKLなどの記載がある).そのためMKL-DNNを導入する必要がある. MKL|TensorFlow Optimized Wheelsの通りの手順でインストール可能.

一度古いバージョンをアンインストールし,適切なWheelのURLを指定してインストールする.

pip uninstall tensorflow-gpu tensorflow-tensorboard
pip install --upgrade https://github.com/mind/wheels/releases/download/tf1.4.1-gpu-cuda91/tensorflow-1.4.1-cp35-cp35m-linux_x86_64.whl

これでインストールできた.

テストコードを試して,インストールの完了と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))

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

今後の課題

  • OpenGL系のテストの実行時エラーの解消
最終更新日