commande supérieure pour les GPU utilisant CUDA

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.

entrer la description de l'image ici

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 % 

Pour obtenir un aperçu en temps réel des ressources utilisées, procédez comme suit:

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.

entrer la description de l'image ici

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:

entrer la description de l'image ici

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