【摘要】隨著大模型的興起,GPU算力的需求越來越多,而當前現實狀況使企業往往受限於有限的GPU卡資源,即便進行了虛擬化,往往也難以充分使用GPU卡資源或持續使用資源。為解決GPU算力資源不均衡等問題,同時支援GPU算力的國產化替代,提升GPU資源的使用率,GPU算力池化需求迫在眉睫。
本文分享了GPU設備虛擬化的幾種路線、GPU虛擬化與共享方案以及GPU算力池化雲端原生實作。
【作者】汪照輝,中國銀河證券架構師,專注於容器雲、微服務、DevOps、資料治理、數位轉型等領域,對相關技術有獨特的理解與見解。擅長於軟體規劃和設計,提出的「平台融合」的觀點越來越被認同和事實證明。發表了許多技術文章探討容器平台建置、微服務技術、DevOps、數位轉型、資料治理、中台建置等內容,受到了廣泛關注與肯定。
智慧化應用如人臉辨識、語音辨識、文字辨識、智慧推薦、智慧客服、智慧風控等已廣泛應用於各行各業,這些應用被稱為判定式AI的範疇,通常和特定的業務場景相綁定,因此在使用GPU(Graphics Processing Unit)卡的時候也通常各自獨立,未考慮業務間GPU共享能力,至多實現vGPU虛擬化切分,從而一張實體GPU卡虛擬出多張vGPU,可以運行多個判定式AI 應用。隨著大模型的興起,對GPU算力的需求越來越多,而當前現實情況使企業往往受限於有限的GPU卡資源,難以支撐眾多的業務需求,同時由於業務特性等,即便進行了虛擬化,往往難以充分使用GPU卡資源或持續使用資源,因此也造成有限的卡片資源也無法有效利用。
從GPU虛擬化需求到池化需求智慧化應用數量的成長對GPU算力資源的需求越來越多。 NVIDIA雖然提供了GPU虛擬化和多GPU執行個體切分方案等,但仍無法滿足自由定義虛擬GPU和整個企業GPU資源的共享重複使用需求。 TensorFlow、Pytorch等智慧化應用框架開發的應用往往獨佔一張GPU整卡(AntMan框架是為共享的形式設計的),從而使GPU卡短缺,另一方面,大部分應用卻只使用卡的一小部分資源,例如身分證辨識、票據辨識、語音辨識、投研分析等推理場景,這些場景GPU卡的使用率都比較低,沒有業務請求時利用率甚至是0%,有算力卻受限於卡的有限數量。
單一推理場景佔用一張卡片造成很大浪費,和卡片數量不足形成矛盾,因此,算力切分是目前許多場景的基本需求。再者,往往受限於組織架構等因素,GPU由各團隊自行採購使用,算力資源形成孤島,分佈不均衡,有的團隊GPU資源空閒,有團隊無卡可用。為解決GPU算力資源不均衡等問題,同時支援GPU算力的國產化替代,協調線上和離線資源需求、業務高峰和低峰值資源需求、訓練和推理、以及開發、測試、生產環境對資源需求不同,實現算力的統一管理與調度重複使用,實現GPU資源的切分、聚合、超分、遠端呼叫、應用熱遷移等能力,提升GPU資源的利用率,GPU算力池化需求迫在眉睫。
GPU設備虛擬化路線GPU設備虛擬化有幾個可行方案。
首先是PCIe直通模式(PCIe Pass-through技術,pGPU),也就是將實體主機上的整塊GPU卡直通掛載到虛擬機器上使用。但這種方式是獨佔模式,GPU卡沒有虛擬化切分,並不能解決多個應用運行在一張卡上的問題,因此意義不是很大。
第二是採用SR-IOV技術,讓一個PCIe設備在多個虛擬機器之間共享,同時保持較高效能。透過SR-IOV在實體GPU設備上創建多個虛擬vGPU來實現的,每個虛擬vGPU可以被分配到一個虛擬機,讓虛擬機直接存取和控制這些虛擬功能,從而實現高效的I/O虛擬化。 NVIDIA早期的vGPU就是這樣的實現,不過NVIDIA vGPU需要額外的license,額外增加了成本。SR-IOV雖然實現了1:N的能力,但其彈性比較差,難以更細粒度的分割和調度。
第三是MPT(Mediated Pass-Through,受控制的直通)模式。 MPT本質上是一種通用的PCIe設備虛擬化方案。兼顧了1:N靈活性、高性能、功能完整性,但邏輯上相當於實現在內核態的device-model,廠商通常不會公開硬體編程接口,因此採用MPT可能會形成廠商依賴。用的最多的模式是API轉送模式。根據AI應用的呼叫層次(如下圖),API轉送有多個層次,包含CUDA API轉送(圖中①)、GPU Driver API轉送(圖中②)和裝置硬體層API轉送(圖③)。設備硬體層API通常是難以取得的,因此目前市面上通常採用CUDA API轉送模式(截獲CUDA請求轉發,也稱為用戶態)和GPU卡驅動Driver API轉送模式(截取驅動層請求轉發,也被稱為內核態).另外AI開發框架往往和GPU卡綁定(例如華為支持CANN框架,海光支持DTK框架,英偉達則支持TensorFlow、Pytorch等框架),AI應用在使用AI框架時,也可以在AI框架層進行轉發,在AI應用程式遷移時比較有用。
AI應用呼叫層次
GPU虛擬化與共享方案了解了GPU設備虛擬化的方式,基於裝置虛擬化技術,看下GPU虛擬化與共享的實作方式。 GPU虛擬化和共享有多種方案,英偉達從官方也提供了vGPU、MIG、MPS等方案,以及非官方的vCUDA、rCUDA、核心劫持等多種方案。
NVIDIA VGPU方案NVIDIA vGPU是NVIDIA提供的虛擬化方案,可靠性和安全性高,但不支援容器,只能虛擬化若干個vGPU ,使用不靈活;無法動態調整資源比例;有一定的共享損耗;不支援客製化開發,需支付額外license費用。 MIG方案MIG是多實例GPU方案。只支援Linux作業系統,需要CUDA11/R450或更高版本;支援MIG的卡有A100, H100 等比較高階的卡;支援裸機和容器,支援vGPU模式,一旦GPU卡設定了MIG後,就可以動態管理instance了,MIG設定時persistent 的,即使是reboot也不會受影響,直到使用者明確地切換。
借助MIG,用戶可以在單一GPU卡上獲得最多7倍的GPU資源,為研發人員提供了更多的資源和更高的靈活性。優化了GPU的利用率,並支援在單一GPU上同時執行推理、訓練和高效能運算(HPC)任務。每個MIG實例對於應用程式都像獨立GPU一樣運行,使其程式設計模型沒有變化,對開發者友好。
MPS(Multi-Process Scheduling)MPS多進程調度是CUDA應用程式介面的替代二進位相容實作。從Kepler的GP10 架構開始,NVIDIA 引入了MPS… Continue reading