GPU
DeepLearning

nvidia-smiコマンドの詳細ついて

Volatile GPU-Utilが0%なのにプロセスは立っててメモリは使われてる。ってことが起きた。

資料を見たけど、ただメモリだけ使ってるって状態なのだと解釈してる。

Thu Mar  2 13:49:14 2017       

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.57 Driver Version: 367.57 |
|-------------------------------+----------------------+----------------------+
| 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 TIT... Off | 0000:02:00.0 Off | N/A |
| 22% 28C P8 15W / 250W | 242MiB / 12206MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX TIT... Off | 0000:03:00.0 Off | N/A |
| 53% 83C P2 227W / 250W | 8524MiB / 12206MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce GTX TIT... Off | 0000:83:00.0 Off | N/A |
| 22% 28C P8 16W / 250W | 242MiB / 12206MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 GeForce GTX TIT... Off | 0000:84:00.0 Off | N/A |
| 37% 79C P2 238W / 250W | 5633MiB / 12206MiB | 99% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 16163 C /home/ubuntu/torch/install/bin/luajit 240MiB |
| 1 16163 C /home/ubuntu/torch/install/bin/luajit 8522MiB |
| 2 16163 C /home/ubuntu/torch/install/bin/luajit 240MiB |
| 3 16163 C /home/ubuntu/torch/install/bin/luajit 240MiB |
| 3 21068 C ./darknet 5388MiB |
+-----------------------------------------------------------------------------+

nvidia-smiコマンドのみを使ってたので、詳細を知ると何か分かるのかと思ってメモした。


  • cpuとgpuの紐付けを見る場合

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

参照

http://qiita.com/miyamotok0105/items/033b850a205f958808e9




ほとんどのユーザーは、CPUの状態を確認する方法、空きメモリ量を確認する方法、空きディスク容量を調べる方法を理解しています。対照的に、GPUの健全性と状態を把握することは、歴史的に困難でした。見た目がわからない場合は、システム内のGPUのタイプと機能を判断することが難しい場合もあります。ありがたいことに、NVIDIAの最新のハードウェアおよびソフトウェアツールは、この点で優れた改善をしました。

このツールは、NVIDIAのシステム管理インターフェイス(nvidia-smi)です。カードの世代によって、さまざまなレベルの情報を収集することができます。さらに、GPU設定オプション(ECCメモリ機能など)を有効または無効にすることができます。

さて、NVIDIA GPUでGPGPUコードを実行するのに問題がある場合は、nvidia-smiを使用すると便利です。たとえば、一部のシステムでは、/ devにある適切なNVIDIAデバイスはブート時に作成されません。ルートとして単純なnvidia-smiクエリを実行すると、すべてのカードが初期化され、/ devに適切なデバイスが作成されます。それ以外のときは、GPUカードがすべて表示され、適切に通信されていることを確認するだけです。 Tesla K80 GPUカードを1つ搭載した最新バージョンのデフォルト出力は次のとおりです。

Tue Apr  7 12:56:41 2015       

+------------------------------------------------------+
| NVIDIA-SMI 346.46 Driver Version: 346.46 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 On | 0000:05:00.0 Off | Off |
| N/A 32C P8 26W / 149W | 56MiB / 12287MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla K80 On | 0000:06:00.0 Off | Off |
| N/A 29C P8 29W / 149W | 56MiB / 12287MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+


持続モード

Linuxでは、GPUを持続モードに設定して、アプリケーションがカードにアクセスしていなくてもNVIDIAドライバをロードし続けることができます。 これは、一連の短いジョブを実行しているときに特に便利です。 持続モードはより多くの電力を使用しますが、GPUアプリケーションが開始されるたびに発生するかなり長い遅延を防ぎます。 GPUに特定のクロック速度または電力制限を割り当てた場合(NVIDIAドライバのアンロード時に変更が失われるため)も必要です。 次のコマンドを実行して、すべてのGPUSで持続モードを有効にします。

GPU初期化が遅いという問題がある

https://github.com/dmlc/cxxnet/issues/108

Persistence Daemon

http://docs.nvidia.com/deploy/driver-persistence/index.html#persistence-daemon

にも載っているが、これを有効にしていると電力はかかるがgpuドライバのロード時間が短縮される。

pytorchやchainerの推定処理で2秒近く短縮された。

持続モードonにする

nvidia-smi -pm 1

持続モードoffにする

nvidia-smi -pm 0

