はじめに
学校の研究を行うにあたって、Tensorflowによる機械学習が必要になりました。その際、CPUだと時間がかかるのでGPUを用いようとしたのですが、環境構築に1日ほどかかったので、その様子を残しておきたいなと思いこの記事を書きました。プログラミング初心者であるうえ、記事を書くのも初めてなので至らないところも多々あると思いますが読んでいただけると嬉しいです。
環境
・Windows11
・GPU : RTX 3070 Laptop
挫折
まず、なぜ環境構築にこんなにも時間がかかったかを説明します。
はじめは、いろいろなネット記事で紹介されている通り、
- NVIDIAドライバーのインストール
- CUDAのダウンロード
- cuDNNのダウンロード
- Tensorflowのダウンロード
と手順通りに行いました。しかし、TensorflowでGPUを使うことはできませんでした。
色々調べていったところ、WindowsではTensorflow2.11.0以降GPU版は使えないとのことでした。ここにたどり着くまでに多くの時間を費やしてしまいました。
解決策
解決策を調べていくと、次の2つであることがわかりました。
- Tensorflow2.10など古いバージョンで利用する
- WSL2にTensorflowをインストールして利用する
公式ドキュメントで推奨されている方法は2の方法なのですが、なんせ初心者でLinuxすらもあやふやなので今回は比較的簡単な1の方法で環境構築していきたいと思います。
また、いろいろ勉強して身についてきたら2の方法についての記事も書いてみたいと思います。
構築
NVIDIAドライバー
まず初めにNVIDIAドライバーのインストールを行います。以下の公式サイトからダウンロードを行います。
インストールするドライバを選択するために、自分のGPUのスペックを調べます。Windowsのコマンドプロンプトで次のコマンドを実行します。
wmic path win32_VideoController get name
すると次のように表示されます。
私の場合は、GPU:Geforce RTX 3070 Laptop GPU なので以下の画像のようになります。
検索すると以下のように表示されるのでダウンロードを行ってください。
Tensorflow-GPU
GPU版のTensorflowをインストールします。GPU版をインストールすることでCUDAtoolkitとcuDNNが付属したTensorflowを入手できます。
はじめにAnaconda Promptを開き、次のコマンドで新しい環境を作成し有効化してください。公式ドキュメントを見るとPythonの環境は 3.7~3.10が推奨されています。
conda create -n tf-gpu python=3.9
conda activate tf-gpu
続いて次のコマンドで歴代のバージョンを確認してください。
conda search tensorflow
これを打つと、
(省略)
tensorflow 2.8.2 eigen_py310h3184f71_0 pkgs/main
tensorflow 2.8.2 eigen_py37h326eb71_0 pkgs/main
tensorflow 2.8.2 eigen_py38h0b14ea6_0 pkgs/main
tensorflow 2.8.2 eigen_py39h9b0e0cb_0 pkgs/main
tensorflow 2.8.2 gpu_py310h5cc41f4_0 pkgs/main
tensorflow 2.8.2 gpu_py37h39c650d_0 pkgs/main
tensorflow 2.8.2 gpu_py38he639981_0 pkgs/main
tensorflow 2.8.2 gpu_py39h5ca5225_0 pkgs/main
tensorflow 2.8.2 mkl_py310h517747f_0 pkgs/main
tensorflow 2.8.2 mkl_py37h31f2aba_0 pkgs/main
tensorflow 2.8.2 mkl_py38h6f30489_0 pkgs/main
tensorflow 2.8.2 mkl_py39hfd350ca_0 pkgs/main
tensorflow 2.9.1 eigen_py310h7e6dd96_1 pkgs/main
tensorflow 2.9.1 eigen_py310hd297198_0 pkgs/main
tensorflow 2.9.1 eigen_py37h2d80419_1 pkgs/main
tensorflow 2.9.1 eigen_py37hd324010_0 pkgs/main
tensorflow 2.9.1 eigen_py38h1fa63f8_0 pkgs/main
tensorflow 2.9.1 eigen_py38h9efb3fa_1 pkgs/main
tensorflow 2.9.1 eigen_py39h296740f_1 pkgs/main
tensorflow 2.9.1 eigen_py39ha6ebefe_0 pkgs/main
tensorflow 2.9.1 gpu_py310h5ade2b3_0 pkgs/main
tensorflow 2.9.1 gpu_py310hdfba57f_1 pkgs/main
tensorflow 2.9.1 gpu_py37h12a4f0f_0 pkgs/main
tensorflow 2.9.1 gpu_py37h1b18eab_1 pkgs/main
tensorflow 2.9.1 gpu_py38h46f8375_1 pkgs/main
tensorflow 2.9.1 gpu_py38h4a6fda8_0 pkgs/main
tensorflow 2.9.1 gpu_py39h05f4d00_1 pkgs/main
tensorflow 2.9.1 gpu_py39hb21c0df_0 pkgs/main
tensorflow 2.9.1 mkl_py310h0b323c9_0 pkgs/main
tensorflow 2.9.1 mkl_py310h626feff_1 pkgs/main
tensorflow 2.9.1 mkl_py37h6343fec_1 pkgs/main
tensorflow 2.9.1 mkl_py37ha747b87_0 pkgs/main
tensorflow 2.9.1 mkl_py38h7f03810_0 pkgs/main
tensorflow 2.9.1 mkl_py38hff71f30_1 pkgs/main
tensorflow 2.9.1 mkl_py39hb9887a6_0 pkgs/main
tensorflow 2.9.1 mkl_py39hc9ebea8_1 pkgs/main
tensorflow 2.10.0 eigen_py310h1d93ef9_0 pkgs/main
tensorflow 2.10.0 eigen_py37h0b514e4_0 pkgs/main
tensorflow 2.10.0 eigen_py38h465b00b_0 pkgs/main
tensorflow 2.10.0 eigen_py39hfced716_0 pkgs/main
tensorflow 2.10.0 gpu_py310h4d27e69_0 pkgs/main
tensorflow 2.10.0 gpu_py37h5d22f32_0 pkgs/main
tensorflow 2.10.0 gpu_py38h51559ff_0 pkgs/main
tensorflow 2.10.0 gpu_py39h9bca9fa_0 pkgs/main
tensorflow 2.10.0 mkl_py310hd99672f_0 pkgs/main
tensorflow 2.10.0 mkl_py38ha5c4042_0 pkgs/main
tensorflow 2.10.0 mkl_py39ha510bab_0 pkgs/main
tensorflow 2.18.1 cpu_py310h6605a60_0 pkgs/main
tensorflow 2.18.1 cpu_py311h6605a60_0 pkgs/main
tensorflow 2.18.1 cpu_py312h6605a60_0 pkgs/main
tensorflow 2.18.1 cpu_py39h6605a60_0 pkgs/main
と出力されます。「gpu_xx」となっているのがGPU版です。「xx」の部分が「py39」となっているのがPython バージョン 3.9に対応したビルドなのでそれを確認してインストールすれば、望んだ環境をインストールすることができます。
conda install tensorflow=2.10.0=gpu_py39h9bca9fa_0
確認
最後にGPUが認識されているかTensorflow上で確認します。次のコードで確認をすることができます。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 9756898791593678236
xla_global_id: -1,
name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 5733613568
locality {
bus_id: 1
links {
}
}
incarnation: 1701581810037505818
physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 3070 Laptop GPU, pci bus id: 0000:01:00.0, compute capability: 8.6"
xla_global_id: 416903419]
この中に「device_type: "GPU"」というブロックがあるのでGPUを認識していることが確認できます。
以上がTensorflowでGPUを使用する方法となります。
さいごに
もし何かアドバイスなどがあれば、コメントで書いてくれると嬉しいです。