J'essaie de surveiller un processus qui utilise cuda et MPI. Y a-t-il un moyen de le faire, quelque chose comme la commande "top" mais qui surveille également le GPU?
Je trouve gpustat très utile. In peut être installé avec pip install gpustat
et imprime une ventilation de l'utilisation par processus ou par utilisateur.
Je ne suis au courant d'aucun élément combinant ces informations, mais vous pouvez utiliser l'outil nvidia-smi
pour obtenir les données brutes, comme ceci (grâce à @jmsu pour l'info -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 fera une boucle et appellera 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 de ici . Sur linux, nVidia-smi 295.41 vous donne exactement ce que vous voulez. utiliser 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 consommant vos GPU. J'utilise beaucoup celui-ci:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Cela montrera tous les processus utilisant un GPU nvidia 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
de ces processus. ps f
affiche le formatage simple pour les relations/hiérarchies de processus enfants/parents et -o
spécifie un formatage personnalisé. Celui-ci est similaire à ps u
mais ajoute l'ID du groupe de processus et supprime certains autres champs.
L'un des avantages de ceci par rapport à nvidia-smi
est qu'il affiche les fourches de processus ainsi que les processus principaux utilisant le GPU.
Un inconvénient, cependant, est qu'il est limité aux processus appartenant à l'utilisateur qui exécute la commande. Pour l'ouvrir à tous les processus appartenant à un utilisateur, j'ajoute une Sudo
avant la lsof
.
Enfin, je le combine avec watch
pour obtenir une mise à jour continue. Donc, au final, cela 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 une sortie 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, s'il vous plaît suivez
nvidia-smi --help-query-compute-app
Vous pouvez essayer nvtop
, qui est similaire à l'outil htop
, largement utilisé, à l'exception des GPU NVIDIA. Voici une capture d'écran de nvtop
en action.
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 de @Edric, qui fonctionne, mais je préfère la mise en page originale de nvidia-smi
.
Il existe PGME (Prometheus GPU Metrics Exporter) qui exploite le binaire 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/metrics . 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
vous pouvez utiliser nvidia-smi pmon -i 0
pour contrôler chaque processus dans GPU 0 ., y compris le mode de calcul, l'utilisation de sm, l'utilisation de la mémoire, l'utilisation du codeur, l'utilisation du décodeur.
Vous pouvez utiliser le programme de surveillance regards avec son surveillance GPU plug-in:
Sudo apt-get install -y python-pip; Sudo pip install glances[gpu]
Sudo glances
Il surveille également le processeur, les E/S de disque, l’espace disque, le réseau et quelques autres éléments:
J'ai créé un fichier de commandes avec le code suivant sur une machine Windows pour surveiller chaque seconde. Ça marche pour moi.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe est généralement situé dans "C:\Program Files\NVIDIA Corporation" si vous souhaitez exécuter la commande une seule fois.