簡介
nvidia-smi全稱是NVIDIA System Management Interface ,它是一個基於NVIDIA Management Library(NVML)構建的命令列實用工具,旨在幫助管理和監控NVIDIA GPU裝置。
詳解nvidia-smi命令
接下來我介紹一下,用nvidia-smi命令來查詢機器GPU使用情況的相關內容。
nvidia-smi
我以上圖的查詢內容為例,已經複製出來了,如下,
(myconda) root@8dbdc324be74:~# nvidia-smi
Tue Jul 20 14:35:11 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... On | 00000000:1C:00.0 Off | 0 |
| N/A 27C P0 31W / 300W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... On | 00000000:1D:00.0 Off | 0 |
| N/A 25C P0 32W / 300W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
我們來拆分一下
NVIDIA-SMI 460.32.03 #
Driver Version: 460.32.03 # 英偉達驅動版本
CUDA Version: 11.2 # CUDA版本
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... On | 00000000:1C:00.0 Off | 0 |
| N/A 27C P0 31W / 300W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... On | 00000000:1D:00.0 Off | 0 |
| N/A 25C P0 32W / 300W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
GPU: # GPU的編號,0代表第一張顯示卡,1代表第二張,依次類推
Fan: # 風扇轉速(0%–100%),N/A表示沒有風扇
Name: # GPU的型號,以此處為例是P100
Temp: # GPU溫度(GPU溫度過高會導致GPU頻率下降)
Perf: # 效能狀態,從P0(最大效能)到P12(最小效能)
Pwr: # GPU功耗
Persistence-M: # 持續模式的狀態(持續模式耗能大,但在新的GPU應用啟動時花費時間更少)
Bus-Id: # GPU匯流排,domain:bus:device.function
Disp.A: # Display Active,表示GPU的顯示是否初始化
Memory-Usage: # 視訊記憶體使用率(顯示視訊記憶體佔用情況)
Volatile GPU-Util: # 浮動的GPU利用率
ECC: # 是否開啟錯誤檢查和糾正技術,0/DISABLED, 1/ENABLED
Compute M.: # 計算模式,0/DEFAULT,1/EXCLUSIVE_PROCESS,2/PROHIBITED
Memory-Usage和Volatile GPU-Util的兩個不一樣的東西,顯示卡由GPU和視訊記憶體等部分所構成,GPU相當於顯示卡上的CPU,視訊記憶體相當於顯示卡上的記憶體。在跑任務的過程中可以通過優化程式碼來提高這兩者的使用率。
nvcc和nvidia-smi顯示的CUDA版本不同?
(myconda) root@8dbdc324be74:~# nvidia-smi
Tue Jul 20 14:35:11 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla P100-SXM2... On | 00000000:1C:00.0 Off | 0 |
| N/A 27C P0 31W / 300W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-SXM2... On | 00000000:1D:00.0 Off | 0 |
| N/A 25C P0 32W / 300W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
(myconda) root@8dbdc324be74:~# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Oct_12_20:09:46_PDT_2020
Cuda compilation tools, release 11.1, V11.1.105
Build cuda_11.1.TC455_06.29190527_0
可以看到nvcc的CUDA版本是11.1,而nvidia-smi的CUDA版本是11.2。這對執行任務是沒有影響的,絕大多數程式碼都是可以正常跑起來的,引起這個的主要是因為CUDA兩個主要的API,runtime API和driver API。神奇的是這兩個API都有自己對應的CUDA版本(如圖上的11.1和11.2)。在StackOverflow有一個解釋,如果driver API和runtime API的CUDA版本不一致可能是因為你使用的是單獨的GPU driver installer,而不是CUDA Toolkit installer裡的GPU driver installer。在矩池雲上的表現可以解釋為driver API來自於物理機器的驅動版本,runtime API是來自於矩池雲映象環境內的CUDA Toolkit版本。
實時顯示視訊記憶體使用情況
nvidia-smi -l 5 #5秒重新整理一次
動態重新整理資訊(預設5s重新整理一次),按Ctrl+C停止,可指定重新整理頻率,以秒為單位
#每隔一秒重新整理一次,重新整理頻率改中間數字即可
watch -n 1 -d nvidia-smi
在這裡不建議使用watch檢視nvidia-smi,watch每個時間週期開啟一個程式(PID),檢視後關閉程式,可能會影響到其他程式。