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及以后版本