【摘要】AI算法模型的開發,測試和訓練是自動駕駛公司最重要的工作之一,它們都需要大量GPU算力來支撐。
然而,『一人一卡』的簡單獨占式GPU分配方式會導致GPU分配率高但實際利用率低,造成大量算力的浪費。
基於遠程GPU的GPU池化技術能夠做到動態分配和自動釋放GPU資源,是解決這個問題的關鍵方法。
當前業界在GPU虛擬化和池化方面的實踐主要集中在三個層次:《1》硬件層;《2》內核層;《3》運行時層。
在硬件層實現GPU虛擬化的主要代表是英偉達的MIG,它的優點是性能損失小,缺點是隻支持固定比例的GPU切分,隻支持部分英偉達高端GPU。
在內核層實現GPU虛擬化的主要代表是英偉達的vGPU,騰訊的qGPU,以及阿裡的cGPU。
英偉達的vGPU的優點是支持全部企業級GPU,支持虛擬機《如KVM,VMware》和容器環境,缺點是隻支持固定比例的GPU切分。
因為英偉達並未開放其GPU驅動《內核態和用戶態》的所有接口,騰訊的qGPU和阿裡的cGPU隻能支持容器環境,不能支持虛擬機環境。
此外,英偉達的MIG和vGPU,騰訊的qGPU和阿裡的cGPU都不支持基於遠程GPU的GPU池化,不支持動態分配和自動釋放GPU資源,不支持GPU資源的超分超售。
本質上,英偉達的MIG和vGPU,騰訊的qGPU和阿裡的cGPU都是站在單張GPU卡的角度來實現GPU切分,而不是站在整個數據中心的角度來實現對所有GPU資源的池化管理,因此並非完整的GPU池化方案。
在運行時層實現GPU虛擬化和池化的主要代表是趨動科技的OrionX GPU池化軟件。
OrionX的優點是《1》兼容性好,支持市面上所有型號的英偉達GPU;《2》功能完備,支持虛擬機和容器環境;《3》性能優異,即便是遠程GPU也隻引入了非常小的性能損失;《4》使用靈活,支持基於遠程GPU的GPU池化,支持動態分配和自動釋放GPU資源,支持GPU資源超分超售;《5》管理簡單,具有完整的控制面,支持通過GUI,命令行以及RESTFUL API來管理整個數據中心中的所有物理和虛擬GPU資源,提供GUI界面來可視化所有物理和虛擬GPU的監控和告警信息等;《6》企業級功能完備,支持故障卡自動隔離,GPU任務熱遷移,軟件自動灰度升級等。
OrionX的主要缺點是,由於需要支持已公開的英偉達用戶態驅動和庫接口,同時還要實現整個數據中心GPU池化所需的管理平面,自身的研發工作量非常巨大,同時遠程GPU的性能優化難度很高。
作為自動駕駛領域的深耕者,文遠知行通過對當前主要技術路線和產品的仔細分析,認為運行時虛擬化是GPU池化技術的基礎,並選擇了趨動科技OrionX GPU池化軟件來建設彈性GPU資源池,更從容地開展自動駕駛技術的研發工作,加快在該領域內開拓創新的步伐。
作者 | 文遠知行 陳飛, 趨動科技 陳飛
責編 | 夢依丹
在新一輪科技革命背景下,汽車智能化發展已成必然趨勢。
這當中,作為『智能化』核心之一的自動駕駛,在監管、技術和商業化方面持續積累、不斷完善,即將邁入發展快車道。
據麥肯錫預計,中國未來很可能成為全球最大的自動駕駛市場。
至2030年,自動駕駛相關的新車銷售及出行服務創收將超過5000億美元。
自動駕駛實現的過程,簡單的來說是從感知、決策到執行,即依據特定的算法來分析當前場景下從各種傳感器采集到的車輛本身及外部數據,做出決策後進行執行。
這個過程實現對於人工智能《AI》/機器學習《ML》有著很深的應用和依賴。
因此,自動駕駛發展的瓶頸主要在於這些AI算法模型上的突破。
為了找到最佳的AI算法模型,算法工程師需要不斷地調整超參數,對每天的路測數據進行處理,反復訓練優化自動駕駛模型,並進行大量驗證測試工作,以迭代出更準確的算法。
這些工作的背後需要大量算力資源《GPU資源》,且隨著自動駕駛企業的業務發展、研發團隊規模的擴大,企業不僅對GPU資源的需求在快速上升,在這些GPU資源使用上也逐漸面臨著一些新的難題。
文遠知行在自動駕駛研發中的資源挑戰和運維需求
作為國內知名的L4級自動駕駛技術公司,成立於2017年的文遠知行WeRide總部位於廣州,在中國北京、上海、深圳、無錫、南京、聖何塞、阿佈紮比、新加坡等地設研發和運營分部,團隊規模超過1000人,其中大部分為研發工程師,在技術研發、商業模式和企業運營等方面都擁有豐富的海內外實踐經驗。
AI算法模型開發測試工作是文遠知行最重要的工作內容之一。
公司AI研發團隊負責包括camseg《圖像分割》、lidetect《激光雷達檢測》、camdetect《攝像頭檢測》等在內的多種自動駕駛AI算法開發、模型訓練以及測試。
AI算法工程師需要獨立的開發環境進行算法開發、訓練、測試等工作,並且在算法開發與訓練方面,盡管算法模型日益龐大和復雜,但依然要保障訓練效率和計算性能。
因此,最初文遠知行采取為一個算法工程師固定分配1-2塊GPU卡的方式來滿足開發調試的需求。
但這種方式也帶來很大的不便:
1.資源分配不夠靈活,難以快速滿足每個算法工程師的用卡需求
文遠知行數據中心內GPU資源需要支撐所有進行中AI項目開發、測試、訓練等場景的使用。
公司內部,不同階段、不同類型的多個項目並存,這些項目所處的周期可能會不一樣,模型復雜度和訓練數據集大小也不一樣,對於資源的需求也不一樣;同時每個算法工程師需要獨立的開發測試環境來開展工作,以及隨著文遠知行後期上線新的自研開發平臺後,算法工程師人數和資源需求的增長都要求資源的分配要具備彈性和伸縮性,能夠為不同項目、不同算法工程師快速配置所需的資源環境。
而文遠知行當前這種單人單卡的使用方式,不僅無法為資源靈活分配賦能,且會影響到算法工程師的工作效率以及研發項目的進度。
因此,如何實現GPU資源的彈性伸縮和動態調度成為了迫切的需求。
2.低GPU利用率,導致硬件成本高昂
AI開發測試的工作過程中本身就需要耗費大量GPU資源。
文遠知行現有的GPU資源分配方式,即GPU卡一旦被分配出去即被獨占,即使GPU卡閑置也無法共享給其他任務使用,會造成數據中心內GPU資源占用分配率高但實際利用率低,資源閑置情況頻繁嚴重,增加了企業在算力使用上的成本。
另外,如果按照50-60人的研發團隊規模來計算,要滿足每個算法工程師的需求,最終總量上需要提供70~80張GPU卡才夠用。
這無疑會加劇文遠知行在算力資源上的成本支出。
因此,對文遠知行來說,迫切需要設計和實現一種任務之間靈活動態共享GPU資源的管理方式,提高GPU資源的使用效率,降低算力使用成本。
3.缺乏統一資源管理監控能力,導致管理復雜
文遠知行研發團隊日常工作涉及到大量AI開發訓練工作流程,且隨著算法工程師人數和資源需求的增長,如果缺少平臺級的管理工具,會出現資源管理難、利用率低、沒有統一監控告警等問題。
文遠知行意識到需要一個統一的GPU管理工具,全面掌控服務器內CPU、GPU、內存、網絡I/O、任務負載、磁盤健康狀況、資源使用情況等信息,通過監控告警規則設置快速發現問題並給予通知,幫助運維團隊高效完成GPU資源運維管理工作。
綜上,文遠知行亟需一個行之有效的方案,來賦予開發場景下GPU資源彈性伸縮和統一管理的能力,提高其利用率的同時為每個算法工程師按需分配資源,並幫助團隊高效完成GPU資源的運維管理工作。
文遠知行對GPU池化技術的探索
針對GPU資源在使用過程中的問題,我們進行了技術探索,期待利用GPU虛擬化或GPU池化的技術去解決AI算法開發和運維的問題。
GPU作為一類外部設備,往往通過PCIe接口《或其它接口如SXM4等》和計算機系統連接。
計算機上運行的軟件,包括內核態、用戶態代碼對GPU硬件的訪問經過硬件《包括CPU、PCIe橋片等》進行硬件執行處理之後,都會轉化成PCIe的TLP報文發送到GPU硬件上,由GPU硬件進行解析並處理。
PCIe的TLP報文格式是國際標準,是公開的,但是報文承載的信息是GPU硬件廠商自己定義的,一般都是非公開的。
出於系統安全、功能方面的需求,從CPU硬件到操作系統設計上明確劃分了代碼執行的兩個運行態:內核態和用戶態。
在內核態中運行的代碼受到操作系統以及CPU硬件的特殊保護,用戶態的代碼隻能通過操作系統預先定義好的標準接口,調用內核態的代碼。
和設備相關的有 ioctl,mmap,read,write 等少量接口,而通過這些接口被調用的內核態代碼一般是預先安裝好的設備的內核態驅動。
這樣保證內核態和用戶態的安全隔離,防止不安全的用戶態代碼破壞整個計算機系統。
圖1: GPU應用全棧邏輯架構
各種各樣的使用英偉達GPU的應用《程序》,包括聊天機器人,也包括深度學習的各種框架,以及使用GPU的Photoshop,都運行在用戶態。
但是所有這些應用都並不能通過上面說的ioctl、read、write等接口直接和GPU的內核態驅動、GPU設備進行交互,原因在於英偉達並沒有公開這些接口的使用方法。
英偉達通過提供一層由GPU用戶態驅動和GPU運行庫構成的廠商用戶態軟件層來允許各種英偉達GPU應用使用GPU設備。
這層對外提供的接口包括英偉達自家定義的 CUDA,也包括由社區共同制訂的OpenGL、Vulkan接口等。
總結來看,從硬件到上層應用,有三層接口可以用來實現GPU虛擬化或者GPU池化,一是PCIe硬件接口層《硬件層》,二是OS內核暴露的 ioctl、read、write等設備驅動接口層《內核層》,三是用戶態的CUDA、OpenGL、Vulkan等應用運行時接口層《運行時層》。
從原理上,由於這三層接口都在業內各種應用層之下,所以無論在那一層做GPU虛擬化和GPU池化都可以覆蓋GPU應用需求,具有很好的通用性。
針對當前的深度學習類型的應用,可以進一步把應用分為兩層,一層是例如TensorFlow、PyTorch、PaddlePaddle、Mindspore等這樣的深度學習框架,它們具有一定的通用性,但是各種框架之間並沒有定義統一的接口,所以針對某一個深度學習框架定義的接口做GPU虛擬化或GPU池化是不具有通用性的。
而且人工智能應用僅僅是整個GPU應用的一個細分領域,還有例如雲桌面、雲遊戲、超算、模擬仿真等細分領域。
因此在深度學習框架《框架層》做GPU虛擬化和GPU池化的通用性很局限。
框架層再往上是一個個垂直應用的細分領域《AI應用層》,例如ChatGPT這樣的聊天機器人,做圖像識別的 OCR等。
在這樣的AI應用層做GPU虛擬化和GPU池化的通用性就更差了。
圖2: 不同層級虛擬化技術的通用性比較
上圖直觀展示了上面各層的通用性。
不過雖然硬件層、內核層、運行時層都有很好的通用性,但是每一層都有自己的特點,在支撐GPU虛擬化、GPU池化上都有其優缺點。
1》硬件層虛擬化:也就是基於例如PCIe接口上實現GPU虛擬化。
要在這一層做GPU虛擬化,由於涉及到硬件設計,因此隻能由GPU廠商來做,例如英偉達的MIG就是在這一層支持GPU的虛擬化。
優點是硬件直接支持所以理論上對性能的影響最小。
缺點是由於硬件設計的復雜度,所以隻支持固定的GPU切分,隻支持部分英偉達的高端GPU《如A100等》,而且隻支持同一個服務器節點內部的容器和虛擬機使用,不支持遠程GPU以及基於遠程GPU的GPU池化,不支持動態分配和自動釋放GPU資源,不支持GPU資源的超分超售。
2》內核層虛擬化:也就是基於ioctl 等內核態接口來實現GPU虛擬化,工作在操作系統內核裡面,英偉達的 vGPU方案就是一個典型的基於GPU內核態驅動的GPU虛擬化方案。
由於使用了軟件來實現GPU虛擬化,相對硬件虛擬化方案會引入一定的性能損失,但是相對有較好的靈活性,而且不依賴於GPU硬件,可以在所有企業級GPU上使用。
不過由於英偉達GPU內核態驅動的接口以及用戶態驅動的代碼都是不開放的,因此隻有英偉達自己可以在這層支持完備的GPU虛擬化能力。
目前業內還有騰訊的qGPU和阿裡的cGPU也工作在這層,但是由於缺少完整的接口細節,目前這兩個方案都隻能支持基於容器虛擬化的環境,而不能在非容器化環境以及KVM虛擬化環境中使用。
此外,不論是英偉達的vGPU,騰訊的qGPU,還是阿裡的cGPU,都不支持遠程GPU以及基於遠程GPU的GPU池化,不支持動態分配和自動釋放GPU資源,不支持GPU資源的超分超售。
3》運行時虛擬化:利用CUDA、OpenGL、Vulkan等標準接口實現GPU虛擬化和GPU池化。
這也是一種軟件的實現方案。
趨動科技的OrionX GPU池化軟件選擇的正是這個路線,這種技術方案擁有幾個特點:
1、CUDA、OpenGL、Vulkan等接口都是公開的標準化接口,具有開放性和穩定性。
所以基於這些接口的實現方案具有很好的兼容性和可持續性;
2、因為該方案運行在用戶態,因此符合內核態代碼不應承載過於復雜功能的工程實踐,可以通過復雜的網絡協議棧,復雜的操作系統支持來實現遠程GPU的能力,從而支持GPU池化;
3、由於該方案工作在用戶態,從部署形態上對用戶環境的侵入性是最小的,也是最安全的,即使發生故障也可以迅速被操作系統隔離,而通過一些軟件工程的設計可以具有很強的自恢復能力;
4、當然在運行時實現GPU虛擬化和池化方案的研發工作量相對前面兩種方案《硬件層和內核層》要巨大得多,有數量級上的差異。
其原因在於越是上層的接口,越是允許定義參數復雜的接口,接口功能越豐富、數量越大。
總結來說,趨動科技的OrionX GPU池化軟件的主要優點有:
1、兼容性好,支持市面上所有型號的英偉達GPU;
2、功能完備,支持虛擬機和容器環境;
3、性能優異,即便是遠程GPU也隻引入了非常小的性能損失《在典型場景下性能損失小於5%》;
4、使用靈活,支持基於遠程GPU的GPU池化,支持動態分配和自動釋放GPU資源,支持GPU資源超分超售;
5、管理簡單,具有完整的控制面,支持通過GUI,命令行以及RESTFUL API來管理整個數據中心中的所有物理和虛擬GPU資源,提供GUI界面來可視化所有物理和虛擬GPU資源的監控和告警信息等;
6、企業級功能完備,支持故障卡自動隔離,GPU任務熱遷移,軟件自動灰度升級等。
OrionX GPU池化軟件的主要缺點是,由於需要支持已公開的英偉達用戶態驅動和庫接口,同時還要實現整個數據中心GPU池化所需的管理平面,自身的研發工作量非常巨大,同時遠程GPU的性能優化難度很高。
從以上三種主流方案比較來看,硬件層的虛擬化《例如:MIG》帶來的好處是性能損失小,但是分配是靜態的,配置變更較為復雜,解決的還是單塊卡的共享問題。
內核層的虛擬化方案,例如英偉達的vGPU主要滿足的是為虛擬機提供vGPU的需求,本質上還是解決單卡的共享問題,同樣存在性能開銷,靜態分配,配置變更復雜的問題。
好處是兼容性好,支持英偉達全部企業級GPU,使用感受和使用物理GPU較為類似,與物理卡相比,除了少量Profilers工具不支持外,基本一致《參考:https://docs.nvidia.com/grid/13.0/grid-vgpu-user-guide/index.html》。
文遠的大多數場景都是基於容器的,所以這類方案也不是首選。
在內核層工作的還有針對容器的qGPU和cGPU方案,其本質上也還是通過單卡的細顆粒度切分來滿足GPU共享的需求,使用范圍較為有限,同時由於其依賴於設備驅動程序,工作在內核態,出問題時往往影響面較大,難以分析解決和長期維護,在文遠大范圍使用存在著運維維護的障礙。
可以看到,以上二大類《硬件層和內核層) 方案的思路類似:把物理卡通過虛擬化技術轉化成小卡,將小卡分配給虛擬機,容器或應用。
一旦分配完成,其分配率往往為100%,但是其實際利用率往往依然較低。
這兩類方案的弊端是:無法做到GPU資源的動態分配和自動釋放,不支持GPU資源的超分超售;不支持遠程GPU及GPU池化,也不具備管理整個數據中心GPU資源的管理平面。
本質上,英偉達的MIG和vGPU,騰訊的qGPU和阿裡的cGPU都是站在單張GPU卡的角度來實現GPU切分,而不是站在整個數據中心的角度來實現對所有GPU資源的池化管理,因此並非完整的GPU池化方案。
最後,我們從運行時層方案中看到了GPU池化的希望,利用運行時的虛擬化,除了能實現將大卡轉化成小卡,支持GPU細顆粒度共享,還能支持GPU資源的動態分配和自動釋放,利用遠程GPU功能打破物理服務器的邊界,將GPU的管理和使用從單臺服務器擴展到整個數據中心,實現了數據中心級GPU資源池需要的管理平面,能對整個數據中心的所有GPU統一納管,統一監控告警,統一運維。
運行時層方案的特點和軟件定義網絡SDN或軟件定義存儲SDS的理念類似,有完整的數據面和控制面,形成了完備的軟件定義GPU方案SD-GPU《Software Defined GPU),是較為成熟的技術路線和方向。
GPU池化技術的運行和分析
之後經過對當前主要技術路線和產品的選型,我們認為運行時虛擬化是GPU池化技術的基礎,趨動科技的OrionX GPU池化軟件是更適合文遠的方案。
作為國內領先的AI算力池化技術企業,趨動科技致力於通過先進的技術解決客戶的實際痛點。
其數據中心級GPU池化軟件OrionX,把GPU當作分佈式存儲那樣的全局統一運維、管理和使用的抽象資源,融合了GPU共享、聚合和遠程使用等多種硬核能力,打造全能型軟件定義GPU。
借助於OrionX GPU池化軟件,將多臺GPU服務器上分散的物理GPU資源打造成一個統一的GPU資源池,算法工程師不僅可以按需使用GPU資源,靈活滿足日常自動駕駛多種算法研發和訓練需求,同時運維工程師可以通過OrionX的圖形化管理界面《GUI》對資源進行調度和管理。
圖3: GPU池化解決方案拓撲圖
資源彈性調度,以有限資源滿足更多算法工程師需求
文遠知行采用OrionX GPU池化軟件,將昂貴GPU資源實現池化,實現AI開發測試任務與GPU資源分離部署,而OrionX vGPU資源池內的虛擬GPU算力即取即用,並對其他上層軟件保持資源管理的透明性,顯著提高了GPU的利用率。
資源池中的虛擬GPU支持動態申請釋放,能夠自動根據調度算法使用整個數據中心的空閑GPU資源,不僅用同樣的GPU資源數量支撐了數倍的開發人員,還可以快速為不同AI研發項目分配所需資源,在AI開發環境上實現GPU資源的降本增效。
遠程調用,優化研發生產力
基於OrionX GPU池化軟件對於遠程GPU功能的支持,加上數據中心內部署了RDMA高速網絡, AI開發環境不再被局限在某一臺GPU服務器上運行。
因此,文遠知行的研發人員可以在無GPU的服務器上進行開發工作,配置好開發環境後,通過RDMA網絡動態掛載和調用其他服務器上的GPU資源即可。
通過這個功能,算法工程師的應用可以無障礙地被部署到數據中心內的任意服務器之上,並且透明地使用任何服務器之上的GPU資源。
面臨訓練大模型任務時,也能夠快速調集多個GPU卡完成訓練任務,且一鍵解決AI開發人員面臨的訓練模型中GPU/CPU配比和多機多卡模型拆分問題,為算法工程師節省大量寶貴時間,有效提高了研發效率。
統一管理界面,實行資源監控、管理和調配
文遠知行通過OrionX將CPU、物理GPU、虛擬GPU實現統一納管,在統一的圖形化界面上對資源實現統一調度分配,實時監控。
同時,OrionX還與Kubernetes環境實現無縫集成,可在K8S中實現對GPU資源池中資源的統一管理調度,簡化了運維工作。
此外,OrionX具備的大量企業級功能《如支持故障卡自動隔離,軟件自動灰度升級等》,都顯著提高了運維工作的效率。
收益分析
從2021年構建起GPU資源池化之後,文遠知行已經打破了一人一卡占用的模式,對GPU資源實現按需分配、靈活調度、彈性使用和自動回收,顯著提升了物效人效,從而實現以少量GPU資源支撐大量算法工程師對獨立開發環境的需求。
物理GPU資源利用率提升約4倍。
通過OrionX GPU池化軟件對GPU 資源的按需分配、自動調度和釋放,算法工程師按需使用GPU資源,在AI開發環境上實現了GPU資源的降本增效。
從整體來看,物理GPU使用率提升約4倍。
提升研發效率。
面對本地服務器上GPU卡資源不足甚至沒有的情況,算法工程師可通過OrionX遠程調用+RDMA網絡能力,直接調用其他服務器上的GPU資源,縮短了GPU卡資源調整和配置的時間周期,節省時間。
簡化運維管理。
運維工程師可借助圖形化管理界面,對GPU資源池進行實時監控,統一調度和管理,有效提升了GPU集群管理效率,同時降低了運維復雜性。
削減成本投入。
文遠知行通過采用OrionX GPU池化軟件,充分利用了現有GPU資源,原來需要為每一個算法工程師固定分配1-2物理卡,以至於需要70-80張卡才能滿足一支50-60人的研發團隊的需求,如今隻需要16張卡就可以支撐該研發團隊日常開發、測試需求,有效控制了對GPU新增采購的需求,從而降低了硬件成本的投入。
滿足未來發展需求。
面對研發團隊人數的增長,以及後期還計劃上線一個自研的開發平臺的情況,文遠知行可憑借OrionX對於主流GPU卡的兼容性,支持從單臺到整個數據中心所有GPU服務器納管,能輕松實現GPU資源池的橫向擴展等功能特性,高效地實現『算力就緒』來支撐未來發展。
伴隨自動駕駛進入高速發展階段,作為自動駕駛領域深耕者的文遠知行,在趨動科技OrionX GPU池化軟件幫助下,可以更從容地開展自動駕駛技術的研發工作,加快在該領域內開拓創新的步伐。