watch nvidia-smiでGPU使用率などを確認・リアルタイムモニタリング

Posted: | Tags: 機械学習

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とすると同一画面で出力が順次更新される。

watchwatch <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で終了。

関連カテゴリー

関連記事