J’essaie de surveiller un processus qui utilise cuda et MPI, est-ce que je peux le faire, quelque chose comme la commande “top” mais qui surveille aussi le GPU?
Je trouve aussi gpustat très utile. In peut être installé avec pip install gpustat
, et imprime la ventilation de l’utilisation par les processus ou les utilisateurs.
Je ne suis au courant de rien qui combine cette information, mais vous pouvez utiliser l’outil nvidia-smi
pour obtenir les données brutes, comme ça (grâce à @jmsu pour le conseil sur -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 %
nvidia-smi -l 1
Cela boucle et appelle la vue à chaque seconde.
Si vous ne souhaitez pas conserver les traces de l’appel en boucle dans l’historique de la console, vous pouvez également effectuer les opérations suivantes:
watch -n0.1 nvidia-smi
Où 0.1 est l’intervalle de temps, en secondes.
Téléchargez et installez le dernier pilote CUDA stable (4.2) à partir d’ ici . Sous Linux, nVidia-smi 295.41 vous donne exactement ce que vous voulez. utilisez 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 | +-----------------------------------------------------------------------------+
EDIT: Dans les derniers pilotes NVIDIA, cette prise en charge est limitée aux cartes Tesla.
Une autre approche de surveillance utile consiste à utiliser ps
filtré sur les processus qui consumnt vos GPU. Je l’utilise beaucoup:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Cela montrera tous les processus utilisant nvidia GPU et quelques statistiques à leur sujet. lsof ...
récupère une liste de tous les processus utilisant un GPU nvidia appartenant à l’utilisateur actuel, et ps -p ...
affiche les résultats ps
pour ces processus. ps f
présente une mise en forme agréable pour les relations / hiérarchies de processus enfant / parent et -o
spécifie un formatage personnalisé. Celui-ci est similaire à la simple utilisation de ps u
mais ajoute l’ID du groupe de processus et supprime certains autres champs.
L’un des avantages de cette nvidia-smi
rapport à nvidia-smi
réside dans le fait qu’elle affichera les processus ainsi que les processus principaux utilisant le processeur graphique.
Un inconvénient est qu’il est limité aux processus appartenant à l’utilisateur qui exécute la commande. Pour l’ouvrir à tous les processus appartenant à n’importe quel utilisateur, j’ajoute un sudo
avant le lsof
.
Enfin, je le combine avec watch
pour obtenir une mise à jour continue. Donc, au final, ça ressemble à:
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
Qui a produit comme:
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
Utilisez l’argument “–query-compute-apps =”
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
pour plus d’aide, veuillez suivre
nvidia-smi --help-query-compute-app
Cela peut ne pas être élégant, mais vous pouvez essayer
while true; do sleep 2; nvidia-smi; done
J’ai aussi essayé la méthode par @Edric, qui fonctionne, mais je préfère la disposition originale de nvidia-smi
.
Il suffit d’utiliser watch nvidia-smi
, cela affichera le message par intervalle de 2 s par défaut.
Par exemple, comme l’image ci-dessous:
Vous pouvez également utiliser watch -n 5 nvidia-smi
(intervalle -n 5 par 5s).
Il existe un exportateur de mésortingques GPU Prometheus (PGME) qui exploite le binary nvidai-smi. Vous pouvez essayer ceci. Une fois que l’exportateur est en cours d’exécution, vous pouvez y accéder via http: // localhost: 9101 / mesortingcs . Pour deux GPU, l’exemple de résultat ressemble à ceci:
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