1. ホーム
  2. cuda

[解決済み] nvidia-smi Volatile GPU-Utilization の説明?

2023-05-06 12:49:45

質問

私は、以下のことを知っています。 nvidia-smi -l 1 が1秒ごとにGPU使用率を出すことは知っています(以下同様)。しかし、私は何について説明することを感謝します。 Volatile GPU-Util の本当の意味について説明をお願いします。総SM数に対する使用SM数なのか、占有率なのか、それとも何か他のものなのでしょうか?

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.48                 Driver Version: 367.48                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K20c          Off  | 0000:03:00.0     Off |                    0 |
| 30%   41C    P0    53W / 225W |      0MiB /  4742MiB |     96%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla K20c          Off  | 0000:43:00.0     Off |                    0 |
| 36%   49C    P0    95W / 225W |   4516MiB /  4742MiB |     63%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    1      5193    C   python                                        4514MiB |
+-----------------------------------------------------------------------------+

どのように解決するのですか?

それは ある期間のサンプリングされた測定値 . 与えられた期間について、1 つまたは複数の GPU カーネルがアクティブ (すなわち実行中) であった時間の割合を報告します。

これは、何個の SM が使用されたか、コードがどのくらいビジーであったか、正確に何をしていたか、またはどのような方法でメモリを使用していたかについては、何も教えてくれません。

上記の主張は、マイクロベンチマークタイプの演習 (下記参照) を使用して、それほど困難なく検証することができます。

Nvidia の docs サンプル周期は製品によって1秒から1/6秒の間になることがあります。しかし、この周期は、結果をどのように解釈するかについて、大きな違いを生じないはずです。

また、quot;Volatile" という単語は、このデータ項目には関係ありません。 nvidia-smi . 出力形式を読み間違えています。

私の主張を裏付ける些細なコードを紹介します。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

const long long tdelay=1000000LL;
const int loops = 10000;
const int hdelay = 1;

__global__ void dkern(){

  long long start = clock64();
  while(clock64() < start+tdelay);
}

int main(int argc, char *argv[]){

  int my_delay = hdelay;
  if (argc > 1) my_delay = atoi(argv[1]);
  for (int i = 0; i<loops; i++){
    dkern<<<1,1>>>();
    usleep(my_delay);}

  return 0;
}

私のシステムでは、上記のコードを 100 のコマンド ライン パラメータで実行すると、nvidia-smi は 99% の使用率を報告します。 コマンド ライン パラメータを 1000 にして実行すると、nvidia-smi は ~83% の使用率を報告します。 コマンドライン パラメータに 10000 を指定して実行すると、nvidia-smi は ~9% の使用率を報告します。