Windowsでは、nvidia-smiは持続モードを設定できません。 代わりに、計算用GPUをTCCモードに設定する必要があります。 これは、NVIDIAのグラフィカルなGPUデバイス管理パネルで行う必要があります。


nvidia-smiでサポートされているGPU

NVIDIAのSMIツールは、2011年以降にリリースされたNVIDIA GPUを本質的にサポートしています。これらには、フェルミや高級アーキテクチャのファミリ(Kepler、Maxwellなど)のTesla、Quadro、GRID、GeForceデバイスが含まれます。

サポートされている製品は次のとおりです。

テスラ:S1070、S2050、C1060、C2050 / 70、M2050 / 70/90、X2070 / 90、K10、K20、K20X、K40、K80

Quadro:4000,5000,6000,7000、M2070-Q、K-シリーズ、M-シリーズ

GeForce:TeslaおよびQuadro製品よりも利用可能な測定基準が少なく、さまざまなレベルのサポート


GPUステータスのクエリ

顧客にベンチマークサービスとして提供するMicrowayのGPUテストドライブクラスタには、NVIDIAの最新Tesla GPUグループが含まれています。 これらは、NVIDIAの高性能コンピューティングGPUであり、多くの健康状態情報を提供します。 以下の例は、この内部クラスタから取得したものです。

使用可能なすべてのNVIDIAデバイスを一覧表示するには、次のコマンドを実行します。

[root@md ~]# nvidia-smi -L

GPU 0: Tesla K40m (UUID: GPU-d0e093a0-c3b3-f458-5a55-6eb69fxxxxxx)
GPU 1: Tesla K40m (UUID: GPU-d105b085-7239-3871-43ef-975ecaxxxxxx)

各GPUの詳細を記載するには、

[root@md ~]# nvidia-smi --query-gpu=index,name,uuid,serial --format=csv

0, Tesla K40m, GPU-d0e093a0-c3b3-f458-5a55-6eb69fxxxxxx, 0323913xxxxxx
1, Tesla K40m, GPU-d105b085-7239-3871-43ef-975ecaxxxxxx, 0324214xxxxxx


GPUブーストの監視と管理

NVIDIAが最新のGPUに含まれているGPUブースト機能により、負荷に応じてGPUクロックが変化します(電力とサーマルヘッドルームが利用可能な限り最大性能を達成します)。 しかし、利用可能なヘッドルームの量は、アプリケーションによって(そして入力ファイルによってさえも)変わりますので、ユーザーと管理者はGPUの状態を常に把握しておく必要があります。

使用可能なクロック速度の一覧は、各GPU(この場合は、Tesla K80)で表示できます。

nvidia-smi -q -d SUPPORTED_CLOCKS

GPU 0000:04:00.0
Supported Clocks
Memory : 2505 MHz
Graphics : 875 MHz
Graphics : 862 MHz
Graphics : 849 MHz
Graphics : 836 MHz
Graphics : 823 MHz
Graphics : 810 MHz
Graphics : 797 MHz
Graphics : 784 MHz
Graphics : 771 MHz
Graphics : 758 MHz
Graphics : 745 MHz
Graphics : 732 MHz
Graphics : 719 MHz
Graphics : 705 MHz
Graphics : 692 MHz
Graphics : 679 MHz
Graphics : 666 MHz
Graphics : 653 MHz
Graphics : 640 MHz
Graphics : 627 MHz
Graphics : 614 MHz
Graphics : 601 MHz
Graphics : 588 MHz
Graphics : 575 MHz
Graphics : 562 MHz
Memory : 324 MHz
Graphics : 324 MHz

上記の出力は、メモリクロック速度が2つしかサポートされていないことを示します(2505 MHzおよび324 MHz)。 2505MHzで動作するメモリでは、サポートされているGPUクロック速度は25種類あります。 324 MHzで動作するメモリでは、1つのGPUクロック速度(アイドル状態のGPU状態)のみがサポートされています。 Tesla K80では、GPU Boostが自動的にこれらの速度を管理し、可能な限り速く実行します。 Tesla K40のような他のモデルでは、管理者は特定のGPUクロック速度を選択する必要があります。

現在のGPUクロック速度、デフォルトクロック速度、および可能な最大クロック速度を確認するには、次のコマンドを実行します。

nvidia-smi -q -d CLOCK

