みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

深層学習用に低火力PCを組み立てた(4)

人工知能技術戦略会議等主催 第1回AIチャレンジコンテスト[1][2]で入賞賞品としていただいたNVIDIA GTX-1060 Founders Editionを活用しようと, 「低火力コンピューティング」のPCを組み立てた.

前回までで, Intel HD GraphicsやNVIDIA Driverなどの不具合対策は一応完了した.
今回は, 深層学習の環境構築(CUDA, cuDNN, Tensorflow, Keras等)について紹介する.

関連記事:

5. 深層学習の環境構築
深層学習の環境構築に関しては多くの記事があるので, 簡単に紹介するにとどめる.

5.1 CUDAインストール
CUDA Toolkit Download[3]から, Ubuntu16.04用のインストーラをダウンロード.

f:id:moonlight-aska:20170812145858p:plain

NVIDIAのドライバインストールの際に, "--no-opengl-files"オプションを指定してインストールを行ったので, CUDAは以下のようなオプションでインストールした.

$ chmod a+x cuda_8*.run

$ sudo ./cuda_8.0.61_375.26_linux.run --silent --no-opengl-libs --toolkit

$ sudo ./cuda_8.0.61.2_linux.run

$ echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc
$ source ~/.bashrc

5.2 cuDNNインストール
深層学習でGPUを使用する場合には, cuDNNが必要となる.
cuDNNをダウンロードするには, 事前にメンバー登録が必要なので要注意.

また, cuDNNはCUDAやTensorflowなどとバージョンを合わせる必要があるので, こちらも要注意.
Tensorflow(r1.2.1)でGPUを使用する場合, CUDA Toolkit 8.0, cuDNN v5.1が必要なので, 対応したファイルをダウンロードする.

$ tar zxvf cudnn-8.0-linux-x64-v5.1.tgz

$ sudo cp -a cuda/lib64/* /usr/local/cuda/lib64/
$ sudo cp -a cuda/include/* /usr/local/cuda/include/
$ sudo ldconfig

5.3 Tensorflow & Kerasインストール
Installing TensorFlow on Ubuntu[5]には, 幾通りかインストール方法が記載されているが, 私の場合はpyenv+Anacondaを使ってインストールした.

$ conda create -n tensorflow python=3.6

$ source activate tensorflow

(tensorflow)$ tfBinaryURL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.2.1-cp36-cp36m-linux_x86_64.whl
(tensorflow)$ pip install --ignore-installed --upgrade tfBinaryURL

(tensorflow)$ conda install keras

(※) "conda install tensorflow-gpu"ででもインストールできるが, CUDA 7.5/cuDNN v5.1なのでNG.

6. 低火力コンピューティングの効果確認
最後に, GPUの効果を確認してみる.
比較には, kerasのサンプルの1つであるmnist_cnn.pyを用いた.

6.1 GPUなし

poch 11/12
60000/60000 [==============================] - 68s - loss: 0.0403 - acc: 0.9882 - val_loss: 0.0283 - val_acc: 0.9911
Epoch 12/12
60000/60000 [==============================] - 68s - loss: 0.0399 - acc: 0.9884 - val_loss: 0.0270 - val_acc: 0.9909
Test loss: 0.0269925357029
Test accuracy: 0.9909

real    13m56.274s
user    101m3.712s
sys     2m54.828s

6.2 GPUあり

Epoch 11/12
60000/60000 [==============================] - 7s - loss: 0.0389 - acc: 0.9880 - val_loss: 0.0267 - val_acc: 0.9908
Epoch 12/12
60000/60000 [==============================] - 7s - loss: 0.0368 - acc: 0.9889 - val_loss: 0.0255 - val_acc: 0.9900
Test loss: 0.0255203519034
Test accuracy: 0.99

real    1m31.293s
user    1m34.936s
sys     0m12.196s

f:id:moonlight-aska:20170812160722p:plain

GPUありの場合の方が, realの時間で比較すると10倍程度速いようだ.

低火力コンピューティングなので, こんなものかな!?

これまで, Deep Learningによる画像分類を主に試してきたが, このPCとYOLO v2[5]を使ってリアルタイムのオブジェクト検出などもやってみたい.

----
参照URL:
[1] SIGNATE - Data Science Competition
[2] 第1回AIチャレンジコンテスト(料理分類部門)に挑戦してみた!! (3) - みらいテックラボ
[3] CUDA Toolkit 9.2 Download | NVIDIA Developer
[4] NVIDIA cuDNN | NVIDIA Developer
[5] YOLO: Real-Time Object Detection




CUDA C プロフェッショナル プログラミング (impress top gear)

CUDA C プロフェッショナル プログラミング (impress top gear)


並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング

並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング


はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)

はじめてのCUDAプログラミング―驚異の開発環境[GPU+CUDA]を使いこなす! (I・O BOOKS)


CUDAプログラミング実践講座 ? 超並列プロセッサにおけるプログラミング手法

CUDAプログラミング実践講座 ? 超並列プロセッサにおけるプログラミング手法