実は結構前からGPUを使用した計算に興味を持っていました。
しかし、GPUの威力を感じられそうなグラフィックカードは値段が高く、今まで手がでませんでした。
そんなとき、ラクマを見ていたところ、Geforce GTX 660 Ti(2012年発売)が4,200円で売られているのを見つけました。楽天ポイントが1,000円ちょいあるので、ポイントを使えば3,000円程度で買えることになります。
Geforce GTX 660 Tiはかなり古いグラフィックカードですが、スペックを見るとCUDAコアが1344個もあります。
わりと新しいGeforce GTX 1060(CUDAコアは1280個)と比べても遜色ありません。メモリ周りやクロック数はかなり違いますが(^_^;)
これは使えるかもと思って速攻購入しました。
多分↓の商品に近いかと思います。
↓をクリックするとAmazonの商品ページが開きます。
↓はマイPCにGeforce GTX 660 Tiを取り付けたところです。
今の時代、GPUで計算するなら機械学習でしょということで、まずは導入が容易そうなTensorFlowを使ってみることにしました。
本記事ではGeforce GTX 660 TiでGPU演算を行うためにTensorFlowを導入する方法をご紹介します。
前提
まず前提として、Geforce GTX 660 Tiを使うにはTensorFlowをソースからビルドする必要があります。現在バイナリで配布されているTensorFlowはCUDA Compute Capabilityが3.5以上でないといけないからです。
↓にTensorFlowが対応するGPUの情報が記載されています。
https://www.tensorflow.org/install/gpu
Geforce GTX 660 TiはCUDA Compute Capabilityが3.0であるため、バイナリは使えないのです。
OSはWindowsとLinuxとMacが選べますが、今回はWindowsを選択しました。
Macは持っていませんし、Linuxは関連するソフトウェアの依存関係が分かりにくく面倒そうだなと思ったためです。
Windowsで環境を作成するにあたり、ほぼそのまま使える素晴らしい↓のWebページを見つけました。本記事ではこのページの手順をベースに私の環境に合わせて変更した部分や補足事項を記載していきます。
https://qiita.com/KurozumiGH/items/90e22aef74560dc50bbd
OSとハードウェア
OS:Windows 10 Pro 64bit (ビルド 18362.207)
CPU:Core i7-2600K
メモリ:DDR3 12GB
グラフィックカード:Geforce GTX 660 Ti GDDR5 2GB
各ソフトウェアの入手場所
ビルドと実行に必要なソフトウェアの入手場所
- 「Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3(x64版)」と「Microsoft Build Tools 2015 Update 3」
以前の Visual Studio ソフトウェアのダウンロード | Visual Studio - Visual Studio
- 「MSYS」
https://sourceforge.net/projects/msys2/files/Base/x86_64/
- 「Python 3.6.8」
Python Release Python 3.6.8 | Python.org
※私は「Windows x86-64 executable installer」をダウンロードしました。
CUDA関連ソフトウェアの入手場所
- 「CUDA Toolkit 10.1 Update 1」
- 「cuDNN v7.6.1 (June 24, 2019), for CUDA 10.1」
https://developer.nvidia.com/rdp/cudnn-download
※nVidiaのアカウント作成とログインが必要なのでご注意ください。私は新規にアカウントを作成しました。参考ページではcuDNNが7.5になっていましたが、現在の最新は7.6.1なので7.6.1を導入しました。
TensorFlowのビルド
python ./configure.py を実行してビルドの設定をする際、下記の部分を参考ページから変更しました。
- 「CUDA Compute Capability version」を「3.0」にしました。私の使ったグラフィックカード(Geforce GTX 660 Ti)が3.0までしか対応していないためです。
- 「optimization flags」を「/arch:AVX」にしました。私の使ったCPU(Core i7-2600K)はAVX2に対応していないためです。
動作確認
↓のWebページにGPUのパフォーマンスを計測するサンプルコードが掲載されているのを見つけたため、使わせていただきました。
https://qiita.com/sho8e69/items/66c1662c49ac89a024be
結果、下記のようにCPUを使った場合より4倍速いと出ました。いいですね~。
CPU (s):
4.9759545
GPU (s):
1.0489752999999995
GPU speedup over CPU: 4x
これから何をしようかな~。
まずは鉄板ネタであるMNISTが公開している手書き数字データを使用した文字認識でもしてみようかなと思っています。