GPU 0000:04:00.0
Clocks
Graphics : 875 MHz
SM : 875 MHz
Memory : 2505 MHz
Applications Clocks
Graphics : 875 MHz
Memory : 2505 MHz
Default Applications Clocks
Graphics : 562 MHz
Memory : 2505 MHz
Max Clocks
Graphics : 875 MHz
SM : 875 MHz
Memory : 2505 MHz
SM Clock Samples
Duration : 3730.56 sec
Number of Samples : 8
Max : 875 MHz
Min : 324 MHz
Avg : 873 MHz
Memory Clock Samples
Duration : 3730.56 sec
Number of Samples : 8
Max : 2505 MHz
Min : 324 MHz
Avg : 2500 MHz
Clock Policy
Auto Boost : On
Auto Boost Default : On

理想的には、すべてのクロックを常に最高速度で実行したいと考えています。 ただし、これはすべてのアプリケーションで可能ではありません。 各GPUの現在の状態とクロックの減速の理由を確認するには、PERFORMANCEフラグを使用します。

nvidia-smi -q -d PERFORMANCE

GPU 0000:04:00.0
Performance State : P0
Clocks Throttle Reasons
Idle : Not Active
Applications Clocks Setting : Not Active
SW Power Cap : Not Active
HW Slowdown : Not Active
Unknown : Not Active

GPUクロックのいずれかが遅い速度で実行されている場合、上記のクロックスロットル理由の1つ以上がアクティブとしてマークされます。 HW SlowdownまたはUnknownがアクティブである場合は、電源または冷却の問題を示す可能性が最も高いため、条件に関する最も重要なものがあります。 残りの状態は、通常、カードがアイドル状態であるか、またはシステム管理者によって手動で低速モードに設定されていることを示します。


システムトポロジの確認

より高度なNVIDIA GPU機能(GPU Directなど)を適切に利用するには、システムトポロジが適切に構成されていることが重要です。 このトポロジは、PCI-Expressデバイス(GPU、InfiniBand HCA、ストレージコントローラなど)が相互にまたはシステムのCPUにどのように接続されるかを示します。 正しくない場合は、特定の機能の速度が低下したり、動作が完全に停止する可能性もあります。 このような問題に取り組むために、最近のバージョンのnvidia-smiには、実験的なシステムトポロジビューが含まれています。

nvidia-smi topo --matrix

GPU0 GPU1 GPU2 GPU3 mlx4_0 CPU Affinity
GPU0 X PIX PHB PHB PHB 0-11
GPU1 PIX X PHB PHB PHB 0-11
GPU2 PHB PHB X PIX PHB 0-11
GPU3 PHB PHB PIX X PHB 0-11
mlx4_0 PHB PHB PHB PHB X

Legend:

X = Self
SOC = Path traverses a socket-level link (e.g. QPI)
PHB = Path traverses a PCIe host bridge
PXB = Path traverses multiple PCIe internal switches
PIX = Path traverses a PCIe internal switch

このセクションを見直すと、慣れていくこともありますが、非常に価値があるかもしれません。 上記の構成では、2台のTesla K80 GPUと1台のMellanox FDR InfiniBand HCAがすべてサーバーの最初のCPUに接続されています。 CPUは12コアのXeonであるため、トポロジツールではジョブを最初の12個のCPUコアに割り当てることをお勧めします(アプリケーションによって異なります)。 このトピックに関するご質問は、HPC GPUの専門家にお問い合わせください。


すべてのGPUの詳細を表示する

特定のGPUで使用可能なすべてのデータを一覧表示するには、-iを使用してカードのIDを指定します。 古いTesla GPUカードの出力は次のとおりです。

nvidia-smi -i 0 -q

==============NVSMI LOG==============

Timestamp : Mon Dec 5 22:05:49 2011

Driver Version : 270.41.19

Attached GPUs : 2

