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にアップロードしました。
これは私が思いつくことができる最高のものです:
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にアップロードしました。
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 |
+-----------------------------------------------------------------------------+
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:]]*//'`
以前の解決策が機能しないため、ここに解決策を投稿します。私が使用している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
の前にエスケープする必要があることです。
ジェイ・スタンリー、私は次のように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"
(評判の制限のためコメントできませんでした...)