cuda - gpus - nvidia gpu
nvidia-smi ¿Explicación de utilización de GPU volátil? (1)
Es una medida muestreada durante un período de tiempo . Para un período de tiempo determinado, informa qué porcentaje de tiempo estuvo activo uno o más núcleos de GPU (es decir, en ejecución).
No le dice nada sobre cuántas SM se usaron, o qué tan "ocupado" estaba el código, o qué estaba haciendo exactamente, o de qué manera podría haber estado usando la memoria.
Las afirmaciones anteriores se pueden verificar sin demasiada dificultad utilizando un ejercicio de tipo microbenchmarking (ver más abajo).
No sé cómo definir exactamente el período de tiempo, pero dado que también es en general solo una medición muestreada (es decir,
nvidia-smi
informa una medición muestreada tan a menudo como la encuesta) No creo que deba ser tan importante para uso general o comprensión de la herramienta.
El período de tiempo es obviamente corto y no está necesariamente relacionado con el intervalo de sondeo, si se especifica, para
nvidia-smi
.
Podría ser posible descubrir el período de tiempo de muestreo utilizando también técnicas de microbenchmarking.
Además, la palabra "volátil" no pertenece a este elemento de datos en
nvidia-smi
.
Está leyendo mal el formato de salida.
Aquí hay un código trivial que respalda mi reclamo:
#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;
}
En mi sistema, cuando ejecuto el código anterior con un parámetro de línea de comando de 100, nvidia-smi informará una utilización del 99%. Cuando ejecuto un parámetro de línea de comando de 1000, nvidia-smi informará ~ 83% de utilización. Cuando lo ejecuto con un parámetro de línea de comando de 10000, nvidia-smi informará ~ 9% de utilización.
Sé que
nvidia-smi -l 1
dará el uso de la GPU cada segundo (de manera similar a lo siguiente).
Sin embargo, agradecería una explicación sobre lo que realmente significa
Volatile GPU-Util
.
¿Es ese el número de SM usados sobre el total de SM, o la ocupación, o algo más?
+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+