Windows環境へのTensorFlow環境セットアップ - graspPlugin/wiki GitHub Wiki

はじめに

Windows上で深層学習開発を行うための環境構築を行います. 今回はフレームワークにTensorFlowを導入しますが,PyTorchなどの他のフレームワークであっても大まかな手順は同様です.

ここではNvidia社製のGPUが搭載されているパソコンを前提として,GPUのドライバやCUDA,GPU版TensorFlowの導入について説明します.

環境・バージョン

ハードウェア構成

  • CPU : Intel Core i9-9900K
  • GPU : Nvidia GeForce RTX 2080Ti

OS

Windows11 22H2

ドライバ

  • NVIDIA Driver : 460.90
  • CUDA Toolkit : 11.2
  • cuDNN : 8.1

ソフトウェア

  • Anaconda3 : 2022.10
  • Python : 3.8
  • TensorFlow : 2.5.0 GPU

既にNVIDIAのドライバが入っている方向け

NVIDIA Driverが既にパソコンに導入されている方は,CUDA Toolkitをインストールする際に失敗する場合があります.そのため予めDDU(Display Driver Uninstaller)といったツールを用いてGPU関連のドライバを完全削除することをおすすめします.msiのこちらのページが参考になります.

導入

バージョンの決定

深層学習の開発環境構築で重要なのが各ドライバやソフトウェア間のバージョン互換性を確保することです.

NVIDIA Driver, CUDA, cuDNN, TensorFlowの4つのバージョンを適切に決定する必要があります.

バージョンを決定していく順番ですが,まずはTensorFlowのバージョンを決めることをお勧めします.

こちらのページの後半に,テスト済みのビルド構成という項目があり,そこにTensorFlowとそれに対応するツールのバージョンが表で示されています.LinuxマックOSという2つの項目に分かれていますがLinuxのほうを参照していただいて問題ありません.そこから更にCPUGPUに分かれていますが,今回はGPUを使用するのでGPUの表を参照します.

表には様々な項目がありますが,今回注目するのはPython バージョン,cuDNNおよびクーダの3点です.

今回はTensorFlowのバージョンを2.5.0とし,そこから各ツールのバージョンを確認し以下のように決定しました.Pythonは表を見ればわかるようにバージョン3.6から3.9の範囲で使用できますが,今回は安定性を考慮し3.8としました.

  • Python : 3.8
  • cuDNN : 8.1
  • CUDA : 11.2

次にNVIDIA Driverのバージョンを決定します.これはCUDAのバージョンに依存します.こちらのページのTable 2にDriverとCUDAのバージョンの互換表が記載されています.今回はCUDA 11.2を使用するので,表のCUDA 11.2.xに注目します.そしてWindows x86_64 Driver Versionを参照すると>=452.39と記載されています.つまりDriverはバージョン452.39以上を導入すれば問題ないことが分かります.今回はまた後ほど説明しますが,以下のバージョンに決定しました.

  • NVIDIA Driver : 460.89

ここまでで4つのツールのバージョンを決定することができましたので,次の手順からは実際にそのバージョンのツールを導入していきます.

CUDAおよびNVIDIA Driverの導入

インストーラのダウンロード

Googleでcuda XX.X(XX.Xはバージョン)と検索していただけると多くの場合CUDA Toolkit XX.X Downloads - NVIDIA Developerというページが先頭にあらわれます.こちらをクリックしていただけるとダウンロードが可能となります.今回はバージョン11.2ですのでこちらのページになります.

Select Target Platformで導入するOSなどを選択していきます.

  • Operating System -> Windows
  • Architecture -> x86_64
  • Version -> 10

最後にInstaller Typeですが,これはファイルを予めすべてダウンロードした状態でインストールを開始するexe(local)か,インストール途中にファイルをダウンロードするexe(network)を選択します.個人的にはexe(local)のほうをおすすめします.選択しますとDownload(2.9GB)というボタンが出現するのでそれをクリックしインストーラをダウンロードします.

システムへのインストール

ダウンロードしたインストーラをダブルクリックで起動します.

最初にシステムの互換性チェックに入り,その後使用許諾契約書に同意し次に進みます.

インストールオプションですが,ここで下のカスタム(詳細)を選択します.するとインストールするコンポーネントをチェックで選択する画面に移ります.

CUDAは必須として,NVIDIA GeForce Experience co...Other componentsは今回は必要ありませんので自分の好みで導入するか決めましょう.今回は両方ともチェックを外しました.最後のDriver componentsですが,これはNVIDIA Driverのことです.今回ダウンロードしてきたインストーラではバージョン460.89のDriverをCUDAと一緒に導入することができます.今回はここにチェックを入れることとします.もし予めより最新のNVIDIA Driverが導入されている場合はここのチェックは外す必要があります.チェックを終えたら次へをクリックします.

インストール場所の選択画面に移ります.こちらはデフォルトの状態で構いません.

あとはインストール画面まで進むだけです.これによりCUDAとそれに対応するDriverのシステムへのインストールが完了します.

環境変数の設定

TensorFlowからGPUの機能を使用するためには適切に環境変数が設定されている必要があります.Windowsのスタート画面でシステム環境変数の編集と検索しクリックします. 表示された画面の下のほうに環境変数(N)...というボタンがあるのでクリックします.

下半分のシステム環境変数(S)に注目します. 今回のCUDAの導入でCUDA_PATHCUDA_PATH_V11_2という変数が新たに作成されていることを確認します.もし存在しない場合は,下の新規(W)...のボタンから作成します.変数名はCUDA_PATHおよびCUDA_PATH_V11_2であり,それぞれの変数値はデフォルトのインストール場所ですと以下のようになります.

  • CUDA_PATH -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2
  • CUDA_PATH_V11_2 -> C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2

