Sé que nvidia-smi -l 1
dará el uso de la GPU cada segundo (similar al siguiente). Sin embargo, agradecería una explicación sobre lo que realmente significa Volatile GPU-Util
. ¿Es esa la cantidad de SMs usados sobre el SM total, o la ocupación, o alguna otra cosa?
+-----------------------------------------------------------------------------+ | 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 | +-----------------------------------------------------------------------------+
Es una medida muestreada durante un período de tiempo . Para un período de tiempo dado, informa qué porcentaje de tiempo estuvo activo uno o más núcleos GPU (es decir, en ejecución).
No le dice nada acerca de cuántos 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.
El (los) reclamo (s) anterior (es) se pueden verificar sin demasiada dificultad utilizando un ejercicio de microenmarque (ver a continuación).
No sé cómo definir exactamente el período de tiempo, pero dado que en general solo es 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 uno, para nvidia-smi
. También es posible descubrir el período de tiempo de muestreo utilizando técnicas de microenmarcado.
Además, la palabra “volátil” no pertenece a este elemento de datos en nvidia-smi
. Está malinterpretando el formato de salida.
Aquí hay un código trivial que respalda mi reclamo:
#include #include #include 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>>(); 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á el 99% de utilización. Cuando corro con 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.