Python
GPU
CPU
TensorFlow

【TensorFlow】 CPUとGPUの速度比較

More than 1 year has passed since last update.

「機械学習おもしろい!もっと勉強したい!」と思ったものの、Macbookでは時間がかかりすぎるのでNVIDIAのGTX1080を搭載したPCを買いました。

意外と速度比較の記事がなかったので、色々比較をしてみて随時追加していきます。「買おうかなどうしようかな。」と、悩んでおられる方のご参考になれば幸いです。

機械学習初心者勢なので、至らない点はご容赦ください。

学習対象

MNISTの手書き数字認識を扱います。精度はテストセットのデータの精度を使っています。精度も一応書きますが、あまり気にしなくてもよいです。

比較対象

一応MacbookAirの方のGPUも書いておきましたが、TensorFlowで使えるのは現状NVIDIA製のGPUのみなので、使いません。

PC MacBook Air(Early 2014モデル) Alienware aurora R6
OS MacOS Sierra Windows10 Pro
CPU Intel Core i7 1.7GHz Intel Core i7-7700 3.6GHz
GPU Intel HD Graphics 5000 NVIDIA GTX1080
メモリ 8GB 32GB

NN

5層、ユニット数=(前層 + 出力層) / 3 * 2、ミニバッチサイズ100、バッチノーマライゼーション

実行コード
https://github.com/syatyo/tensorflow-practice/blob/master/five_layer_nn_batch_norm.py

1000エポック

環境 CPU GPU
学習時間(秒) 38.5 12.5

精度: 0.9762

約3倍の速さになったっていう記事は見たことありましたが、だいたいそんな感じですね。

10000エポック

環境 CPU GPU
学習時間(秒) 334.6 73.5

精度: 0.9856

10000エポック回しても、ANNではそこまでの差はなさそうです。ギリCPUでも耐えられるレベルでしょうか。

CNN

入力層→Conv1→Pooling1→Conv2→Pooling2→全結合→ドロップアウト→出力層
ミニバッチサイズ50、エポック1000、ドロップアウトの利用

実行コード
https://github.com/syatyo/tensorflow-practice/blob/master/cnn.py

1000エポック

環境 CPU GPU
学習時間(秒) 253.5 9.2

精度: 0.941

CNNだと明らかに速度に差が出ます。10秒と4分では大違いですね。

10000エポック

環境 CPU GPU
学習時間(秒) 1906.5 57.7

精度: 0.9897

これくらい回すと、CPUでは30分強かかります。

LSTM

入力層→LSTM→出力層、ドロップアウトなし。
ミニバッチサイズ128、隠れ層のユニット数128、エポック10000

実行コード
https://github.com/syatyo/tensorflow-practice/blob/master/rnn_lstm.py

1000エポック

環境 CPU GPU
学習時間(秒) 81.3 17.0

精度: 0.953125

意外とCNNよりはCPUでも早く学習しています。

10000エポック

環境 CPU GPU
学習時間(秒) 800.5 127.7

精度: 0.9921875

CNNの1万エポックよりはマシですが、それでも13分強の待ち時間は辛いですね。

最後に

何か計測の要望あればコメントお願いします。