commande supérieure pour les GPU utilisant CUDA

127

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 aussi le GPU?

natorro
la source
2
Il y a aussi nvtop github.com/Syllo/nvtop
konvas
"nvidia-smi pmon -i 0" peut surveiller tous les processus en cours d'exécution sur le GPU nvidia 0
changqi.xia

Réponses:

84

Je trouve gpustat très utile. In peut être installé avec pip install gpustatet imprime la répartition de l'utilisation par processus ou utilisateurs.

entrez la description de l'image ici

Alleo
la source
4
après avoir mis, watch gpustat -cpvous pouvez voir les statistiques en continu mais les couleurs ont disparu. Comment résolvez-vous cela? @Alleo
CodingOnSteroid
1
@AbhimanyuAryan utilise watch -c. @Roman Orac, Merci, cela a également fonctionné pour moi sur redhat 8 lorsque j'obtenais une erreur en raison de l'importation de _curses en python.
Bobak Hashemi
4
watch -c gpustat -cp --color
Lee Netherton
1
watch -n 0.5 -c gpustat -cp --color
Gabriel Romon
4
gpustat a maintenant une --watchoption:gpustat -cp --watch
jayelm
141

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

nvidia-smi -l 1

Cela va boucler et appeler la vue à chaque seconde.

Si vous ne souhaitez pas conserver les traces passées de l'appel en boucle dans l'historique de la console, vous pouvez également faire:

watch -n0.1 nvidia-smi

Où 0,1 est l'intervalle de temps, en secondes.

entrez la description de l'image ici

Guillaume Chevalier
la source
2
Interroger la carte toutes les 0,1 seconde? Cela va-t-il provoquer une charge sur la carte? De plus, en utilisant la montre, vous démarrez un nouveau processus toutes les 0,1 seconde.
Mick T
@MickT Est-ce un gros problème? Comme les Nvidia-smi ont cette boucle de construction! La commande "watch" est-elle très différente de la commande nvidia-smi -l?
Mohammad Javad le
C'est peut-être, j'ai vu des cartes bas de gamme avoir des verrouillages étranges et je pense que c'est parce que trop d'utilisateurs exécutaient nvidia-smi sur les cartes. Je pense que l'utilisation de 'nvidia-smi -l' est une meilleure façon de procéder car vous ne créez pas un nouveau processus à chaque fois. De plus, vérifier la carte toutes les 0,1 seconde est excessif, je le ferais toutes les secondes lorsque j'essaie de déboguer un problème, sinon je le fais toutes les 5 minutes pour surveiller les performances. J'espère que cela aide! :)
Mick T
@Gulzar oui, ça l'est.
TrostAft
83

Je ne suis au courant de rien qui combine ces informations, mais vous pouvez utiliser l' nvidia-smioutil pour obtenir les données brutes, comme ceci (merci à @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 %
Edric
la source
4
Je pense que si vous ajoutez un -l à cela, vous obtenez une mise à jour continue en surveillant efficacement le GPU et l'utilisation de la mémoire.
jmsu
6
Et si, quand je l'exécute, l'utilizacion GPU dit simplement N / A ??
natorro
3
@natorro On dirait que nVidia a abandonné la prise en charge de certaines cartes. Vérifiez ce lien forums.nvidia.com/index.php?showtopic=205165
jmsu
29
Je préfère watch -n 0.5 nvidia-smi, ce qui évite de remplir votre terminal de sortie
ali_m
nvidia-smi pmon -i 0
changqi.xia
19

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. 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.

fouet
la source
18

Utilisez l'argument "--query-compute-apps ="

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

pour obtenir de l'aide, veuillez suivre

nvidia-smi --help-query-compute-app
Deepak
la source
17

Il suffit de l'utiliser watch nvidia-smi, il affichera le message par intervalle de 2 s par défaut.

Par exemple, comme l'image ci-dessous:

entrez la description de l'image ici

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

Jayhello
la source
16

Une autre approche de surveillance utile consiste à utiliser des psprocessus filtrés qui consomment 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 le 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 psrésultats pour ces processus. ps fmontre une mise en forme agréable pour les relations / hiérarchies de processus enfant / parent, et -ospécifie une mise en forme personnalisée. Celui-ci est similaire à ce que vous faites, ps umais ajoute l'ID du groupe de processus et supprime certains autres champs.

L'un des avantages de cela nvidia-smiest qu'il affichera les fourchettes de processus ainsi que les principaux processus qui utilisent 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 à n'importe quel utilisateur, j'ajoute un sudoavant le lsof.

Enfin, je le combine avec watchpour 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 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
grisaitis
la source
2
Vous pouvez également obtenir les PID des programmes de calcul qui occupent le GPU de tous les utilisateurs sans sudocomme ceci:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt
1
Parfois, nvidia-smine répertorie pas tous les processus, vous vous retrouvez donc avec votre mémoire utilisée par des processus qui n'y figurent pas. C'est la principale façon dont je peux suivre et tuer ces processus.
rand
1
@grisaitis Attention, je ne pense pas que le pmemdonné par psprenne en compte la mémoire totale du GPU mais celle du CPU car psn'est pas conscient de "Nvidia GPU"
SebMa
10

Vous pouvez essayer nvtop, qui est similaire à l' htopoutil largement utilisé mais pour les GPU NVIDIA. En voici une capture d'écran nvtopen action.

Capture d'écran de nvtop en action

Rodrigo
la source
3

Ce n'est peut-être pas élégant, mais vous pouvez essayer

while true; do sleep 2; nvidia-smi; done

J'ai également essayé la méthode de @Edric, qui fonctionne, mais je préfère la mise en page originale de nvidia-smi.

Skyuuka
la source
12
Ou vous pouvez simplement le faire nvidia-smi -l 2. Ou pour empêcher la sortie répétée de la console,watch -n 2 'nvidia-smi'
grisaitis
3

Si vous souhaitez simplement trouver le processus qui s'exécute sur gpu, vous pouvez simplement utiliser la commande suivante:

lsof /dev/nvidia*

Pour moi nvidia-smiet watch -n 1 nvidia-smisuffisent dans la plupart des cas. Parfois nvidia-smi, aucun processus ne s'affiche mais la mémoire gpu est épuisée, je dois donc utiliser la commande ci-dessus pour trouver les processus.

JasonWayne
la source
2

Dans Linux Mint, et très probablement Ubuntu, vous pouvez essayer "nvidia-smi --loop = 1"

Ebram
la source
0

Il existe Prometheus GPU Metrics Exporter (PGME) qui exploite le binaire nvidai-smi. Vous pouvez essayer ceci. Une fois l'exportateur 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
Abu Shoeb
la source
0

vous pouvez utiliser nvidia-smi pmon -i 0pour surveiller chaque processus dans le GPU 0. y compris le mode de calcul, l'utilisation sm, l'utilisation de la mémoire, l'utilisation de l'encodeur, l'utilisation du décodeur.

changqi.xia
la source
0

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

  • Open source
  • à installer: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • lancer: sudo glances

entrez la description de l'image ici

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

entrez la description de l'image ici

Franck Dernoncourt
la source
0

J'ai créé un fichier de commandes avec le code suivant dans 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 se trouve généralement dans «C: \ Program Files \ NVIDIA Corporation» si vous souhaitez exécuter la commande une seule fois.

Karthik NG
la source