supported - comando superior para GPU usando CUDA
instal cuda (9)
Use el argumento "--query-compute-apps ="
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
para obtener más ayuda, por favor siga
nvidia-smi --help-query-compute-app
Estoy tratando de monitorear un proceso que usa cuda y MPI, ¿hay alguna manera de que yo pueda hacer esto, algo así como el comando "arriba" pero que también monitorea la GPU?
Para obtener información en tiempo real sobre los recursos utilizados, haga lo siguiente:
nvidia-smi -l 1
Esto recorrerá y llamará a la vista en cada segundo.
Si no desea mantener los rastros 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.
Descargue e instale el último controlador CUDA estable (4.2) desde here . En Linux, nVidia-smi 295.41 te ofrece exactamente lo que quieres. usa 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 está limitado a las Tarjetas Tesla.
Esto puede no ser 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
.
Existe Prometheus GPU Metrics Exporter (PGME) que aprovecha el nvidai-smi binary. 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 es el siguiente:
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
No conozco nada que combine esta información, pero puede usar la herramienta nvidia-smi
para obtener los datos brutos, de esa manera (gracias a @jmsu por la sugerencia de -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 %
Otro enfoque de monitoreo útil es usar ps
filtrado en los procesos que consumen sus GPU. Yo uso este mucho:
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 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 resultados de ps
para esos procesos. ps f
muestra un buen formato para las relaciones / jerarquías de proceso hijo / principal y -o
especifica un formato personalizado. Esa es similar a solo hacer ps u
pero agrega la identificación del grupo de procesos y elimina algunos otros campos.
Una ventaja de esto sobre nvidia-smi
es que mostrará las horquillas de proceso así como también los procesos principales que usan la GPU.
Sin embargo, una desventaja es que está limitada a procesos propiedad del usuario que ejecuta el comando. Para abrirlo a todos los procesos propiedad de cualquier usuario, agrego un sudo
antes del lsof
.
Por último, lo combino con watch
para obtener una actualización continua. Entonces, al final, parece que:
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
También encuentro gpustat muy útil. En se puede instalar con pip install gpustat
, e imprime el desglose de uso por procesos o usuarios.