la sortie normale de nvidia-smi ressemble à ceci:
Thu May 10 09:05:07 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:0A:00.0 Off | N/A |
| 61% 74C P2 195W / 250W | 5409MiB / 11172MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 5973 C ...master_JPG/build/tools/program_pytho.bin 4862MiB |
| 0 46324 C python 537MiB |
+-----------------------------------------------------------------------------+
Comme vous pouvez le voir, il affiche la liste des PID qui exécutent le CPU. Cependant, je veux également connaître les noms des PID. Puis-je personnaliser la sortie pour afficher le nom d'utilisateur de chaque PID? Je sais déjà comment afficher le nom d'utilisateur d'un PID individuel:
ps -u -p $pid
Aidez-moi, s'il vous plaît. Merci beaucoup.
MISE À JOUR: J'ai posté la solution qui a fonctionné pour moi ci-dessous. J'ai également téléchargé ceci sur Github en tant que script simple pour ceux qui ont besoin d'informations détaillées sur le GPU:
C'est le mieux que j'ai pu trouver:
nvidia-smi
ps -up `nvidia-smi |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3`
Exemple de sortie:
Thu May 10 15:23:08 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111 Driver Version: 384.111 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:0A:00.0 Off | N/A |
| 41% 59C P2 251W / 250W | 5409MiB / 11172MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1606 C ...master_JPG/build/tools/program.bin 4862MiB |
| 0 15314 C python 537MiB |
+-----------------------------------------------------------------------------+
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user111+ 1606 134 4.8 32980224 789164 pts/19 Rl+ 15:23 0:08 /home/user111
user2 15314 0.4 10.0 17936788 1647040 pts/16 Sl+ 10:41 1:20 python server_
Brève explication du script:
Tail
et head
pour supprimer les lignes redondantes
Sed
pour supprimer les espaces (après cela, chaque colonne ne sera séparée que par 1 espace)
Cut
pour extraire les colonnes pertinentes
La sortie est une liste de PID, chacun occupant 1 ligne. Nous avons seulement besoin d'utiliser ps -up
pour afficher les informations pertinentes
MISE À JOUR: Une meilleure solution:
ps -up `nvidia-smi |tee /dev/stderr |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3`
Par ici, nvidia-smi
ne devrait être appelé qu'une seule fois. Voir également:
Comment sortir la commande bash vers stdout et diriger vers une autre commande en même temps?
MISE À JOUR 2: J'ai téléchargé ceci sur Github comme un script simple pour ceux qui ont besoin d'informations détaillées sur le GPU.
J'ai créé un script qui prend la sortie nvidia-smi et l'enrichit avec plus d'informations: https://github.com/peci1/nvidia-htop .
Il s'agit d'un script python qui analyse la liste des processus GPU, analyse les PID, les exécute via ps
pour rassembler plus d'informations, puis remplace le nvidia-smi
'' s liste de processus avec la liste enrichie.
Exemple d'utilisation:
$ nvidia-smi | nvidia-htop.py -l
Mon May 21 15:06:35 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.25 Driver Version: 390.25 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:04:00.0 Off | N/A |
| 53% 75C P2 174W / 250W | 10807MiB / 11178MiB | 97% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... Off | 00000000:05:00.0 Off | N/A |
| 66% 82C P2 220W / 250W | 10783MiB / 11178MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce GTX 108... Off | 00000000:08:00.0 Off | N/A |
| 45% 67C P2 85W / 250W | 10793MiB / 11178MiB | 51% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| GPU PID USER GPU MEM %MEM %CPU COMMAND |
| 0 1032 anonymou 10781MiB 308 3.7 python train_image_classifier.py --train_dir=/mnt/xxxxxxxx/xxxxxxxx/xxxxxxxx/xxxxxxx/xxxxxxxxxxxxxxx |
| 1 11021 cannotte 10765MiB 114 1.5 python3 ./train.py --flagfile /xxxxxxxx/xxxxxxxx/xxxxxxxx/xxxxxxxxx/xx/xxxxxxxxxxxxxxx |
| 2 25544 nevermin 10775MiB 108 2.0 python -m xxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+-----------------------------------------------------------------------------+
Je l'ai fait avec nvidia-smi -q -x
qui est une sortie de style XML de nvidia-smi
ps -up `nvidia-smi -q -x | grep pid | sed -e 's/<pid>//g' -e 's/<\/pid>//g' -e 's/^[[:space:]]*//'`
La solution précédente ne fonctionne pas, donc je poste ma solution ici. La version de NVIDIA-SMI que j'utilise est 440.44, mais je ne pense pas que cela soit important.
nvidia-smi | tee /dev/stderr | awk '/ C / {print $3}' | xargs -r ps -up
Une petite explication:
tee
: évitez d'appeler nvidia-smi deux foisawk
: récupère les colonnes PID du processus de calcul (type C)xargs -r
: -r
vérifier si l'entrée est vide afin d'éviter les messages d'erreur indésirables de ps -up
Si vous voulez en faire un alias dans .bash_profile
ou .bashrc
:
alias nvidia-smi2='nvidia-smi | tee /dev/stderr | awk "/ C / {print \$3}" | xargs -r ps -up'
La différence est qu'il doit s'échapper avant $3
.
Jay Stanley, je pourrais alias la commande de Junwon Lee en utilisant xargs
comme suit:
alias gpu_user_usage="nvidia-smi -q -x | grep pid | sed -e 's/<pid>//g' -e 's/<\/pid>//g' -e 's/^[[:space:]]*//' | xargs ps -up"
(Je n'ai pas pu commenter en raison des limitations de réputation ...)