CudaとMPIを使用するプロセスを監視しようとしていますが、これを行う方法はありますか?コマンド「top」のようなものですが、GPUも監視しますか?
gpustat は非常に便利だと思います。 Inはpip install gpustat
でインストールでき、プロセスまたはユーザーによる使用の内訳を出力します。
この情報を組み合わせるものは何も知りませんが、nvidia-smi
ツールを使用して生データを取得することができます(-lのヒントについては@jmsuに感謝)。
$ 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 %
here から最新の安定したCUDAドライバー(4.2)をダウンロードしてインストールします。 Linuxでは、nVidia-smi 295.41で必要なものが提供されます。 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 |
+-----------------------------------------------------------------------------+
編集:最新のNVIDIAドライバーでは、このサポートはTeslaカードに限定されています。
引数「--query-compute-apps =」を使用します
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
さらにサポートが必要な場合は、フォローしてください
nvidia-smi --help-query-compute-app
もう1つの便利な監視アプローチは、GPUを消費するプロセスでps
フィルター処理を使用することです。私はこれをよく使います:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Nvidia GPUを使用するすべてのプロセスと、それらに関するいくつかの統計が表示されます。 lsof ...
は、現在のユーザーが所有するnvidia GPUを使用してすべてのプロセスのリストを取得し、ps -p ...
はそれらのプロセスのps
結果を表示します。 ps f
は、子/親プロセスの関係/階層のニース形式を示し、-o
はカスタム形式を指定します。これはps u
を実行するのと似ていますが、プロセスグループIDを追加し、他のフィールドをいくつか削除します。
nvidia-smi
に対するこの利点の1つは、GPUを使用するメインプロセスだけでなくプロセスフォークも表示することです。
ただし、1つの欠点は、コマンドを実行するユーザーが所有するプロセスに限定されることです。任意のユーザーが所有するすべてのプロセスに対して開くために、Sudo
の前にlsof
を追加します。
最後に、watch
と組み合わせて、継続的な更新を取得します。したがって、最終的には次のようになります。
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `Sudo lsof -n -w -t /dev/nvidia*`'
次のような出力があります:
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
これはエレガントではないかもしれませんが、試すことができます
while true; do sleep 2; nvidia-smi; done
@Edricによる方法も試してみましたが、これは機能しますが、nvidia-smi
の元のレイアウトを好みます。
nvtop
を試すことができます。これは、広く使用されているhtop
ツールに似ていますが、NVIDIA GPU用です。以下に、実行中のnvtop
のスクリーンショットを示します。
Nvidai-smiバイナリを活用する Prometheus GPU Metrics Exporter(PGME) があります。これを試してみてください。エクスポーターを実行したら、 http:// localhost:9101/metrics からエクスポーターにアクセスできます。 2つのGPUの場合、サンプル結果は次のようになります。
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
nvidia-smi pmon -i 0
を使用して、計算モード、sm使用、メモリ使用、エンコーダ使用、デコーダ使用など、GPU 0のすべてのプロセスを監視できます。
Windowsマシンで次のコードを含むバッチファイルを作成して、毎秒監視します。わたしにはできる。
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
コマンドを1回だけ実行する場合、nvidia-smi exeは通常「C:\ Program Files\NVIDIA Corporation」にあります。