以前、古いGPU(NVIDIA GeForce GTX 660 Ti)を使用したTensorFlow環境を構築した記事を書きました。
このとき、MNISTのデータを使って手書き数字を学習させてみたいと書いていましたが、やっと試すことができましたのでご紹介します。
今回の目的
GPUの威力を味わってみたいので、MNISTデータをディープランニング(深層学習)する速度をCPUとGPUで比較します。
MNISTを使うサンプルコードを入手する
まずはMNISTデータを深層学習するプログラムが必要です。
最初は一からプログラムのコードを書かないといけないと思っていましたが、面白そうだなと思って前に購入していた下記の本にMNISTを使うサンプルコードのダウンロード方法が書かれていました。
いや~ありがたい!慎んで使わせていただきます!
この本、まだあまり読み込んでいないのですが、機械学習だけでなくスクレイピングについても記載されておりとても面白いです。実践的で様々なサンプルコードが入手できるのですぐに試してみたいときは非常に重宝します。
ただし、Pythonの使い方みたいなことは書いていないので基本的なPythonの知識が必要です。
CPUを使うように改造する
私の環境では入手したサンプルコードを動かすとデフォルトでGPUを使います。
このため、サンプルコードをコピー&変更してCPUで処理させるようにしました。
以前の記事で記載したCPUとGPUの処理速度を測るコードを参考に、tensorflowモジュール(tf)の使用箇所をすべて下記のようにしました。
with tf.device('/cpu:0'):
tf.xxxxx
正直なところ私はPythonがよくわかっていないため上記のようにしましたが、もっと良い書き方があるのだと思います。ちなみに以前の記事にも書きましたが、下記のページに記載のコードを参考にさせていただきました。
https://qiita.com/sho8e69/items/66c1662c49ac89a024be
CPUとGPUの処理速度を比較する
CPUの処理速度を測定
それではサンプルコードを使ってMNISTデータの深層学習を行います。まずはCPU(Intel Core i7-2600K オーバークロックなし)です。
結果は23分8秒でした。
タスクマネージャーでCPU・GPUの負荷を見ると以下のようにかなりCPUを使用しています。
GPUの処理速度を測定
次にGPU(GeForce GTX 660 Ti)です。
結果は2分48秒でした。約12分の1の時間で処理が終わりました。
GPU超速い!感動してしまいました。
CPU・GPUの負荷を見ると以下のようにCPUはそこそこでGPUをかなり使用しています。
まとめ
簡単にGPUのコスパの良さを考えてみます。
まず性能について。
2020年1月時点でPassmarkのCPUスコア最上位AMD Ryzen Threadripper 3970XのCPUスコアが48020、対するCore i7-2600Kは8430です。その性能比は約5.7倍。
一方、GeForce GTX 660 Tiを使うとCore i7-2600Kの約12倍の速さで深層学習の処理が行えています。
次に価格ですが、Threadripper 3970Xは驚異の約25万円。一方私が入手したGeForce GTX 660 Tiは4200円。その比は約59倍。
用途を限定すれば59分の1の価格で今のハイエンドCPUを超えるかもしれない※ことに衝撃を受けました。
※もちろん計算内容によるでしょうし、いつでもGPUが有利とはいえないと思います。また、AVXやAVX2などの拡張命令を考慮していないため全然厳密ではありません。
これだけ効果を実感すると有効活用してみたくなりますね~。
今度はなにをしようか思案中です。
あとAVX2を使った場合の性能が気になります。(また横道にそれようとしている(^_^;))