GPU 0:2:0
Product Name : Tesla M2090
Display Mode : Disabled
Persistence Mode : Disabled
Driver Model
Current : N/A
Pending : N/A
Serial Number : 032251100xxxx
GPU UUID : GPU-2b1486407f70xxxx-98bdxxxx-660cxxxx-1d6cxxxx-9fbd7e7cd9bf55a7cfb2xxxx
Inforom Version
OEM Object : 1.1
ECC Object : 2.0
Power Management Object : 4.0
PCI
Bus : 2
Device : 0
Domain : 0
Device Id : 109110DE
Bus Id : 0:2:0
Fan Speed : N/A
Memory Usage
Total : 5375 Mb
Used : 9 Mb
Free : 5365 Mb
Compute Mode : Default
Utilization
Gpu : 0 %
Memory : 0 %
Ecc Mode
Current : Enabled
Pending : Enabled
ECC Errors
Volatile
Single Bit
Device Memory : 0
Register File : 0
L1 Cache : 0
L2 Cache : 0
Total : 0
Double Bit
Device Memory : 0
Register File : 0
L1 Cache : 0
L2 Cache : 0
Total : 0
Aggregate
Single Bit
Device Memory : 0
Register File : 0
L1 Cache : 0
L2 Cache : 0
Total : 0
Double Bit
Device Memory : 0
Register File : 0
L1 Cache : 0
L2 Cache : 0
Total : 0
Temperature
Gpu : N/A
Power Readings
Power State : P12
Power Management : Supported
Power Draw : 31.57 W
Power Limit : 225 W
Clocks
Graphics : 50 MHz
SM : 100 MHz
Memory : 135 MHz

上の例は、アイドルカードを示しています。以下は、GPUアクセラレーションされたAMBERを実行しているカードの抜粋です。

nvidia-smi -i 0 -q -d MEMORY,UTILIZATION,POWER,CLOCK,COMPUTE

==============NVSMI LOG==============

Timestamp : Mon Dec 5 22:32:00 2011

Driver Version : 270.41.19

Attached GPUs : 2

GPU 0:2:0
Memory Usage
Total : 5375 Mb
Used : 1904 Mb
Free : 3470 Mb
Compute Mode : Default
Utilization
Gpu : 67 %
Memory : 42 %
Power Readings
Power State : P0
Power Management : Supported
Power Draw : 109.83 W
Power Limit : 225 W
Clocks
Graphics : 650 MHz
SM : 1301 MHz
Memory : 1848 MHz

残念ながら、以前のMシリーズの受動的に冷却されたTesla GPUでは、nvidia-smiに温度が報告されていません。最近のQuadroおよびTesla GPUは、より多くの量のメトリックデータをサポートします。

==============NVSMI LOG==============

Timestamp : Tue Apr 7 13:01:34 2015
Driver Version : 346.46

Attached GPUs : 2
GPU 0000:05:00.0
Product Name : Tesla K80
Product Brand : Tesla
Display Mode : Disabled
Display Active : Disabled
Persistence Mode : Enabled
Accounting Mode : Enabled
Accounting Mode Buffer Size : 128
Driver Model
Current : N/A
Pending : N/A
Serial Number : 0324614xxxxxx
GPU UUID : GPU-81dexxxx-87xx-4axx-79xx-3ddf4dxxxxxx
Minor Number : 0
VBIOS Version : 80.21.1B.00.01
MultiGPU Board : Yes
Board ID : 0x300
Inforom Version
Image Version : 2080.0200.00.04
OEM Object : 1.1
ECC Object : 3.0
Power Management Object : N/A
GPU Operation Mode
Current : N/A
Pending : N/A
PCI
Bus : 0x05
Device : 0x00
Domain : 0x0000
Device Id : 0x102D10DE
Bus Id : 0000:05:00.0
Sub System Id : 0x106C10DE
GPU Link Info
PCIe Generation
Max : 3
Current : 1
Link Width
Max : 16x
Current : 16x
Bridge Chip
Type : PLX
Firmware : 0xF0472900
Replays since reset : 0
Tx Throughput : N/A
Rx Throughput : N/A
Fan Speed : N/A
Performance State : P8
Clocks Throttle Reasons
Idle : Active
Applications Clocks Setting : Not Active
SW Power Cap : Not Active
HW Slowdown : Not Active
Unknown : Not Active
FB Memory Usage
Total : 12287 MiB
Used : 56 MiB
Free : 12231 MiB
BAR1 Memory Usage
Total : 16384 MiB
Used : 2 MiB
Free : 16382 MiB
Compute Mode : Default
Utilization
Gpu : 0 %
Memory : 0 %
Encoder : 0 %
Decoder : 0 %
Ecc Mode
Current : Disabled
Pending : Disabled
ECC Errors
Volatile
Single Bit
Device Memory : N/A
Register File : N/A
L1 Cache : N/A
L2 Cache : N/A
Texture Memory : N/A
Total : N/A
Double Bit
Device Memory : N/A
Register File : N/A
L1 Cache : N/A
L2 Cache : N/A
Texture Memory : N/A
Total : N/A
Aggregate
Single Bit
Device Memory : N/A
Register File : N/A
L1 Cache : N/A
L2 Cache : N/A
Texture Memory : N/A
Total : N/A
Double Bit
Device Memory : N/A
Register File : N/A
L1 Cache : N/A
L2 Cache : N/A
Texture Memory : N/A
Total : N/A
Retired Pages
Single Bit ECC : 0
Double Bit ECC : 0
Pending : No
Temperature
GPU Current Temp : 34 C
GPU Shutdown Temp : 93 C
GPU Slowdown Temp : 88 C
Power Readings
Power Management : Supported
Power Draw : 25.65 W
Power Limit : 149.00 W
Default Power Limit : 149.00 W
Enforced Power Limit : 149.00 W
Min Power Limit : 100.00 W
Max Power Limit : 175.00 W
Clocks
Graphics : 324 MHz
SM : 324 MHz
Memory : 324 MHz
Applications Clocks
Graphics : 875 MHz
Memory : 2505 MHz
Default Applications Clocks
Graphics : 562 MHz
Memory : 2505 MHz
Max Clocks
Graphics : 875 MHz
SM : 875 MHz
Memory : 2505 MHz
Clock Policy
Auto Boost : On
Auto Boost Default : On
Processes : None

