web-dev-qa-db-fra.com

commande supérieure pour GPU utilisant CUDA

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?

65
natorro

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.

 enter image description here

21
Alleo

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 %
75
Edric

Pour obtenir des informations en temps réel sur les ressources utilisées, procédez comme suit:

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. 

 enter image description here

69

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.

18
lashgar

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
13
grisaitis

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
10
Deepak

Il suffit d'utiliser watch nvidia-smi, le message sera émis par intervalle de 2 secondes par défaut.

Par exemple, en tant qu'image ci-dessous:

 enter image description here

Vous pouvez également utiliser watch -n 5 nvidia-smi (-n intervalle de 5 x 5 secondes).

6
Jayhello

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.

 Screenshot of nvtop in action 

2
Rodrigo

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.

2
skyuuka

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
0
Abu Shoeb

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.

0
changqi.xia

Vous pouvez utiliser le programme de surveillance regards avec son surveillance GPU plug-in:

  • open source
  • installer: Sudo apt-get install -y python-pip; Sudo pip install glances[gpu]
  • pour lancer: Sudo glances

 enter image description here

Il surveille également le processeur, les E/S de disque, l’espace disque, le réseau et quelques autres éléments:

 enter image description here

0
Franck Dernoncourt

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.

0
Karthik N G