有些團(tuán)隊(duì)在利用機(jī)器學(xué)習(xí)進(jìn)行研究時(shí)沒(méi)有 GPU 可以用來(lái)加速學(xué)習(xí)速度;
而另一些團(tuán)隊(duì)已經(jīng)擁有了 GPU,但是他們沒(méi)有完全利用 GPU 的處理能力,很多 GPU 資源在白白閑置。
Bitfusion 把 GPU 資源集中起來(lái),組成 GPU 資源池,然后共享給大家使用,這個(gè)方案分為兩部分:
- Bitfusion 服務(wù)器:把 GPU 安裝在 vSphere 服務(wù)器上 (要求 vSphere 7 以上版本),然后在上面運(yùn)行 Bitfusion Server (以 OVA 格式提供的 virtual appliance),Bitfusion Server 可以把物理 GPU 資源虛擬化,共享給多個(gè)用戶使用。
- Bitfusion 客戶機(jī):Bitfusion Client 是運(yùn)行在其他 vSphere 服務(wù)器上的 Linux 虛機(jī) (要求 vSphere 6.7 以上版本), 機(jī)器學(xué)習(xí) ML (Machine Learning) 工作負(fù)載運(yùn)行在這些虛擬機(jī)上,Bitfusion 會(huì)把它們對(duì)于GPU 的服務(wù)請(qǐng)求通過(guò)網(wǎng)絡(luò)傳輸給 Bitfusion Server,計(jì)算完成后再返回結(jié)果。對(duì)于 ML 工作負(fù)載來(lái)說(shuō),遠(yuǎn)程 GPU 是完全透明的,它就像是在使用本地的 GPU 硬件。

Bitfusion 共享 GPU 方案架構(gòu)
Bitfusion 把機(jī)器學(xué)習(xí)對(duì)于本地 GPU 的訪問(wèn)轉(zhuǎn)換成遠(yuǎn)程 GPU 訪問(wèn),它是怎么識(shí)別這些 GPU 調(diào)用的?它對(duì)機(jī)器學(xué)習(xí)應(yīng)用有什么要求嗎?Bitfusion 對(duì)于機(jī)器學(xué)習(xí)的基本要求就是必須使用 CUDA 架構(gòu),只有機(jī)器學(xué)習(xí)應(yīng)用和 GPU 都使用 CUDA 架構(gòu)才能被 Bitfusion 支持。
Bitfusion工作原理
CUDA 的全稱是 Compute Unified Device Architecture,它是由 NVIDIA 提供的通用并行計(jì)算架構(gòu),該架構(gòu)使開(kāi)發(fā)人員能夠快速地開(kāi)發(fā)利用 GPU 的軟件,通過(guò)充分利用 GPU 所提供的上千個(gè)處理單元來(lái)快速解決復(fù)雜計(jì)算問(wèn)題。NVIDIA 為開(kāi)發(fā)人員提供了 CUDA 工具包,其中包括在 GPU 加速庫(kù)、編譯器、開(kāi)發(fā)工具和 CUDA 運(yùn)行時(shí)。
目前主流的 GPU 廠商有 NVIDIA、AMD 和 Intel,NVIDIA 當(dāng)然支持自家的 CUDA,Intel 也提供了對(duì)于 CUDA 的支持;AMD 則另外搞了一套標(biāo)準(zhǔn) HIP (Heterogeneous Computing Interface for Portability,可移植異構(gòu)計(jì)算接口),提供了一個(gè)工具 Hipify 來(lái)將 CUDA 代碼轉(zhuǎn)換成 HIP。
使用 TensorFlow 框架開(kāi)發(fā)的機(jī)器學(xué)習(xí)軟件運(yùn)行堆棧如下圖所示,其中 CuDNN (CUDA Deep Neural Network) 是 NVIDIA 為深度神經(jīng)網(wǎng)絡(luò)開(kāi)發(fā)的 GPU 加速庫(kù)。

在整個(gè)軟件堆棧中,Bitfusion 在 CUDA driver 這個(gè)層面上截獲了所有的 CUDA 服務(wù)訪問(wèn),然后把這些服務(wù)請(qǐng)求和數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳遞給 Bitfusion Server,在服務(wù)器這一端再把這些服務(wù)請(qǐng)求交給真正的 CUDA driver 來(lái)處理,這就是 Bitfusion 的基本工作原理,如下圖所示。我們可以看到 Bitfusion Client 的軟件堆棧中插入了一個(gè) CUDA driver 的代理,通過(guò)這個(gè)代理來(lái)把服務(wù)請(qǐng)求轉(zhuǎn)發(fā)給 Bitfusion Server 上的 CUDA 下層服務(wù)堆棧。GPU 輔助的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)完成之后,結(jié)果再逆向通過(guò)這個(gè)堆棧返回機(jī)器學(xué)習(xí)應(yīng)用 ML App。

