watch nvidia-smiでGPU使用率などを確認・リアルタイムモニタリング
NVIDIAのGPUの使用率やメモリ使用量、消費電力、温度などはnvidia-smi
コマンドで確認できる。「smi」は「System Management Interface」の略。
ここでは以下の内容について説明する。
nvidia-smi
コマンドのインストールと使い方nvidia-smi
コマンドを定期実行:-l
,-lms
nvidia-smi
コマンドをCSV形式で出力・保存watch nvidia-smi
でリアルタイムにモニタリング(Ubuntuの場合)
TensorFlowやPyTorchで実際にGPUが使われているかを確認するには、対象のプログラムの実行中にnvidia-smi
を実行し、メモリの使用量などを確認すればよい。リアルタイムでモニタリングしたい場合は、-l
オプションやwatch
コマンドとの組み合わせで定期実行を行う。
nvidia-smiコマンドのインストールと使い方
nvidia-smi
はNVIDIAのドライバと一緒にインストールされる。
The nvidia-smi utility normally gets installed in the driver install step. It cannot/does not get installed in any other installation step. In what step is nvidia-smi supposed to be installed? - CUDA / CUDA Programming and Performance - NVIDIA Developer Forums
インストールされていない、使えない、といった場合は、上のQ&Aの回答にもあるようにNVIDIAのドライバを公式の方法で再度インストールし直してみるとよい。
nvidia-smi
コマンドを実行すると、以下のようにGPUの使用率やメモリ使用量、消費電力、温度などが表示される。
$ nvidia-smi
Sat Mar 6 14:06:09 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:01:00.0 On | N/A |
| 23% 43C P0 61W / 250W | 247MiB / 11175MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1042 G /usr/lib/xorg/Xorg 115MiB |
| 0 N/A N/A 1295 G /usr/bin/gnome-shell 129MiB |
+-----------------------------------------------------------------------------+
-h
または--help
オプションで使い方が表示される。ざっとでも目を通しておくことをおすすめする。
$ nvidia-smi -h
nvidia-smiコマンドを定期実行: -l, -lms
nvidia-smi
コマンドが出力するのは、コマンドが実行されたタイミングでの結果。
nvidia-smi
コマンドを定期実行しGPUの状態を継続的に監視するには、-l <SEC>
または--loop=<SEC>
を使う。<SEC>
には実行間隔の秒数を整数で指定する。小数は指定できない。
1秒未満の間隔を指定したい場合は-lms <MSEC>
または--loop-ms=<MSEC>
を使う。ミリ秒単位で指定できる。
$ nvidia-smi -l # デフォルトは5秒間隔
$ nvidia-smi -l 1 # 1秒間隔
$ nvidia-smi -lms 500 # 500ミリ秒 = 0.5秒間隔
Ctrl + c
で終了。
実際に実行してみると分かるが、-l
や-lms
オプションを付けると古い結果が残ったまま次々に新しい結果が出力される。
ログを残したい場合は次に紹介するシンプルなCSV形式での出力、リアルタイムでGPUの状態を監視するには最後に紹介するwatch
コマンドとの組み合わせ(Ubuntuの場合)がおすすめ。
nvidia-smiコマンドをCSV形式で出力・保存
--query-gpu=<...>
や--query-compute-apps=<...>
オプションで出力情報を指定した上で--format=csv
とすると、結果がシンプルなCSV形式で出力される。さらに-l
や-lms
オプションと組み合わせると定期的に実行した結果が得られる。
--query-gpu=<...>
はGPU単位での情報。出力したいプロパティをカンマ区切りで指定する。プロパティ一覧は--help-query-gpu
で確認可能。
$ nvidia-smi --query-gpu=timestamp,name,utilization.gpu,memory.used --format=csv -l 3
timestamp, name, utilization.gpu [%], memory.used [MiB]
2021/03/06 14:21:31.143, GeForce GTX 1080 Ti, 0 %, 440 MiB
2021/03/06 14:21:34.144, GeForce GTX 1080 Ti, 0 %, 440 MiB
2021/03/06 14:21:37.145, GeForce GTX 1080 Ti, 15 %, 575 MiB
2021/03/06 14:21:40.145, GeForce GTX 1080 Ti, 36 %, 10595 MiB
2021/03/06 14:21:43.146, GeForce GTX 1080 Ti, 35 %, 10594 MiB
--query-compute-apps=<...>
はプロセス単位での情報。出力したいプロパティをカンマ区切りで指定する。プロパティ一覧は--help-query-compute-apps
で確認可能。
$ nvidia-smi --query-compute-apps=timestamp,pid,name,used_memory --format=csv -l 3
timestamp, pid, process_name, used_gpu_memory [MiB]
2021/03/06 14:25:02.909, 4986, /usr/bin/python3, 10181 MiB
2021/03/06 14:25:05.909, 4986, /usr/bin/python3, 10181 MiB
2021/03/06 14:25:08.910, 4986, /usr/bin/python3, 10181 MiB
2021/03/06 14:25:11.911, 4986, /usr/bin/python3, 10181 MiB
2021/03/06 14:25:14.912, 4986, /usr/bin/python3, 10181 MiB
-f <FILE_PATH>
または--filename=<FILE_PATH>
を付けると結果がファイルに出力される。Ctrl + c
で終了したときに書き込まれる。
$ nvidia-smi --query-gpu=timestamp,name,utilization.gpu,memory.used --format=csv -l 3 -f ./log.csv
watch nvidia-smiでリアルタイムにモニタリング(Ubuntuの場合)
Ubuntuなどのwatch
コマンドが使える環境では、watch nvidia-smi
とすると同一画面で出力が順次更新される。
watch
はwatch <COMMAND>
で任意の<COMMAND>
を定期実行するコマンド。デフォルトは2秒間隔。-n
オプションで秒数を指定可能。
そのほか、変更部分をハイライトする-d
オプションや、ヘッダーを省略する-t
オプションもある。詳しい使い方はwatch -h
でヘルプを参照されたい。
$ watch nvidia-smi # デフォルトは2秒間隔で更新
$ watch -n 1 nvidia-smi # 1秒間隔で更新
$ watch -n 0.5 nvidia-smi # 0.5秒間隔で更新(小数も指定可能)
$ watch -n 1 -d -t nvidia-smi # 1秒間隔で更新、変更部分ハイライト、ヘッダー省略
Ctrl + c
で終了。