Python:GPUの利用環境設定

手順
1.GPUに対応したNVIDIAドライバのインストール 2.NVIDIAドライバに対応したCUDAをインストール 3.CUDAに対応したcuDNNをインストール 4.動作確認
1.GPUに対応したNVIDIAドライバのインストール
1-1.まず自分のGPUの詳細を調べる →「dxdiag」をツールバーの検索窓に入力し,directXを開き「ディスプレイ」で確認 →方法はほかにもあるのでどれでもかまわない ![image][スクリーンショット 2022-07-14 113220.png]
1-2.NVIDIAドライバをインストールし,OSにGPUを認識させる
以下のリンクから1-1.で確認した自分のGPUに対応したドライバをダウンロードする NVIDIAドライバDL ![image][スクリーンショット 2022-07-14 113547.png]
●確認 コマンドプロンプトで「nvidia-smi」と入力し GPUの状態や情報が表示されればおk ※nvidia-smiはnvidiaドライバと一緒にインストールされる。コマンドの詳細は追記する 以下リンクに詳細あり nvidia-smiについて補足
![image][スクリーンショット 2022-07-14 132153.png]
2.NVIDIAドライバ(とTensorflow)に対応したCUDA Toolkitをインストール
2-1.CUDA Toolkitのインストール 下記リンクからバージョンなどを選択していき,対応したものをダウンロードする CUDA_toolkit
![image][スクリーンショット 2022-07-14 131525.png]
なお,DL前にTensorflowやNVIDIAドライバとの対応を確認すると確実とのことだが,心が折れがち 公式で確認済みの対応表(tensorflowと) tensorflow
公式で確認済みの対応表(NVIDIAドライバと) NVIDIAドライバ
2-2.CUDAをインストール →すべてデフォルトで,そのまま進めばおk ![image][スクリーンショット 2022-07-14 134333.png]
2-3.環境変数のパスを確認しておく(あとでもおk) →「windowsキー + x」→「システム」→検索窓に「詳細設定」でシステム詳細設定→システムプロパティ「環境変数」を選択 →「環境変数を編集」で検索窓からいきなり入ると編集できない場合あるので注意
→以下の画像のように,フォルダ名が追加されていればおk
![image][IMG_0649.jpg] ![image][IMG_0650.jpg]
●確認 →コマンドプロンプトで以下のコードを入力しGPU情報が表示されればおk →PATHは最後にチェックする
![image][スクリーンショット 2022-07-14 134851.png]
3.CUDAに対応したcuDNNをインストール
3-1.NVIDIAアカウントを作成,登録しCUDAをダウンロード →以下のリンクよりDLするが,アカウントの登録が必要 →なお,読み方は「クーディーエヌエヌ」らしい cuDNNをダウンロード
![image][スクリーンショット 2022-07-14 135232.png]
自分のバージョンにあったものを選択
→zipファイルを解凍し,中身を 任意の ファイルに移動する。。。が,うまくPATHが通らなかったので, 出てきたフォルダの中身を「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.ほげほげ」にコピーして対応した。 CUDAのバージョンによってはPATHが通らないという謎現象もあるらしいが原因は不明汗(;'∀')
![image][IMG_0646.jpg]
解凍した中身をまるっと,
![image][IMG_0647.jpg]
このフォルダに移動
●確認 →コマンドプロンプトで「where cudnn64_8.dll」など入力し,解凍したファイルの名前を入力してファイルまでたどり着ければPATHは通っている
4.動作確認
4-1.tensorflowで確認する場合
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
![image][MicrosoftTeams-image (3).png]
上図のようにGPUの名前が表示されていればおk
4-2.pytorchで確認する場合 →以下リンクよりpytorchを入手 pytorch ![image][スクリーンショット 2022-07-14 165829.png]
自身のバージョンなどを入力すると下にcondaコマンドが表示されるのでそれをコピペして,自身の仮想環境でインストール
インストールしたら以下のコードで認識しているかを確認する
import torch
torch.cuda.is_available()
#True と帰ってくれば認識されている
なお,計算時間はCIFAR-10(車,飛行機など10種のラベル付けをした6万枚の写真セット)なるデータセットを用いて学習をさせて比較
コードは以下参照 性能比較用 このコードの先頭にGPUの認識を変更する一文を挿入 →例えばCUDA_VISIBLE_DEVICESを0とすると0番のGPUのみ、0, 2とすると0番と2番のGPUのみが使用される。-1とするとすべてのGPUが使用されなくなる
import os
import torch
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
print(torch.cuda.is_available())
#False 認識していない
print(torch.cuda.device_count())
#0 ゼロ個ですよ
なお,本環境では10倍ほど早くなった(当社前年比)
First Header | Second Header |
---|---|
python | 3.8.13 |
tensorflow | 2.9.1 |
pytorch | 1.12.0 |
GOU | Quadro RTX 5000 with Max-Q Design |
NVIDIAドライバ | R515 U2(516.59) |
CUDA | 11.7.0_516.01_windows) |
cuDNN | 8.4.1 for CUDA 11.x |
うまくいかないときは以下リンクなど参考に うまくいかない1 うまくいかない2 うまくいかない3 うまくいかない4
追記
nvidia-smiののコマンド →GPUの状態を監視する → --query-gpu=ほげほげ でいろいろ書きだせる。あとCSVでも出力可能。
以下例文
nvidia-smi --query-gpu=timestamp,name,utilization.gpu,memory.used,temperature.gpu --format=csv -l 3
//3秒おきに時間,名前,GPU使用メモリ,GPU温度を書き出す
nvidia-smi --query-gpu=timestamp,name,utilization.gpu,memory.used --format=csv -l 3 -f ./log.csv
//3秒おきに時間,名前,GPU使用メモリ,GPU温度をCSVの別ファイルに書き出して保存
nvidia-smi dmon -s pucvme
//よくわからんがなんかすごそう
あたりが使いそう
コマンドのその他詳細は以下を参照 コマンドなど1 コマンドなど2
入力 | 表示内容 |
---|---|
timestamp | タイムスタンプ |
driver_version | ドライバのバージョン |
count | GPU の数 |
name or gpu_name | GPU の製品名 |
serial or gpu_serial | GPU のシリアルナンバー |
index | GUI ID |
fan.speed | ファンの回転スピード |
memory.total | GPU の合計メモリ量 |
memory.used | GPU の使用中のメモリ量 |
memory.free | GPU の未使用のメモリ量 |
utilization.gpu | GPU の使用率 |
utilization.memory | GPU メモリの使用率 |
temperature.gpu | GPU の温度 |
temperature.memory | GPU メモリの温度 |
その他
●tensorflowの公式対応はNVIDIA製のみとなっているなど,GPU界隈の状況は 「NVIDIAにあらばGPUにあらず」という感じなので,基本的にGPUの購入はNVIDIA製がよろしいかと思われる@2022年時点
●GPU使用率50%ぐらいまでしか上がらない。また,GPUが複数ある時に任意に負荷を振り分けできるのか?などは謎。 →その場面になったらまた習熟し,wikiにアップする