comando superior para GPU que usan CUDA


127

Estoy tratando de monitorear un proceso que usa cuda y MPI, ¿hay alguna forma de que pueda hacer esto, algo como el comando "top" pero que también monitorea la GPU?


2
También está nvtop github.com/Syllo/nvtop
konvas

"nvidia-gar pmon -i 0" puede monitorear todo el proceso que se ejecuta en una GPU NVIDIA 0
changqi.xia

Respuestas:


84

Encuentro gpustat muy útil. Se puede instalar con pip install gpustate imprime un desglose del uso por procesos o usuarios.

enter image description here


4
después de poner watch gpustat -cp, puede ver las estadísticas continuamente, pero los colores se han ido. ¿Cómo arreglas eso? @Alleo
AbhimanyuAryan

1
@AbhimanyuAryan uso watch -c. @Roman Orac, Gracias, esto también funcionó para mí en redhat 8 cuando recibí un error debido a la importación de _curses en Python.
Bobak Hashemi

4
watch -c gpustat -cp --color
Lee Netherton

1
watch -n 0.5 -c gpustat -cp --color
Gabriel Romon

4
gpustat ahora tiene una --watchopción:gpustat -cp --watch
jayelm

139

Para obtener información en tiempo real sobre los recursos utilizados, haga lo siguiente:

nvidia-smi -l 1

Esto hará un bucle y llamará a la vista cada segundo.

Si no desea mantener rastros anteriores de la llamada en bucle en el historial de la consola, también puede hacer:

watch -n0.1 nvidia-smi

Donde 0.1 es el intervalo de tiempo, en segundos.

ingrese la descripción de la imagen aquí


2
¿Consulta la tarjeta cada 0,1 segundos? ¿Eso va a causar una carga en la tarjeta? Además, con el reloj, inicia un nuevo proceso cada 0,1 segundos.
Mick T

@MickT ¿Es un gran problema? ¡Como Nvidia-smi tiene este bucle de construcción! ¿El comando "watch" es muy diferente de nvidia-smi -l?
Mohammad Javad

Podría ser, he visto que las tarjetas de gama baja tienen bloqueos extraños y creo que es porque demasiados usuarios estaban ejecutando nvidia-smi en las tarjetas. Creo que usar 'nvidia-smi -l' es una mejor manera de hacerlo, ya que no se bifurca un nuevo proceso cada vez. Además, revisar la tarjeta cada 0.1 segundos es excesivo, lo haría cada segundo cuando intento depurar un problema; de lo contrario, lo hago cada 5 minutos para monitorear el rendimiento. ¡Espero que eso ayude! :)
Mick T

@Gulzar sí, lo es.
TrostAft

83

No tengo conocimiento de nada que combine esta información, pero puede usar la nvidia-smiherramienta para obtener los datos sin procesar, así (gracias a @jmsu por el consejo sobre -l):

$ nvidia-smi -q -g 0 -d UTILIZATION -l

==============NVSMI LOG==============

Timestamp                       : Tue Nov 22 11:50:05 2011

Driver Version                  : 275.19

Attached GPUs                   : 2

GPU 0:1:0
    Utilization
        Gpu                     : 0 %
        Memory                  : 0 %

4
Creo que si agrega una -l a eso, se actualiza continuamente y monitorea de manera efectiva la utilización de la GPU y la memoria.
jmsu

6
¿Qué pasa si cuando lo ejecuto, la utilización de la GPU solo dice N / A?
natorro

3
@natorro Parece que nVidia dejó de admitir algunas tarjetas. Consulte este enlace forums.nvidia.com/index.php?showtopic=205165
jmsu

29
Prefiero watch -n 0.5 nvidia-smi, que evita llenar su terminal con salida
ali_m

nvidia-smi pmon -i 0
changqi.xia

19

Descargue e instale el controlador CUDA estable más reciente (4.2) desde aquí . En Linux, nVidia-smi 295.41 le ofrece justo lo que desea. utilizar nvidia-smi:

[root@localhost release]# nvidia-smi 
Wed Sep 26 23:16:16 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 3.295.41   Driver Version: 295.41         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  Tesla C2050               | 0000:05:00.0  On     |         0          0 |
|  30%   62 C  P0    N/A /  N/A |   3%   70MB / 2687MB |   44%     Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.  7336     ./align                                                 61MB  |
+-----------------------------------------------------------------------------+

EDITAR: En los últimos controladores de NVIDIA, este soporte se limita a las tarjetas Tesla.


18

Utilice el argumento "--query-compute-apps ="

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

para obtener más ayuda, siga

nvidia-smi --help-query-compute-app

17

Solo usa watch nvidia-smi , generará el mensaje en un intervalo de 2 segundos de forma predeterminada.

Por ejemplo, como la siguiente imagen:

ingrese la descripción de la imagen aquí

También puede utilizar watch -n 5 nvidia-smi(-n intervalo de 5 por 5 s).


16

Otro enfoque de monitoreo útil es utilizar psprocesos filtrados que consumen sus GPU. Yo uso mucho este:

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

Eso mostrará todos los procesos que utilizan la GPU de nvidia y algunas estadísticas sobre ellos. lsof ...recupera una lista de todos los procesos que utilizan una GPU nvidia propiedad del usuario actual y ps -p ...muestra los psresultados de esos procesos. ps fmuestra un formato agradable para las relaciones / jerarquías de procesos hijo / padre, y -oespecifica un formato personalizado. Eso es similar a simplemente hacerps u pero agrega el ID del grupo de procesos y elimina algunos otros campos.

