Ubuntu 16.04 LTSにCUDAとTensorFlowを入れて深層学習環境をつくる
Ubuntu 16.04 LTSにCUDAとTensorFlowを入れて深層学習環境をつくる
木, 2月 23, 2017
やりたいこと
- 深層学習やりたい
- 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の使用状況を確認できる.
今後の課題
参考
最終更新日