もちろん、私たちは、nvidia-smiツールのすべての可能な用途については扱っていません。 オプションの完全なリストを読むには、nvidia-smi -hを実行します(かなり長いです)。 カードの設定を変更する必要がある場合は、デバイスの変更セクションを参照してください。

 -pm,  --persistence-mode=   Set persistence mode: 0/DISABLED, 1/ENABLED

-e, --ecc-config= Toggle ECC support: 0/DISABLED, 1/ENABLED
-p, --reset-ecc-errors= Reset ECC error counts: 0/VOLATILE, 1/AGGREGATE
-c, --compute-mode= Set MODE for compute applications:
0/DEFAULT, 1/EXCLUSIVE_THREAD,
2/PROHIBITED, 3/EXCLUSIVE_PROCESS
--gom= Set GPU Operation Mode:
0/ALL_ON, 1/COMPUTE, 2/LOW_DP
-r --gpu-reset Trigger reset of the GPU.
Can be used to reset the GPU HW state in situations
that would otherwise require a machine reboot.
Typically useful if a double bit ECC error has
occurred.
Reset operations are not guarenteed to work in
all cases and should be used with caution.
--id= switch is mandatory for this switch
-ac --applications-clocks= Specifies clocks as a
pair (e.g. 2000,800) that defines GPU's
speed in MHz while running applications on a GPU.
-rac --reset-applications-clocks
Resets the applications clocks to the default values.
-acp --applications-clocks-permission=
Toggles permission requirements for -ac and -rac commands:
0/UNRESTRICTED, 1/RESTRICTED
-pl --power-limit= Specifies maximum power management limit in watts.
-am --accounting-mode= Enable or disable Accounting Mode: 0/DISABLED, 1/ENABLED
-caa --clear-accounted-apps
Clears all the accounted PIDs in the buffer.
--auto-boost-default= Set the default auto boost policy to 0/DISABLED
or 1/ENABLED, enforcing the change only after the
last boost client has exited.
--auto-boost-permission=
Allow non-admin/root control over auto boost mode:
0/UNRESTRICTED, 1/RESTRICTED

このツールを使用すると、NVIDIA GPUのステータスと状態を確認するのが簡単です。 時間の経過とともにカードを監視する場合は、nvidia-smiが必要以上にリソースを消費する可能性があります。 そのためには、C、Perl、Pythonバインディングを提供するNVIDIAのGPU管理ライブラリ(NVML)をご覧ください。 一般的に使用されるGangliaなどのクラスタツールでは、これらのバインディングを使用してGPUステータスをクエリします。

ログを出力

nvidia-smi -l 5 --query-gpu=utilization.gpu,utilization.memory,memory.total,memory.free,memory.used --format=csv -f ./temp.csv


リアルタイムで監視

watch -n1 "nvidia-smi"


windowsの場合

下記にnvidia-smi.exeがあるので、パスを追加しておく。

C:\Program Files\NVIDIA Corporation\NVSMI

win10の環境変数の追加方法

http://www.wannko.net/windows10/etc/kankyo.html


参考

https://www.microway.com/hpc-tech-tips/nvidia-smi_control-your-gpus/

https://qiita.com/samacoba/items/368d67f2d7d4e11abdf7