web-dev-qa-db-ja.com

nvidia-smiの出力をカスタマイズしてPIDユーザー名を表示する方法

nvidia-smiの通常の出力は次のようになります。

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

ご覧のとおり、CPUを実行しているPIDのリストが表示されます。ただし、PIDの名前も知りたいです。各PIDのユーザー名を表示するように出力をカスタマイズできますか?私はすでに個々のPIDのユーザー名を表示する方法を知っています:

ps -u -p $pid

私を助けてください。どうもありがとうございました。

更新:私のために働いた解決策を以下に投稿しました。詳細なGPU情報が必要な人のために、これを簡単なスクリプトとしてGithubにアップロードしました。

https://github.com/ManhTruongDang/check-gp

9

これは私が思いつくことができる最高のものです:

nvidia-smi
ps -up `nvidia-smi |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3` 

出力例:

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_

スクリプトの簡単な説明:

  • Tailおよびheadは冗長な行を削除します

  • Sedはスペースを削除します(この後、各列は1つのスペースでのみ区切られます)

  • Cutは関連する列を抽出します

出力は、それぞれが1行を占めるPIDのリストです。関連情報を表示するには、ps -upを使用するだけです

更新:より良いソリューション:

ps -up `nvidia-smi |tee /dev/stderr |tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3`

このように、nvidia-smiは一度だけ呼び出す必要があります。以下も参照してください。

bashコマンドを標準出力に出力し、同時に別のコマンドにパイプする方法

更新2:詳細なGPU情報が必要な人のために、これを簡単なスクリプトとしてGithubにアップロードしました。

https://github.com/ManhTruongDang/check-gp

3

Nvidia-smiの出力を受け取り、さらに多くの情報を追加するスクリプトを作成しました: https://github.com/peci1/nvidia-htop

これは、pythonスクリプトであり、GPUプロセスリストを解析し、PIDを解析し、psを介して実行してより多くの情報を収集し、nvidia-smiのプロセスリストと充実したリスト。

使用例:

$ 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                                                               |
+-----------------------------------------------------------------------------+
12
Martin Pecka

nvidia-smi -q -xはnvidia-smiのXMLスタイルの出力です

ps -up `nvidia-smi -q -x | grep pid | sed -e 's/<pid>//g' -e 's/<\/pid>//g' -e 's/^[[:space:]]*//'`
1
Junwon Lee

以前の解決策が機能しないため、ここに解決策を投稿します。私が使用しているNVIDIA-SMIのバージョンは440.44ですが、重要ではないと思います。

nvidia-smi | tee /dev/stderr | awk '/ C / {print $3}' | xargs -r ps -up

少し説明:

  • tee:nvidia-smiを2回呼び出さないでください
  • awk:計算プロセスのPID列を取得(タイプC)
  • xargs -r-r入力が空かどうかを確認して、ps -upからの望ましくないエラーメッセージを回避できるようにします

.bash_profileまたは.bashrcでエイリアスにしたい場合:

alias nvidia-smi2='nvidia-smi | tee /dev/stderr | awk "/ C / {print \$3}" | xargs -r ps -up'

違いは、$3の前にエスケープする必要があることです。

0
Iron

ジェイ・スタンリー、私は次のようにxargsを使用してJunwon Leeのコマンドのエイリアスを作成できます。

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"

(評判の制限のためコメントできませんでした...)

0
SveborK