Una ventaja de esto sobre nvidia-smi es que mostrará las bifurcaciones de proceso, así como los procesos principales que usan la GPU.

Sin embargo, una desventaja es que se limita a los procesos propiedad del usuario que ejecuta el comando. Para abrirlo a todos los procesos propiedad de cualquier usuario, agrego un sudoantes dellsof .

Por último, lo combino con watchpara obtener una actualización continua. Entonces, al final, se ve así:

watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'

Que tiene salida como:

Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvi...  Mon Jun  6 14:03:20 2016
USER      PGRP   PID %CPU %MEM  STARTED     TIME COMMAND
grisait+ 27294 50934  0.0  0.1   Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941  0.0  0.0   Jun 02 00:00:00  \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6  1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428  6.9  0.5 14:02:09 00:00:04  \_ python -u process_examples.py
grisait+ 53596 33773  7.5  0.5 14:02:19 00:00:04  \_ python -u process_examples.py
grisait+ 53596 34174  5.0  0.5 14:02:30 00:00:02  \_ python -u process_examples.py
grisait+ 28205 28205  905  1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387  5.8  0.4 13:30:49 00:01:53  \_ python -u train.py
grisait+ 28205 28388  5.3  0.4 13:30:49 00:01:45  \_ python -u train.py
grisait+ 28205 28389  4.5  0.4 13:30:49 00:01:29  \_ python -u train.py
grisait+ 28205 28390  4.5  0.4 13:30:49 00:01:28  \_ python -u train.py
grisait+ 28205 28391  4.8  0.4 13:30:49 00:01:34  \_ python -u train.py

2
También puede obtener los PID de los programas de computación que ocupan la GPU de todos los usuarios sin sudoasí:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
A veces nvidia-smi, no enumera todos los procesos, por lo que termina con su memoria utilizada por procesos que no figuran allí. Esta es la forma principal en la que puedo rastrear y eliminar esos procesos.
rand

1
@grisaitis Cuidado, no creo que el pmemdado por pstenga en cuenta la memoria total de la GPU sino la de la CPU porque psno es compatible con "Nvidia GPU"
SebMa

10

Puede probar nvtop, que es similar a la htopherramienta ampliamente utilizada pero para las GPU NVIDIA. Aquí hay una captura de pantalla nvtopen acción.

Captura de pantalla de nvtop en acción


3

Puede que esto no sea elegante, pero puedes intentarlo

while true; do sleep 2; nvidia-smi; done

También probé el método de @Edric, que funciona, pero prefiero el diseño original de nvidia-smi.


12
O simplemente puedes hacerlo nvidia-smi -l 2. O para evitar la salida repetida de la consola,watch -n 2 'nvidia-smi'
grisaitis

3

Si solo desea encontrar el proceso que se está ejecutando en gpu, simplemente puede usar el siguiente comando:

lsof /dev/nvidia*

Para mí nvidia-smiya watch -n 1 nvidia-smison suficientes en la mayoría de los casos. A veces nvidia-smino muestra ningún proceso, pero la memoria de la gpu está agotada, así que necesito usar el comando anterior para encontrar los procesos.


2

En Linux Mint, y probablemente en Ubuntu, puede probar "nvidia-smi --loop = 1"


0

Existe Prometheus GPU Metrics Exporter (PGME) que aprovecha el binario nvidai-smi. Puedes probar esto. Una vez que tenga el exportador en ejecución, puede acceder a él a través de http: // localhost: 9101 / metrics . Para dos GPU, el resultado de la muestra se ve así:

temperature_gpu{gpu="TITAN X (Pascal)[0]"} 41
utilization_gpu{gpu="TITAN X (Pascal)[0]"} 0
utilization_memory{gpu="TITAN X (Pascal)[0]"} 0
memory_total{gpu="TITAN X (Pascal)[0]"} 12189
memory_free{gpu="TITAN X (Pascal)[0]"} 12189
memory_used{gpu="TITAN X (Pascal)[0]"} 0
temperature_gpu{gpu="TITAN X (Pascal)[1]"} 78
utilization_gpu{gpu="TITAN X (Pascal)[1]"} 95
utilization_memory{gpu="TITAN X (Pascal)[1]"} 59
memory_total{gpu="TITAN X (Pascal)[1]"} 12189
memory_free{gpu="TITAN X (Pascal)[1]"} 1738
memory_used{gpu="TITAN X (Pascal)[1]"} 10451

0

puede usar nvidia-smi pmon -i 0para monitorear todos los procesos en GPU 0. incluido el modo de cómputo, uso de sm, uso de memoria, uso del codificador, uso del decodificador.


0

Puede utilizar las miradas del programa de monitoreo con su complemento de monitoreo de GPU :

  • fuente abierta
  • instalar: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • almorzar: sudo glances

ingrese la descripción de la imagen aquí

También supervisa la CPU, la E / S del disco, el espacio en disco, la red y algunas otras cosas:

ingrese la descripción de la imagen aquí


0

Creé un archivo por lotes con el siguiente código en una máquina con Windows para monitorear cada segundo. Esto funciona para mi.

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

nvidia-smi exe generalmente se encuentra en "C: \ Archivos de programa \ NVIDIA Corporation" si desea ejecutar el comando solo una vez.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.