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にアップする

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です