最近開始接觸雲計算底層GPU虛擬化方面的業務,之前對GPU直通,顯存監控等了解的不多,查閱資料,做下總結。
一、GPU與CPU
GPU 表示 Graphics Processing Unit,即圖像處理單元。一開始的時候GPU 主要用於 3D 遊戲的渲染,但是現在GPU已經廣泛用於加速計算性負載,比如金融模型計算、科學研究以及石油和天然氣開發等。從架構上看,CPU 是由若干核(core)和許多的緩存(cache memory)組成,因此CPU可以並行處理若干線程。相對地,GPU是由幾百個核組成,因此可以併發處理數千個線程。儘管 GPU 的內核數目遠遠超過 CPU,但是它的每個核的處理能力遠小於CPU的核,而且不具有現代操作系統的所需要的一些特性,GPU 並不合適用於處理普通的計算。它們更多地用於計算消耗性操作,比如視頻處理和物理仿真等。
(GPU 和 CPU 對比)
可以使用 lspci 命令來獲取 GPU PCI 設備:
# lspci -nn | grep NVI 85:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [GRID K2] [10de:11bf] (rev a1) 86:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [GRID K2] [10de:11bf] (rev a1
輸出中各個值的說明:
輸出值 | 含義 | 詳細解釋 |
"85:00.0" 和 “86::00.0” | 以 ”bus:slot.func“ 格式來唯一標識一個 PCI 功能設備 |
唯一定位一個 PCI 設備的虛擬功能,可以是一個物理設備,也可以是一個多功能設備的功能設備,一個多功能設備可以最多有8個功能。
|
”0300“ | PCI 設備類型 | 指 PCI 設備的類型,來自不同廠商的同一類設備的類型碼可以是相同的。 |
“10de” | 供應商識別字段(Vendor ID) | 該字段用一標明設備的製造者。一個有效的供應商標識由 PCI SIG 來分配,以保證它的唯一性。Intel 的 ID 爲 0x8086,Nvidia 的 ID 爲 0x10de |
“11bf” | 設備識別字段(Device ID) | 用以標明特定的設備,具體代碼由供應商來分配。本例中表示的是 GPU 圖形卡的設備 ID。 |
“a1” | 版本識別字段(Revision ID) | 用來指定一個設備特有的版本識別代碼,其值由供應商提供 |
二、GPU與顯卡
GPU是顯卡的核心,顯卡,則是由GPU、顯存、電路板,還有BIOS固件組成的,GPU不等於顯卡。
GPU只是顯卡上的一個核心處理芯片,是顯卡的心臟,不能單獨作爲外接擴展卡使用,GPU因並行計算任務較重,所以功耗較大,只能焊接在顯卡的電路板上使用。
顯卡上都有GPU,它是區分顯性能的最主要元件,顯卡也叫顯示適配器,分爲獨立顯卡和主板上集成顯卡,獨立顯卡主要由GPU、顯存和接口電路構成,集成顯卡沒有獨立顯存而是使用主板上的內存。
好果把顯卡的電路板看成主板,GPU就是顯卡上的CPU,即顯卡的中央處理器。
現在的GPU開發廠家只有2個,一個是AMD(ATI),一個是N'VIDIA英偉達。GPU之於顯卡,就相當於CPU之於電腦的關係。
GPU運算時沒有其他CPU那些指令集之類東西干擾,所以專一運算效率更高。
GPU是圖形處理器,一般GPU就是焊接在顯卡上的,大部分情況下,我們所說GPU就等於指顯卡,但是實際情況是GPU是顯示卡的“心臟”,是顯卡的一個核心零部件,核心組成部分。它們是“寄生與被寄生”關係。GPU本身並不能單獨工作,只有配合上附屬電路和接口,才能工作。這時候,它就變成了顯卡。
三、GPU直通
也就是GPU穿透(pass-through),簡單說,GPU直通就是虛擬機實現了將物理顯卡直接映射到虛擬機,這樣你的虛擬機的圖像信息就不再交給虛擬顯卡,而是直接發送到你真是存在的顯卡進行運算,這樣效率更高。
四、GPU虛擬化
虛擬化就是將顯卡進行切片,並將這些顯卡時間片分配給虛擬機使用的過程。有些型號的GPU設備可虛擬化爲n個vGPU,n個虛擬機可同時直接使用該GPU設備,根據不同的GPU設備型號和虛擬策略,可進行GPU獨佔或透傳等相應設計。每個虛擬機通過綁定的vGPU可以直接訪問物理GPU的部分硬件資源(所有vGPU都能夠分時共享訪問物理GPU的3D圖形引擎和視頻編解碼引擎,並擁有獨立的顯存)
五、顯存佔用和GPU監控
nvidia-smi是 Nvidia 顯卡命令行管理套件,基於 NVML 庫,可管理和監控 Nvidia GPU 設備。
這裏推薦一個好用的小工具:gpustat, 直接pip install gpustat即可安裝,gpustat 基於nvidia-smi,可以提供更美觀簡潔的展示,結合 watch 命令,可以動態實時監控GPU 的使用情況。
watch --color -n1 gpustat -cpu
顯存可以看成是空間,類似於內存。
-
顯存用於存放模型,數據
-
顯存越大,所能運行的網絡也就越大
GPU 計算單元類似於 CPU 中的核,用來進行數值計算。