CUDAを使用するGPUのtopコマンド


127

cudaとMPIを使用するプロセスを監視しようとしていますが、これを行う方法はありますか。たとえば、 "top"コマンドのようなものですが、GPUも監視していますか?



「nvidia-smi pmon -i 0」は、nvidia GPU 0で実行されているすべてのプロセスを監視できます
changqi.xia

回答:


84

私が見つけgpustat非常に便利。でインストールできpip install gpustat、プロセスまたはユーザーによる使用状況の内訳を出力します。

ここに画像の説明を入力してください


4
あなたが置いた後、あなたはwatch gpustat -cp継続的に統計を見ることができますが、色がなくなっています。どのように修正しますか?@Alleo
AbhimanyuAryan

1
@AbhimanyuAryanの使用watch -c。@Roman Orac、ありがとうございます。これは、Pythonで_cursesをインポートしたためにエラーが発生したときに、redhat 8でも機能しました。
Bobak Hashemi

4
watch -c gpustat -cp --color
Lee Netherton、

1
watch -n 0.5 -c gpustat -cp --color
Gabriel

4
gpustatは今持っている--watch:オプションgpustat -cp --watch
jayelm

139

使用済みリソースに関するリアルタイムの洞察を得るには、次のようにします。

nvidia-smi -l 1

これはループし、毎秒ビューを呼び出します。

ループした呼び出しの過去のトレースをコンソール履歴に残したくない場合は、次のようにすることもできます。

watch -n0.1 nvidia-smi

ここで、0.1は秒単位の時間間隔です。

ここに画像の説明を入力してください


2
0.1秒ごとにカードを照会しますか?カードに負荷がかかりますか?さらに、時計を使用して、0.1秒ごとに新しいプロセスを開始します。
ミックT

@MickT大したことですか?Nvidia-smiにはこの構築ループがあるので!「watch」コマンドはnvidia-smi -lと非常に異なりますか?
モハマドジャバ

おそらく、ローエンドのカードに奇妙なロックアップがあるのを見たことがあります。それは、カードでnvidia-smiを実行しているユーザーが多すぎるためだと思います。毎回新しいプロセスをforkしないので、「nvidia-smi -l」を使用する方が良い方法だと思います。また、0.1秒ごとにカードをチェックするのはやり過ぎです。問題をデバッグしようとしているときは毎秒実行します。それ以外の場合は5分ごとに実行してパフォーマンスを監視します。お役に立てば幸いです。:)
ミックT

@Gulzarはい、そうです。
TrostAft

83

私はこの情報を組み合わせたものは何も知りませんが、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 %

4
-lを追加すると、GPUとメモリの使用率を効果的に監視しながら継続的に更新できると思います。
jmsu

6
それを実行したときに、GPU UtilizacionにN / Aとしか表示されない場合はどうなりますか?
natorro

3
@natorro nVidiaが一部のカードのサポートを終了したようです。このリンクforums.nvidia.com/index.php?showtopic=205165を
jmsu

29
私が好むwatch -n 0.5 nvidia-smi出力を使用して、端末を埋める回避する、
ali_m

nvidia-smi pmon -i 0
changqi.xia

19

こちらから最新の安定した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ドライバーでは、このサポートはテスラカードに限定されています。


18

引数「--query-compute-apps =」を使用します

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

さらにヘルプが必要な場合は、以下に従ってください

nvidia-smi --help-query-compute-app

17

使うだけ watch nvidia-smiで、デフォルトで2秒間隔でメッセージが出力されます。

たとえば、次の画像のように:

ここに画像の説明を入力してください

watch -n 5 nvidia-smi(-n 5 x 5s間隔)も使用できます。


16

もう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

2
あなたもせずに、すべてのユーザのGPUを占める計算プログラムのPIDを取得することができsudo、このように:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenarホイト

1
時にはnvidia-smiすべてのプロセスがリストされない場合があるため、そこにリストされていないプロセスで使用されているメモリで終わることになります。これは、これらのプロセスを追跡して強制終了できる主な方法です。
rand 2018

1
@grisaitis気をつけては、私は考えていないpmemことにより、与えられたps口座にGPUのメモリの合計を取るが、CPUのためということpsではありません「NVIDIAのGPU」意識
SebMa

10

あなたは試すことができますnvtop広く使われているに似ている、htopツールが、NVIDIAのGPUのため。nvtopこれが動作中のスクリーンショットです。

実際のnvtopのスクリーンショット


3

これはエレガントではないかもしれませんが、試すことができます

while true; do sleep 2; nvidia-smi; done

@Edricによる方法も試しましたが、機能しますが、私はの元のレイアウトを好みますnvidia-smi


12
または、あなたはただ行うことができますnvidia-smi -l 2。または、コンソール出力の繰り返しを防ぐためにwatch -n 2 'nvidia-smi'
grisaitis

3

gpuで実行されているプロセスを見つけるだけの場合は、次のコマンドを使用するだけです。

lsof /dev/nvidia*

私のために nvidia-smiwatch -n 1 nvidia-smi、ほとんどのケースで十分です。nvidia-smiプロセスが表示されないことがありますが、gpuメモリが使い果たされているため、上記のコマンドを使用してプロセスを見つける必要があります。


2

Linux Mint、そしておそらくはUbuntuで、「nvidia-smi --loop = 1」を試すことができます


0

あるプロメテウス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

0

を使用nvidia-smi pmon -i 0して、GPU 0のすべてのプロセスを監視できます。計算モード、smの使用、メモリの使用、エンコーダの使用、デコーダの使用を含みます。


0

GPU監視プラグインで監視プログラムの目線を 使用できます。

  • オープンソース
  • インストールする: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • 打ち上げへ: sudo glances

ここに画像の説明を入力してください

また、CPU、ディスクIO、ディスク容量、ネットワーク、その他いくつかのことも監視します。

ここに画像の説明を入力してください


0

1秒ごとに監視するために、Windowsマシンで次のコードを含むバッチファイルを作成しました。わたしにはできる。

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

nvidia-smi exeは、コマンドを一度だけ実行したい場合、通常「C:\ Program Files \ NVIDIA Corporation」にあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.