コンピューター好きのブログ

主にコンピューター・ラズパイと電子工作・オーディオ関連の記事を書いています。

古いGPU(GeForce GTX 660 Ti)を使ってTensorFlowで深層学習したら感動しました

スポンサーリンク

以前、古いGPU(NVIDIA GeForce GTX 660 Ti)を使用したTensorFlow環境を構築した記事を書きました。

www.toomath.net

このとき、MNISTのデータを使って手書き数字を学習させてみたいと書いていましたが、やっと試すことができましたのでご紹介します。

今回の目的

GPUの威力を味わってみたいので、MNISTデータをディープランニング(深層学習)する速度をCPUとGPUで比較します。

MNISTを使うサンプルコードを入手する

まずはMNISTデータを深層学習するプログラムが必要です。

最初は一からプログラムのコードを書かないといけないと思っていましたが、面白そうだなと思って前に購入していた下記の本にMNISTを使うサンプルコードのダウンロード方法が書かれていました。

増補改訂Pythonによるスクレイピング&機械学習 開発テクニック

増補改訂Pythonによるスクレイピング&機械学習 開発テクニック

  • 作者:クジラ飛行机
  • 出版社/メーカー: ソシム
  • 発売日: 2018/12/15
  • メディア: 単行本
 

いや~ありがたい!慎んで使わせていただきます!

この本、まだあまり読み込んでいないのですが、機械学習だけでなくスクレイピングについても記載されておりとても面白いです。実践的で様々なサンプルコードが入手できるのですぐに試してみたいときは非常に重宝します。

ただし、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を使用しています。

TensorFlowをCPUで動かしたときの負荷状況

TensorFlowをCPUで動かしたときの負荷状況

GPUの処理速度を測定

次にGPU(GeForce GTX 660 Ti)です。

結果は2分48秒でした。約12分の1の時間で処理が終わりました。

GPU超速い!感動してしまいました。

CPU・GPUの負荷を見ると以下のようにCPUはそこそこでGPUをかなり使用しています。

TensorFlowをGPUで動かしたときの負荷状況

TensorFlowを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を使った場合の性能が気になります。(また横道にそれようとしている(^_^;))