GPU分區(qū)
在實(shí)現(xiàn) CUDA 堆棧功能的基礎(chǔ)上,Bitfusion 還支持對(duì)于 GPU 的靈活劃分。對(duì)于很多機(jī)器學(xué)習(xí)應(yīng)用來(lái)講,它們的計(jì)算量不需要用到整塊 GPU,只需要部分計(jì)算能力就行了。同時(shí),把一塊物理 GPU 劃分成多個(gè)分區(qū)分配給多個(gè)用戶使用,就可以實(shí)現(xiàn) GPU 共享。
NVIDIA 自己的 vGPU 解放方案也可以實(shí)現(xiàn) GPU 的分區(qū),通過(guò)分配 GPU 內(nèi)存來(lái)控制對(duì)于 GPU 計(jì)算資源的使用,分配的比例有全部、二分一、四分之一等,各個(gè) vGPU 的大小必須一致,比較死板。
相比之下 Bitfusion 的分區(qū)方案就靈活多了,可以根據(jù)用戶需求任意劃分分區(qū),分區(qū)大小不需要一致。特別適合于機(jī)器學(xué)習(xí)這種應(yīng)用場(chǎng)景,不同的機(jī)器學(xué)習(xí)應(yīng)用需要的 GPU 算力是不一樣的,分配一塊合適的分區(qū)有助于避免 GPU 資源的浪費(fèi)。同時(shí),由于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練通常是一個(gè)需要反復(fù)調(diào)整參數(shù)持續(xù)改進(jìn)的過(guò)程,獨(dú)占整個(gè) GPU 會(huì)造成極大的資源浪費(fèi),Bitfusion 的 GPU 分區(qū)功能特別適合這種應(yīng)用場(chǎng)景。
Bitfusion 的 GPU 分區(qū)方案具有以下特點(diǎn):
- 分區(qū)可以是任意大小:Bitfusion 可以指定任意大小的分區(qū),例如 1%;如前所述,這特別適用于開(kāi)發(fā)測(cè)試等試驗(yàn)性的應(yīng)用場(chǎng)景。
- GPU 獨(dú)立性:各個(gè) GPU 分區(qū)相互獨(dú)立,各自運(yùn)行不同的 AI 框架和模型,絕對(duì)不會(huì)相互影響。
- 大小可動(dòng)態(tài)調(diào)整:GPU 分區(qū)可以動(dòng)態(tài)調(diào)整大小,例如從同一塊物理 GPU 分出的兩塊分區(qū)分別為 45% 和 55%,55% 的 GPU 分區(qū)可以進(jìn)一步拆分成更小的兩塊 35% 和 20%,而不會(huì)影響另一塊 45% 分區(qū) 上工作負(fù)載的正常運(yùn)行。
- 支持多個(gè)物理 GPU:從不同物理 GPU 中分出來(lái)的多個(gè) GPU 分區(qū)能夠以多個(gè) GPU 的形式分配給同一個(gè)用戶和工作負(fù)載,這既可以提高整個(gè) GPU 資源池的利用率,也有助于開(kāi)發(fā)和調(diào)試多 GPU 工作負(fù)載應(yīng)用。

總結(jié)
Bitfusion 的工作原理決定了其應(yīng)用場(chǎng)景,想要使用 Bitfusion 來(lái)共享 GPU 加速機(jī)器學(xué)習(xí)必須滿足以下條件:
- GPU 支持 CUDA 架構(gòu)并且支持 vSphere 7
- 機(jī)器學(xué)習(xí)應(yīng)用的 Linux 虛機(jī)必須在 vSphere 平臺(tái)上運(yùn)行 (vSphere 6.7 以上版本)
- 提請(qǐng)大家注意,Bitfusion 并不適用于 VDI 應(yīng)用場(chǎng)景,如果你想共享 GPU 加速 3D 設(shè)計(jì)渲染的話,NVIDIA 的 vGPU 是更合適的解決方案。Bitfusion 目前只支持 GPU 虛擬化共享,將來(lái)還有計(jì)劃支持其他硬件加速設(shè)備 FPGA 和 ASIC 的虛擬化和共享。
- Bitfusion 的工作原理決定了它有一些額外的資源消耗,主要是客戶端和服務(wù)器之間的網(wǎng)絡(luò)傳輸開(kāi)銷。這些額外的開(kāi)銷對(duì)于GPU的利用率會(huì)有一些怎樣的損耗呢?我們將在下一期的“Bitfusion性能評(píng)估”中來(lái)回答這些問(wèn)題。
延伸閱讀
將 VMware vSphere / vSAN 軟件與 Intel 的最新硬件平臺(tái)技術(shù)相結(jié)合,可以為用戶交付最佳的超融合架構(gòu)平臺(tái),幫助用戶簡(jiǎn)化數(shù)據(jù)中心管理,降低采購(gòu)和運(yùn)維成本,輕松應(yīng)對(duì)企業(yè)在數(shù)字化轉(zhuǎn)型中面對(duì)的各種挑戰(zhàn),是現(xiàn)代應(yīng)用的理想運(yùn)行平臺(tái):
- VMware vSAN 是最佳的存儲(chǔ)方案平臺(tái),具有管理簡(jiǎn)便、高性能、低成本、易擴(kuò)展的特點(diǎn),在 vSAN 平臺(tái)上可以支持任何類型的應(yīng)用。
- Intel 至強(qiáng)處理器提供最強(qiáng)計(jì)算能力,基于傲騰 (Optane) 和 3D NAND 技術(shù)的固態(tài)盤是理想的高速緩存,以太網(wǎng)融合網(wǎng)卡提供穩(wěn)定的網(wǎng)絡(luò)帶寬和低網(wǎng)絡(luò)延遲。