Windows版TensorFlow 2.5~2.10でGPUを使う (CUDAのインストール)
【目的】
Windows環境のTensorFlow 2.5~2.10でGPUを使えるようにします。
【内容】
Windows環境のTensorFlowでCPUよりも高速で処理が行えるGPUを使えるようにします。
過去にTF1系向けに書いたQiitaの記事を、TF2系で使えるように書き換えたものになります。
【Windows版TensorFlow 1.13~1.15でGPUを使う (CUDAのインストール)】- Qiita
大まかには以下の手順を行います。
- ディスプレイドライバのインストールまたは更新
- CUDA のインストール
- cuDNN SDK のインストール
- PATHの設定
- TensorFlowのインストール
詳細手順はTensorFlowの公式手順を参照してください。
【TensorFlow - GPU support】- TensorFlow
【システム構成】
本記事を書いている2021年12月23日時点では以下の通り。
(2022年11月23日更新)
- CUDA architectures 3.5, 3.7, 5.2, 6.0, 6.1, 7.0以上に対応しているGPUが搭載されているPC
【NVIDIA - CUDA GPUs】- NVidia
(※ なお GeoForce MX150 上記サイトに記載されていませんが、動作確認できました) - Windows 11/10/8.1/7 または Windows Server 2019/2016/2012 R2
- Python 3.4以上 (本記事では3.8.12で確認)
- TensorFlow 2.5.0~2.10.0 (本記事では2.5.0 / 2.7.0 / 2.9.0 / 2.10.0で確認)
- CUDA 11.2 (※ バージョン注意)
- cuDNN 8.1.0 for CUDA 11.0, 11.1, 11.2 (※ バージョン注意)
【前提条件】
本記事ではPyhon3.4以上およびpipが使える状態になっていることを想定しています。
なお、Anaconda環境は想定していません。
【1. ディスプレイドライバのインストールまたは更新】
下記サイトより対応するGPUの最新のドライバを取得して、インストールします。
【NVIDIA Driver Downloads】- NVidia
すでにドライバが入っている場合、可能ならばカスタムインストールからクリーンインストールを選択します。
クリーンインストールを選択した場合、設定済みの項目は全て初期化されます。
【2. CUDA 11.2のインストール】
下記サイトよりCUDAをダウンロードしてインストールします。
【NVIDIA - CUDA Zone】- NVidia
Archive of Previous CUDA Releasesから「CUDA Toolkit 11.2.2 (March 2021)」をダウンロードしてください。
【直リン】
【CUDA Toolkit 11.2.2 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 v8.1.0 (January 26th, 2021), for CUDA 11.0,11.1 and 11.2」をダウンロードしています。
ダウンロードしたらzipファイルを解凍して適当な場所に展開します。
場所はどこでも構いませんが、TensorFlowの手順に合わせるのであれば「C:\tools\cuda\bin」に「cuDNN64_8.dll」が含まれるように解凍します。
【4. PATHの設定】
下記を参考にCUDAおよびcuDNNにPATHが通るように設定します。
最低限cuDNNの「cuDNN64_8.dll」が置いてあるディレクトリにPATHが通っている必要があります。
【必須設定】
- C:\tools\cuda\bin (← 上記の例の場合のcuDNN64_8.dllの置き場所)
※ここにPATHに通っていないとTensorFlowでGPUが利用できません
以下オプション (TensorFlowの手順には書いてあるが特に必要ない?)
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
(↑ CUDAのインストーラによってシステム環境変数に設定されます) - C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\CUPTI\lib64
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include
【5. TensorFlowのインストール】
TensorFlowはバージョン1.xx
ではCPUのみを使うバージョンと、GPUを使うバージョンの2種類がありましたが、2.1
以降では、CPU版とGPU版が統合されています。
したがって、以下のコマンドでTensorFlowをインストールすることで、CPU/GPUどちらも利用できます。
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版 |
Discussion