CUDAとMPIを使用するプロセスを監視しようとしていますが、コマンド「top」のように、GPUも監視する方法はありますか?
16 に答える
gpustatはとても便利だと思います。でインストールでき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 %
引数「--query-compute-apps=」を使用します
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
さらにヘルプが必要な場合は、フォローしてください
nvidia-smi --help-query-compute-app
を試すことができますnvtop
。これは、広く使用されているツールに似ていhtop
ますが、NVIDIAGPU用です。これが実際の動作のスクリーンショットですnvtop
。
ここから最新の安定したCUDAドライバー(4.2)をダウンロードしてインストールします。Linuxでは、nVidia-smi295.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*`
これにより、すべてのnvidiaGPU使用プロセスとそれらに関するいくつかの統計が表示されます。lsof ...
現在のユーザーが所有するnvidiaGPUを使用してすべてのプロセスのリストを取得し、それらのプロセスの結果をps -p ...
表示します。子/親プロセスの関係/階層の適切なフォーマットを示し、カスタムフォーマットを指定します。これは、実行するのと似ていますが、プロセスグループIDを追加し、他のいくつかのフィールドを削除します。ps
ps f
-o
ps u
これに対する利点の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
最近、インタラクティブなNVIDIA-GPUプロセスビューアと呼ばれる監視ツールを作成しnvitop
ました。
純粋なPythonで記述されており、インストールが簡単です。
PyPIからインストール:
pip3 install --upgrade nvitop
GitHubから最新バージョンをインストールします(推奨):
pip3 install git+https://github.com/XuehaiPan/nvitop.git#egg=nvitop
リソースモニターとして実行します。
nvitop -m
nvitop
GPUステータスが表示されますnvidia-smi
が、追加のファンシーバーと履歴グラフが表示されます。
psutil
プロセスの場合、プロセス情報を収集し、、、、およびフィールドを表示するためUSER
に使用%CPU
されます。これは%MEM
、よりもはるかに詳細です。さらに、モニターモードでのユーザー入力に応答します。GPUでプロセスを中断または強制終了できます。TIME
COMMAND
nvidia-smi
nvitop
ツリービュー画面と環境画面が付属しています。
さらに、nvitop
他のアプリケーションに統合することができます。たとえば、PyTorchトレーニングコードに統合します。
import os
from nvitop.core import host, Device, HostProcess, GpuProcess
from torch.utils.tensorboard import SummaryWriter
device = Device(0)
this_process = GpuProcess(os.getpid(), device)
writer = SummaryWriter()
for epoch in range(n_epochs):
# some training code here
# ...
this_process.update_gpu_status()
writer.add_scalars(
'monitoring',
{
'device/memory_used': float(device.memory_used()) / (1 << 20), # convert bytes to MiBs
'device/memory_utilization': device.memory_utilization(),
'device/gpu_utilization': device.gpu_utilization(),
'host/cpu_percent': host.cpu_percent(),
'host/memory_percent': host.memory_percent(),
'process/cpu_percent': this_process.cpu_percent(),
'process/memory_percent': this_process.memory_percent(),
'process/used_gpu_memory': float(this_process.gpu_memory()) / (1 << 20), # convert bytes to MiBs
},
global_step
)
詳細については、 https://github.com/XuehaiPan/nvitopを参照してください。
注:GPLv3ライセンスnvitop
の下でリリースされています。自分のプロジェクトのパッケージまたは依存関係として自由に使用してください。ただし、の一部の機能を追加または変更する場合、またはの一部のソースコードを独自のコードにコピーする場合は、ソースコードもGPLv3ライセンスの下でリリースする必要があります。nvitop
nvitop
これはエレガントではないかもしれませんが、試すことができます
while true; do sleep 2; nvidia-smi; done
@Edricによる方法も試しましたが、これは機能しますが、元のレイアウトを好みますnvidia-smi
。
GPUで実行されているプロセスを検索するだけの場合は、次のコマンドを使用するだけです。
lsof /dev/nvidia*
私にとって はnvidia-smi
、watch -n 1 nvidia-smi
ほとんどの場合十分です。プロセスが表示されない場合もありnvidia-smi
ますが、GPUメモリが使い果たされているため、上記のコマンドを使用してプロセスを見つける必要があります。
Linux Mint、そしておそらくUbuntuでは、「nvidia-smi --loop=1」を試すことができます
毎秒監視するために、Windowsマシンで次のコードを使用してバッチファイルを作成しました。わたしにはできる。
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
コマンドを1回だけ実行する場合、nvidia-smi exeは通常「C:\ ProgramFiles\NVIDIACorporation」にあります。
nvidai-smiバイナリを活用するPrometheusGPUMetrics 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使用量、メモリ使用量、エンコーダー使用量、デコーダー使用量など、GPU0のすべてのプロセスを監視するために使用できます。