GPU虛擬化現狀及新技術方案XPU
AI行業現狀
隨著我國“新基建”的啟動,AI(Artificial Intelligence,人工智慧)和5G、大資料中心、工業網際網路等一起構成了新基建的7大核心突破領域。AI將滲透到各個行業,變得越來越“基礎設施化”。
德勤在2020上半年釋出的《全球人工智慧發展白皮書》預測資料表明:2025年世界人工智慧市場將超過6萬億美元;中國人工智慧核心產業規模到2020年將增長至1600億元,帶動相關產業規模超過一萬億元。
作為AI市場中的重要組成,以GPU、FPGA等為主的AI加速器市場發展也隨之水漲船高。2020年5月11日IDC釋出的《人工智慧基礎架構市場(2019下半年)跟蹤》報告表明,到2024年中國GPU伺服器市場規模將達到64億美元。
GPU虛擬化背景
目前來看,絕大多數公司使用的是英偉達(NVIDIA)的公司的計算卡,所以下面主要介紹基於NVIDIA的技術現狀。
從使用者角度,GPU虛擬化實現可以分為2種類型:
硬體層面
主要是NVIDIA本身的虛擬化方案:NVIDIA GRID以及NVIDIA MPS。
NVIDIA GRID這個技術目前來看主要針對的是虛擬機器平臺,在技術特性方面也有明確寫出某些功能不支援,其次NVIDIA GRID技術需要購買NVIDIA公司的軟體授權才能使用,這個授權費相當昂貴。
NVIDIA MPS技術是NVIDIA對GPU共享的最早的一種支援模式,通過MPS server和MPS client就可以讓多個GPU任務共享GPU的計算能力。對於容器平臺,這種共享GPU的方式是一種可行性的選擇。不過,這種指令代理技術有一個弊端,就是如果MPS Server掛掉或者其他MPS client端造成的非正常性退出,會導致處於同一個MPS server下的所有MPS client都受到影響,這種影響對於提供共享服務的平臺來說是災難性的,所以在生產環境幾乎沒有使用該方案。
NVIDIA以上2種的共享方式都不支援根據使用者申請的請求對GPU計算能力的時間分片特性,GPU的使用是搶佔式使用,無法做到資源的隔離。
軟體層面
該層面實現GPU虛擬化,又分為兩種主要實現方式:
1. 實現在NVIDIA CUDA Library API之上,它通過劫持對CUDA API的呼叫來做到GPU的虛擬化,此類方案缺點是相容性依賴於廠商,每個版本需要對齊,同時需要重新編譯AI應用,對於使用者來說使用成本較高。
2. 實現在核心NVIDIA Driver之上。採用零侵入式的設計,使用上對使用者可以做到無感知,對於CUDA的版本依賴較小。但該方案整體實現難度較大,需要對Linux核心和GPU架構的原理和實現有深入理解。
XPU方案
XPU是優優工場(YOYOWORKS)推出的容器GPU虛擬化產品。XPU正是採用前文所述的第二種實現方式,核心思想是將GPU在核心層進行切分,向上模擬出統一的XPU裝置供容器使用,即多個容器共享一張GPU卡。XPU實現了一套框架能夠很好的遮蔽異構GPU和應用(TensorFlow,PyTorch等)之間的耦合,對GPU進行故障隔離,視訊記憶體隔離,算力隔離,從而實現業務的安全隔離,提高GPU硬體資源的利用率並降低使用成本。
XPU特點
XPU採用零侵入式架構設計,通過kernel module,services及container runtime為容器提供虛擬的GPU裝置,在保證效能的前提下隔離視訊記憶體和算力,為充分利用GPU硬體資源進行訓練和推理提供有效保障。
高效能
- 採用本地使用GPU計算資源的架構,有天然的效能優勢,相比於物理GPU,效能損耗幾乎為零。
- 支援將GPU切片為任意大小的XPU,從而允許多AI負載並行執行,提高物理GPU利用率。
- 提高GPU綜合利用率多達3-10倍,1張卡相當於起到N張卡的效果,真正做到昂貴算力平民化。
安全性
- 完美支援GPU單卡和多卡的算力隔離,視訊記憶體隔離及故障隔離。
相容性
- 零侵入設計: 最大的限度保證向後和向前相容。使用者零開銷在 XPU 平臺上運營現有AI應用,無縫相容已有NGC等容器映象。
- 硬體相容性: 完美支援包括NVIDIA Pascal及以後架構的系列 GPU(GeForce,Quadro/RTX,Tesla);支援裸金屬和虛擬環境,支援物理GPU和vGPU。
- 架構相容性:依託實現在核心模組層的通用介面能力,XPU 完美支援CUDA8.0 及以後所有版本的框架和應用。
- 生態相容性:相容業界標準的Kubernetes和NVIDIA Docker產品和方案。
軟體架構
一個典型的XPU部署架構,主要包含兩大部分: 系統相關部分及容器相關部分功能元件。XPU通過將物理GPU等裝置進行劃分和隔離,向上提供切分後的算力,有效提高異構計算資源的利用率。其邏輯結構圖如下所示:
系統相關部分包括:XPU toolkit,XPU services & XPU driver module,其中XPU driver module為核心驅動,給容器提供虛擬的GPU裝置,提供有QoS保證的視訊記憶體和算力。
容器相關部分為XPU container runtime,作為Docker container的對應工具,主要實現將XPU裝置對映給容器,讓容器內的能夠識別經過虛擬化的GPU裝置,從而實現在容器內執行GPU相關負載。
部署形態
XPU的各個元件,支援直接部署在裸金屬伺服器上,即安裝作業系統後,直接以Binary形式部署,也支援虛擬化部署。XPU具備適配多種Linux作業系統和雲平臺的能力,因此,XPU具有多樣化的部署形式。
XPU支援CentOS、Ubuntu等主流Linux發行版本,同時支援基於KVM的虛擬機器雲平臺和基於Docker的容器雲平臺。尤其是支援原生容器,並實現了和Kubernetes的平滑對接。
XPU與容器的整合
XPU採用0侵入部署方式,支援原生容器,即可執行AI應用,大大簡化了客戶演算法工程師運維、管理AI基礎架構的工作。在NVIDIA Docker的基礎上,通過實現一套XPU container runtime,完成XPU在容器內的建立,刪除以及監控等功能。
使用者通過設定Docker環境變數的方式,用於為容器申請不同規格的XPU裝置,XPU container runtime將虛擬出來的XPU,通過Docker暴露給容器內的程式使用。在K8S叢集中,該元件用於接收K8S排程Pod設定的環境變數來負責建立相應規格的XPU容器。
XPU與Kubernetes整合
利用K8S的device plugin及extended resources機制,將XPU整合到K8S叢集中。
K8S device plugin機制如下圖所示:
XPU為Kubernetes提供兩個外掛,實現與K8S的整合對接。整合後,系統管理員只需要在K8S中,即可完成對GPU資源的集中配置和排程管理。並且,允許系統管理員通過單一介面排程全部資料中心資源,實現SDDC(Software Defined Data Center,軟體定義的資料中心),這樣就簡化了運維工作。
XPU為Kubernetes提供的兩個外掛是:
- XPU Kubernetes Device Plugin
通過和XPU driver module 及XPU Services通訊,獲取XPU資源池資訊。
通過Kubernetes定義的Device Plugin標準向Kubernetes註冊名字為yoyoworks.com/xpu-shares的資源。
- XPU Kubernetes Scheduler Extender
提供基於HTTP API通訊的鬆耦合排程擴充套件功能。
通過配置檔案向Kubernetes註冊名字為yoyoworks.com/xpu-shares的資源關鍵字,使其指向XPU Kubernetes Scheduler Extender的HTTP服務地址。
相容性列表
NVIDIA GPU
完全支援 NVIDIA Pascal 及以後架構,包括GeForce/Quadro/RTX/Tesla 全系列GPU 卡;
支援裸金屬環境下使用物理 NVIDIA GPU
支援虛擬化環境下使用穿透的 NVIDIA GPU
支援虛擬化環境下使用 NVIDIA GRID vGPU
典型 NVIDIA GPU
Telsa |
A100/A10/A16/A30/A40 T4 V100 P100/P40/P6/P4 |
RTX | A6000/A5000/A4000 |
Quadro |
RTX8000/RTX6000/RTX5000/RTX4000 P6000/P5000/P4000 |
GeForce |
3090/3080Ti 等30XX 系列 2080Ti/2080 等20XX 系列 1080Ti/1080 等10XX 系列 |
注:上述列出的只是 NVIDIA GPU 典型型號,通常XPU 相容Pascal 及之後所有 NVIDIA GPU。
作業系統
- CentOS 7.9/8.4, RHEL 7.9/8.4(64位)
- Ubuntu Server 18.04/20.04 LTS(64位)
NVIDIA CUDA
完全支援 CUDA 8.x, CUDA 9.x, CUDA 10.x, CUDA 11.x 容器以及 CUDA 應用
注:只支援 64 位 CUDA 容器和 CUDA 應用
雲平臺
容器環境:Docker 19.03 及以後版本
Kubernetes環境:Kubernetes 1.18及以後版本