TensorFlowを使ってみる 〜GPUコンピューティング〜

GPUコンピューティングの効果を確認するため、
高速な GPU を搭載した専用PCを組み立て、
CPU と GPU での処理時間を比較してみました。

## GPUコンピューティング

GPUコンピューティングは、大量のコアを使って計算作業を並列処理する事で
計算時間を大幅に短縮する手法です。

[Nvidia - GPUで加速化したコンピューティングとは？](http://www.nvidia.co.jp/object/what-is-gpu-computing-jp.html)

## PC構成

PC構成は、以下となります。
計算に GPU を用いるため、あまり重要ではない CPU のスペックは抑えています。

GPU はコストパフォーマンスのよい GeForce GTX 1080 を選択しました。

||製品名|詳細|
|:-----------------:|:------------------|:------------------|
|GPU|GF-GTX1080-E8GB/BLF|GeForce GTX 1080|
|CPU|Intel Core i5 7500|3.2GHz 4コア|
|メモリ|CMK16GX4M2A2666C16|16GB|
|マザーボード|GA-Z170X-UD3|Z170, LGA1151|
|SSD|CSSD-S6T240NMG1Q|240GB|
|電源|NeoECO Classic NE650C|650W|

## 組み立て

組み立て後のPCの内部になります。

![sb_2017_05_001.png](https://qiita-image-store.s3.amazonaws.com/0/134550/b682b7e2-4792-1700-8644-74a1e8a80a88.png)

## OS

OSは、Ubuntu 16.04 LTS (64bit) をインストール
[Ubuntu](https://www.ubuntu.com/)

![sb_2017_05_ubuntu.png](https://qiita-image-store.s3.amazonaws.com/0/134550/e7379636-5e1f-804f-79b4-b7640d7e8a1e.png)

## Nvidia関連インストール

Nvidia関連をインストール

- ドライバ
- CUDA 8.0
- cuDNN など

参考）
[Installing TensorFlow on Ubuntu](https://www.tensorflow.org/install/install_linux)

## 実行環境

python は 3.5.2 を virtualenv にてインストール
TensorFlowは、GPU版（tensorflow-gpu 1.1.0）をインストールしました。

## 開発環境

IDEは PyCharm をインストール

- PyCharm (Linux)

## 実行時間比較

[前回のエントリー](http://qiita.com/fujin/items/960b6854700d1bd50043)で作成した CIFAR-10 の
カラー画像分類のトレーニングを実行しました。
実行回数は 20000回 でバッチサイズは 50 になります。
（20000 x 50 = 100万回トレーニング）

※ CPU での実行は、iMacの CPU を利用しました。
※ training accuracy は目安になります（正確な精度ではありません）

#### CPU (iMac : Intel Core i5 2.9 GHz)

|step|training accuracy|time|
|:-----------------|:------------------:|:------------------:|
|0|0.100000|0:00:00.083046|
|1000|0.440000|0:02:31.927596|
|2000|0.440000|0:05:03.851899|
|3000|0.700000|0:07:40.492688|
|4000|0.560000|0:10:09.004866|
|5000|0.580000|0:12:36.556484|
|6000|0.580000|0:15:12.126450|
|7000|0.580000|0:17:41.140809|
|8000|0.700000|0:20:14.581239|
|9000|0.600000|0:22:45.350451|
|10000|0.700000|0:25:19.588373|
|11000|0.700000|0:27:50.592196|
|12000|0.740000|0:30:17.858361|
|13000|0.620000|0:33:00.572951|
|14000|0.680000|0:35:43.369907|
|15000|0.700000|0:38:20.477208|
|16000|0.800000|0:40:48.248491|
|17000|0.920000|0:43:18.382643|
|18000|0.780000|0:45:46.533236|
|19000|0.800000|0:48:17.275133|
|20000|0.840000|0:50:47.150484|

#### GPU (GeForce GTX 1080)

|step|training accuracy|time|
|:-----------------|:------------------:|:------------------:|
|0|0.060000|0:00:01.168950|
|1000|0.460000|0:00:06.891809|
|2000|0.540000|0:00:12.568306|
|3000|0.400000|0:00:18.085924|
|4000|0.520000|0:00:23.652687|
|5000|0.560000|0:00:29.273809|
|6000|0.600000|0:00:35.029218|
|7000|0.660000|0:00:40.668440|
|8000|0.760000|0:00:46.297917|
|9000|0.560000|0:00:52.000282|
|10000|0.580000|0:00:57.790308|
|11000|0.760000|0:01:03.411751|
|12000|0.740000|0:01:09.110631|
|13000|0.720000|0:01:14.808173|
|14000|0.760000|0:01:20.417229|
|15000|0.660000|0:01:26.038076|
|16000|0.820000|0:01:31.681729|
|17000|0.840000|0:01:37.353628|
|18000|0.820000|0:01:43.051405|
|19000|0.920000|0:01:48.953982|
|20000|0.840000|0:01:54.729048|


## 結果
CPU では ```50分47秒```かかりましたが、GPU では ```1分54秒```で終了する事が出来ました。
GPU で実行した場合、**約26.7倍** 早くトレーニングが終了する事がわかりました。
<br>

以上、今回は GPUコンピューティングを試してみました。