Windows版TensorFlow 2.1以上でGPUを使う (CUDAのインストール)

公開:2020/10/21
更新:2020/11/02
5 min読了の目安(約4800字TECH技術記事

【目的】

Windows環境のTensorFlow (2.1以上)でGPUを使えるようにします。

【内容】

Windows環境のTensorFlowでCPUよりも高速で処理が行えるGPUを使えるようにします。
過去にTF1系向けに書いたQiitaの記事を、TF2系で使えるように書き換えたものになります。
【Windows版TensorFlow 1.13~1.15でGPUを使う (CUDAのインストール)】- Qiita

大まかには以下の手順を行います。

  • ディスプレイドライバのインストールまたは更新
  • CUDA 10.1のインストール
  • cuDNN SDKのインストール
  • PATHの設定
  • TensorFlowのインストール

詳細手順はTensorFlowの公式手順を参照してください。

【TensorFlow - GPU support】- TensorFlow

【システム構成】

本記事を書いている2020年10月21日時点では以下の通り。

  • CUDA architectures 3.5, 3.7, 5.2, 6.0, 6.1, 7.0以上に対応しているGPUが搭載されているPC
     【NVIDIA - CUDA GPUs】- NVidia
     (※ なお GeoForce MX150 上記サイトに記載されていませんが、動作確認できました)
  • Windows 10/8.1/7 または Windows Server 2019/2016/2012 R2
  • Python 3.4以上 (本記事では3.7.9で確認)
  • TensorFlow 2.1.0以上 (本記事では2.3.1で確認)
  • CUDA 10.1
  • cuDNN 7.6 for CUDA 10.1

【前提条件】

本記事ではPyhon3.4以上およびpipが使える状態になっていることを想定しています。
なお、Anaconda環境は想定していません。

【1. ディスプレイドライバのインストールまたは更新】

下記サイトより対応するGPUの最新のドライバを取得して、インストールします。
【NVIDIA Driver Downloads】- NVidia

すでにドライバが入っている場合、可能ならばカスタムインストールからクリーンインストールを選択します。
クリーンインストールを選択した場合、設定済みの項目は全て初期化されます。

【2. CUDA 10.1のインストール】

下記サイトよりCUDAをダウンロードしてインストールします。
【NVIDIA - CUDA Zone】- NVidia

Archive of Previous CUDA Releasesから「CUDA Toolkit 10.1 update2 (Aug 2019)」をダウンロードしてください。
【直リン】
【CUDA Toolkit 10.1 update2 Archive】- NVidia

インストール自体はデフォルトで構いません。

【2.1 CUDAインストール時に「Visual Studio Integration」のインストールに失敗する場合】

以下の記事を参考にしてください。
【Windows端末にCUDAをインストールする際に、「Visual Studio Integration」のインストールに失敗する場合】- Qiita

【3. cuDNN SDKのインストール】

下記URLからcuDNNをダウンロードします。
上記でダウンロードしたCUDAのバージョンに合ったものをダウンロードしてください。
なお、ダウンロード時には開発者登録を行う必要があります。

【NVIDIA - NVIDIA cuDNN】- NVidia

「Download cuDNN >」のボタン押してダウンロードページに進んでください。

「☑ I Agree To the Terms of the cuDNN Software License Agreement」にチェックをしたうえで、「Archived cuDNN Releases」をクリックしてください。

本手順では「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1」をダウンロードしています。

cuDNNのバージョンが7.6for CUDA 10.1のものをダウンロードしてください

ダウンロードしたらzipファイルを解凍して適当な場所に展開します。
場所はどこでも構いませんが、TensorFlowの手順に合わせるのであれば「C:\tools\cuda\bin」に「cuDNN64_7.dll」が含まれるように解凍します。

【4. PATHの設定】

下記を参考にCUDAおよびcuDNNにPATHが通るように設定します。
最低限cuDNNの「cuDNN64_7.dll」が置いてあるディレクトリにPATHが通っている必要があります。

【必須設定】

  • C:\tools\cuda\bin (← 上記の例の場合のcuDNN64_7.dllの置き場所)
     ※ここにPATHに通っていないとTensorFlowでGPUが利用できません

以下オプション (TensorFlowの手順には書いてあるが特に必要ない?)

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
     (↑ CUDAのインストーラによってシステム環境変数に設定されます)
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\lib64
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include

【5. TensorFlowのインストール】

TensorFlowはバージョン1.xxではCPUのみを使うバージョンと、GPUを使うバージョンの2種類がありましたが、2.1以降では、CPU版とGPU版が統合されています。
したがって、以下のコマンドでTensorFlowをインストールすることで、CPU/GPUどちらも利用できます。

TensorFlowのインストール
pip install tensorflow

【動作確認】

以下のコマンドを実行します。

確認
python -c "from tensorflow.python.client import device_lib;print(device_lib.list_local_devices());"

正常に動作していれば Successfully opened dynamic library ****.dll と各種DLLが読み込まれたと表示されます。

DLLの読み込みに失敗した場合は Could not load dynamic library '****.dll'; dlerror: ****.dll not found のように表示されます。
この場合、CUDAのセットアップが正常にできていないか、PATHが通っていない状態です。
再インストールを試みるか、PATHの設定を見直してください。

正常に起動した場合、出力結果に Created TensorFlow device (/device:GPU:0 with xxxx MB memory) -> physical GPU (device: 0, name: xxxxx, pci bus id: 0000:01:00.0, compute capability: x.x)device_type: "GPU" の文言が確認できればGPUを認識しています。
(下記の例では「GeForce MX150」を認識しています)

【TensorFlowとCUDA】

TensorFlowを使ったプログラムは、CPU版で動いていたものはそのままGPU版で動きます。
内部処理がすべてCUDAを利用するように変更されているため、プログラムを変更すことなくGPUを利用できるようになります。

また、下記のようにCPUかGPUかを明示的に指定して実行することも可能です。

import tensorflow as tf
model = tf.keras.applications.vgg16.VGG16(weights='imagenet')

# CPUで推論
with tf.device('/cpu:0'):
    pred = model.predict(... <省略> ...)

# GPUで推論
with tf.device('/gpu:0'):
    pred = model.predict(... <省略> ...)

【GPU利用時の速度差】

参考までにVGG16による画像300枚の推論結果を置いておきます。
(batch_size=16)

スペック 処理時間 備考
Core i7 8550U 1.8GHz 74秒 CPU版
上記 + GeForce MX150 6.2秒 GPU版