cudaとMPIを使用するプロセスを監視しようとしていますが、これを行う方法はありますか。たとえば、 "top"コマンドのようなものですが、GPUも監視していますか?
cudaとMPIを使用するプロセスを監視しようとしていますが、これを行う方法はありますか。たとえば、 "top"コマンドのようなものですが、GPUも監視していますか?
回答:
私が見つけgpustat非常に便利。でインストールできpip install gpustat
、プロセスまたはユーザーによる使用状況の内訳を出力します。
watch gpustat -cp
継続的に統計を見ることができますが、色がなくなっています。どのように修正しますか?@Alleo
watch -c
。@Roman Orac、ありがとうございます。これは、Pythonで_cursesをインポートしたためにエラーが発生したときに、redhat 8でも機能しました。
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
:オプションgpustat -cp --watch
nvidia-smi -l 1
これはループし、毎秒ビューを呼び出します。
ループした呼び出しの過去のトレースをコンソール履歴に残したくない場合は、次のようにすることもできます。
watch -n0.1 nvidia-smi
ここで、0.1は秒単位の時間間隔です。
私はこの情報を組み合わせたものは何も知りませんが、nvidia-smi
ツールを使用して生データを取得することができます(-jのヒントについて@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 %
watch -n 0.5 nvidia-smi
出力を使用して、端末を埋める回避する、
こちらから最新の安定した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ドライバーでは、このサポートはテスラカードに限定されています。
もう1つの有用なモニタリングアプローチはps
、GPUを消費するプロセスでフィルターを使用することです。私はこれをよく使います:
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を追加し、他のいくつかのフィールドを削除します。
これに対する1つの利点はnvidia-smi
、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
sudo
、このように:nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
すべてのプロセスがリストされない場合があるため、そこにリストされていないプロセスで使用されているメモリで終わることになります。これは、これらのプロセスを追跡して強制終了できる主な方法です。
pmem
ことにより、与えられたps
口座にGPUのメモリの合計を取るが、CPUのためということps
ではありません「NVIDIAのGPU」意識
あるプロメテウスGPUメトリック輸出(PGME) nvidai-SMIバイナリを活用します。これを試してみてください。エクスポーターを実行すると、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
して、GPU 0のすべてのプロセスを監視できます。計算モード、smの使用、メモリの使用、エンコーダの使用、デコーダの使用を含みます。