尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
AI的身影已經開始在我們的生活中無處不在。說起AI,也不再像幾年前那樣,只有百度無人駕駛,Google阿爾法狗等少數幾個案例了。
在今年的新型肺炎疫情期間的「健康碼」,就是非常典型的基於大數據分析的AI實現。還有我們撥打任一運營商客服電話,都有「智能語音助手」選項,而眾多銀行等金融類App中,AI助手也是必備功能。而提供這些互聯網服務的背後,數據中心內智能巡檢機器人也已不是新鮮事物,AI技術已經深入到數據中心的每一個角落……
部署或使用AI的技術門檻並不高,比如在軟體層面有端到端開源的TensorFlow機器學習平臺,硬件方面可以選擇最主流的GPU,並且同時也有相應的軟體包來幫助開發人員快速地進行開發,比如CUDA。英偉達和英特爾都對CUDA提供支持,AMD則通過HIP(Heterogeneous Computing Interface Portability,可移植異構計算接口),提供Hipity工具來將CUDA代碼轉換成HIP。
Tips:CUDA 的全稱是 Compute Unified Device Architecture,它是由 NVIDIA 提供的通用並行計算架構,該架構使開發人員能夠快速地開發利用 GPU 的軟體,通過充分利用 GPU 所提供的上千個處理單元來快速解決龐雜計算問題。
即使技術上門檻不高,那麼阻礙企業使用AI的問題在哪兒?可能是成本。單塊GPU的價格可能並不高,但是通常一臺物理服務器內需要多塊GPU來提高單機性能,並且通過多臺部署多塊GPU的服務器來組成集群以提高系統整體性能。比如業內目前AI服務器最高可配 置8塊甚至16塊GPU,這樣一臺AI服務器自然價格不菲。
同時,訓練過程中,可能需要頻繁優化模型,反覆訓練反覆迭代,這跟人學習知識有相似之處。哪怕整個AI服務器集群的利用率並未飽和,但也很難另作他用,這可能導致TCO的問題。如果你正面臨這個問題的話,也許可以試試VMware新推出的vSphere Bitfusion這一功能。
Tips:vSphere Bitfusion 可將物理資源與環境中的服務器分離。該軟體可將虛擬化環境中各臺物理服務器上的GPU整合為共享資源池,並通過網路進行拜訪使用。Bitfusion 可跨 AI 框架、雲、網路,在虛擬機、容器和筆記本電腦等環境中工作。
不同以往 vSphere Bitfusion工作原理解析
一般來說,GPU在虛擬化環境中通常有兩種使用方式:直通模式,就是將整塊GPU直通給某一個虛擬機使用,這與物理機使用沒什麼不同,只是將物理機換成了虛擬機;另一種就是vGPU模式,將一塊GPU平均分成多個vGPU,如二分之一、四分之一,然後供多個虛機使用(對應的兩個或四個),這只是細分了顆粒度,並沒有改變使用模式,在一定程度上提升了利用率,但並不完美。
vSphere Bitfusion則採用了另外一種模式,其並不像vGPU那樣直接切割GPU卡,而是通過對CUDA軟體層進行「分離」。
上圖為使用TensorFlow框架開發的機器學習軟體倉庫,共有七層。其中 CuDNN (CUDA Deep Neural Network) 是 NVIDIA 為深度神經網路開發的 GPU 加速庫。VMware vSphere Bitfusion從CUDA Driver(從下往上第三層)這一層進行分離為兩部分,然後在上四層中插入一個CUDA driver的代理層。具體如下圖所示:
在整個軟體倉庫中,Bitfusion 在 CUDA driver 這個層面上截獲了所有的 CUDA 服務拜訪,然後把這些服務請求和數據通過網路傳遞給 Bitfusion Server,在服務器這一端再把這些服務請求交給真正的 CUDA driver 來處理,這就是 Bitfusion 的基本工作原理
具體來說,vSphere Bitfusion有兩種虛機:Bitfusion Server和Bitfusion Client。
Bitfusion Server以虛機形式部署在有GPU資源的各臺服務器上,當然,這些服務器上必然是安裝了VMware vSphere 7及以上。這個Bitfusion Server虛機上有上圖軟體倉庫中的下三層。
Bitfusion Client以虛機形式部署在其他(非GPU)服務器上,其擁有上圖軟體倉庫的上面四層,並增加了VMware開發的一個CUDA Driver代理程序。
Bitfusion Client所在的服務器上可以部署用於機器學習的虛機。當這些用於AI訓練的虛機開始運行,Bitfusion Client上的Driver代理程序就可以截獲所有CUDA服務拜訪,然後將這些請求和數據通過網路發送給Bitfusion Server,然後讓GPU開始工作。
Bitfusion可以按比例使用整個共享的GPU資源池,比如1%或其他。這就提供了比vGPU更細的顆粒度。同時由於是虛擬化環境,Bitfusion Client所在物理服務器上可以部署多套訓練模型;機器學習軟體倉庫的分離、解耦,這意味著可形成多對一關係。這些特點可以讓多套訓練模型同時進行,互不影響,不僅有利於提高GPU資源利用率,也有利於用戶嘗試不同的模型優化或多種負載。
在了解了Bitfusion的工作原理之後,可能大家都會有這樣一個疑問,Bitfusion Client和Bitfusion Server之間通過網路來傳輸數據和服務請求,網路是否會帶來更高的延遲,從而降低性能?接下來我們通過實驗來驗證Bitfusion的工作效率。
Bitfusion實測:RDMA帶來新優勢
為了驗證Bitfusion的實際性能,我們構建了三套測試環境,服務器和GPU都採用相同配置,唯一的不同在於網路,三套測試環境分別使用如下網路方式:
10GbE網路自不用說,這是目前數據中心內使用最普遍的網路,第一套測試方案選用此網路。第二三套測試環境均選用新一代的25/100GbE網路,主要是利用其中的RDMA功能(RoCE是RDMA在25GbE網路中的一種實現)。但兩套測試環境又稍有不同,第二套測試環境中的虛機通過直通方式使用這100GbE網卡,相當於獨占整張網卡;第三套環境則通過PVRDMA技術,讓服務器上的多臺VM可共享使用此網卡。
Tips:PVRDMA (Paravirtual RDMA),是 VMware 對於 RDMA 技術的半虛擬化實現,vSphere 會在虛機中提供 PVRDMA 虛擬網卡,再通過 VMkernel 中的 PVRDMA 倉庫來拜訪 HCA(Host Channel Adapter,主機通道適配器),這種方式可以讓多個虛機共享 HCA 設備。
vSphere虛擬化環節中的PVRDMA架構示意圖,有些類似於虛擬網卡
在測試中,我們選擇了兩種非常代表性的深度學習模型 Incepton3 (Inception Net V3) 和 resnet50 (Residual Neural Net 50 ,即50層殘差神經網路) 來對 ImageNet 進行圖像分類學習。在獲得測試結果之後,為了對比說明,我們把相同配置但物理環境下的測試結果定義為1,而上述三套測試平臺所獲得的測試結果除以物理環境下的測試結果,從而得到一個小於1的比值,這個比值越接近於1就表示使用 Bifusion 所導致的性能損耗越小,值為1表示完全沒有性能損耗。
測試場景1:直接採用 10Gb/s 網路,使用虛擬網卡 VMXNET3
很顯然,這是三個場景中性能損耗最大的,這個場景中的網速最慢,也沒有利 RDMA 方案來分擔 CPU 的傳輸負擔。10Gb/s 是最普通的數據中心網路配置,這是利用普通網路可以達到的性能結果。
測試場景2:採用 100Gb/s 的聚合以太網 RDMA 方案 RoCE,直通方式拜訪
這是三個場景中性能最高的一個,採用了 100Gb/s 高速網路,又是直通模式來使用主機網卡的 RDMA 功能。在高性能網路配置下,可以看到 Bitfusion 所造成的性能損耗幾乎可以忽略不計。
測試場景3:採用 100Gb/s 的聚合以太網 RDMA 方案 RoCE,通過虛擬化方式 PVRDMA 拜訪
這種場景因為採用了虛擬化的 RDMA 方式,性能跟直通方式相比有一定下降。這是實際應用最可能的一種場景,一般我們都會有多個虛機來共享同一物理網卡所提供的 RDMA 功能,PVRDMA 是一個必然的選擇。
總結
Bitfusion 由於採用了客戶機和服務器模式來共享 GPU,CUDA 調用和相幹的數據都需要通過網路來進行傳輸,相比於在本機上使用 GPU 會有一定的性能損耗。
從測試結果可以看到 Bitfusion 對於 GPU 的性能損耗最大偏差也不超過 20%(10GbE非RDMA),相比於 Bitfusion 方案所帶來的共享便利和 GPU 利用率的提升是完全可以接受的。
需要注意的是 RDMA 的直通模式雖然性能最優,但是它基本上是讓虛機饒過了 hypervisor 來直接使用 RDMA 設備,在這種情況下虛機無法用到 vSphere 的一些核心功能,包括 vMotion、動態添加和刪除虛擬設備、虛機快照、DRS (Distributed Resource Scheduler,分布式資源調度) 和高可用HA功能。PVRDMA 是 VMware 對於 RDMA 技術的半虛擬化實現,它不存在直通模式的這些局限,完全可以用到 vSphere 的所有功能,並且可以實現多個虛機對於 RDMA 設備的共享。
另外我們也可以看到 Bitfusion 方案的性能損耗也取決於深度學習模型和 batch size 的大小,大的 batch size 有助於降低性能損耗,這是值得我們在真實環境中配置 Bitfusion 平臺時借鏡的。