次にシステム環境変数(S)Path変数を選択した状態で編集(I)...ボタンをクリックし,以下の2つのディレクトリが記載されていることを確認する.存在しない場合は追記します.

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\libnvvp

動作確認

コマンドプロンプトを開きnvcc --versionと入力します.以下のように出力されたら導入成功です.

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Nov_30_19:15:10_Pacific_Standard_Time_2020
Cuda compilation tools, release 11.2, V11.2.67
Build cuda_11.2.r11.2/compiler.29373293_0

cuDNNの導入

Nvidiaアカウントの作成

cuDNNのダウンロードページを閲覧するためにはNvidiaのアカウントが必要となるので,予め作成します.以降はログインを行った状態で説明を進めます.

ファイルのダウンロード

こちらからcuDNNのダウンロードページに飛びます.今回はバージョン8.1を導入するので,Download cuDNN v8.1.0 (January 26th, 2021), for CUDA 11.0,11.1 and 11.2をクリックし開きます.上のLibrary for Windows and Linux, Ubuntu(x86_64, armsbsa, PPC architecture)の項目にあるcuDNN Library for Windows (x86)をクリックしファイルをダウンロードします.(リンクにx86と記載されているがx64システムでも問題なく動作するので気にしなくて大丈夫です).

ファイルのコピー

ダウンロードしたzipファイルを展開するとcudaファイルの中にbin,includeおよびlibの3つのフォルダがあるので,これらを以下のフォルダにコピーします.

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2

動作確認

コマンドプロンプトを開きwhere cudnn64_8.dllと入力します.以下のように出力されたら導入成功です.

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin\cudnn64_8.dll

Anacondaの導入

Anacondaのダウンロードページに飛び,DownloadのボタンからWindows用のインストーラをダウンロードします.インストーラを起動し導入を行いますが,すべて設定などはすべてデフォルトで問題ありません.Next >ボタンを押していきシステムへのインストールを行います.

TensorFlowの導入

TensorFlow用仮想環境の作成

Pythonは複数の仮想環境を作り,用途ごとにPythonのバージョンやインストールするライブラリなどを個別に管理することができます.今回はAnacondaを用いて仮想環境を作成します.

スタートメニューでAnaconda Prompt (anaconda3)と検索しクリックします.このプロンプトで仮想環境の管理やライブラリのインストールなどを行います. プロンプトには次のように表示されています(xxxxはユーザ名です).

(base) C:\Users\xxxx>

ここでパスの前に表記されているbaseが現在使用している仮想環境の名前になります.

存在する仮想環境の一覧を出力するには以下のコマンドを実行します.

conda info -e

例として次のように出力されます.

# conda environments:
#
base                  *  C:\Users\xxxx\anaconda3

それではTensorFlow用の仮想環境を作ってみましょう.バージョン2.5.0を使用するので仮想環境の名前はtf250とします.

プロンプトで以下のコマンドを実行します.python=で仮想環境において使用するPythonのバージョンを決めることができます.今回は3.8を使用すると決めましたのでpython=3.8とします.

conda create -n tf250 python=3.8

実行するとログが表示され最後に

Proceed ([y]/n)?

と表示されるのでyを入力しEnterを押します.

TensorFlow用仮想環境への切り替えとSpyderの導入

仮想環境を作っただけではまだその環境には入れていません.以下のコマンドで作成したtf250環境に切り替えましょう.

conda activate tf250

そうするとプロンプトに表示される文字列が以下のようになります.

(tf250) C:\Users\xxxx>

一番最初の現在入っている仮想環境を示す文字列がTensorFlow用に作成したものに変化しています.

ちなみに今は実行しませんが,仮想環境を抜けたい(baseに戻る)場合は次のコマンドを実行します.

conda deactivate

tf250環境に入った状態でPython用の統合開発環境であるSpyderを導入したいと思います. 以下のコマンドを入力しSpyderライブラリを導入します.

conda install spyder

完了したら,スタートメニューでSpyderと検索すると次に示す2つが出てくると思います.

  • Spyder (tf250)
  • Spyder (anaconda3) 仮想環境ごとにSpyderの起動アプリが生成されています.anaconda3はbase環境での起動用です. tf250環境のSpyderを立ち上げたい場合はSpyder (tf250)をクリックします.

pipによるTensorFlowの導入

tf250環境において以下のコマンドを実行します.

pip install tensorflow-gpu==2.5.0

途中pylint,black,astroidパッケージのバージョン競合でエラーが出現しますが問題ありません.

動作確認

プロンプトでpythonと入力しPythonを起動します.TensorFlow側でGPUを認識できているかを確認します. 次の2行をPythonで実行します.

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

今回は次のように出力されました.

2023-03-03 09:13:16.149078: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1733] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 11.00GiB deviceMemoryBandwidth: 573.69GiB/s
2023-03-03 09:13:16.149271: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1871] Adding visible gpu devices: 0
2023-03-03 09:13:16.149429: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1258] Device interconnect StreamExecutor with strength 1 edge matrix:
2023-03-03 09:13:16.149557: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1264]      0
2023-03-03 09:13:16.149700: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1277] 0:   N
2023-03-03 09:13:16.149925: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/device:GPU:0 with 8958 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 13901624437085838620
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 9393471488
locality {
  bus_id: 1
  links {
  }
}
incarnation: 8361509201531213874
physical_device_desc: "device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5"
]

deviceでCPUのほかにGPUが出力されていたら,TensorFlowからGPUが正常に認識されているということです.