當(dāng)我們在云上部署 DeepSeek 系列大模型的時候,可以選擇多機(jī)或者單機(jī) 8 卡的 GPU 裸金屬實例運(yùn)行滿血版,或者選擇單卡和雙卡 GPU 虛擬機(jī)運(yùn)行蒸餾版。這些 GPU 云服務(wù)器實例能否發(fā)揮多機(jī)、多卡、單卡的性能,將直接影響部署的 DeepSeek 服務(wù)的吞吐能力。除此之外,在訓(xùn)練場景中這些實例的相關(guān)能力能將直接影響訓(xùn)練時長。本文將針對 GPU 云服務(wù)器的軟件系統(tǒng)設(shè)計和實現(xiàn)進(jìn)行概述,并分享百度智能云的新實踐成果。
1.GPU 處理數(shù)據(jù)流程
在具體討論 GPU 云服務(wù)器的軟件設(shè)計工作之前,我們首先來看下 GPU 在服務(wù)器中是如何工作的。下圖是一個簡化的 GPU 處理數(shù)據(jù)的流程圖,以便梳理一下影響 GPU 云服務(wù)器性能的關(guān)鍵因素。從圖中我們可以看到,數(shù)據(jù)處理分為以下幾個步驟:
第 1 步,所有數(shù)據(jù)都需要從網(wǎng)絡(luò)或者存儲中讀取到內(nèi)存。這里就涉及到網(wǎng)絡(luò)或者存儲的傳輸性能。
第 2 步,當(dāng)讀取到內(nèi)存之后,CPU 需要從內(nèi)存中讀取相關(guān)數(shù)據(jù)進(jìn)行預(yù)處理,然后將預(yù)處理后的數(shù)據(jù)再寫回到內(nèi)存中。這個過程就涉及到內(nèi)存自身的帶寬性能和 CPU 的處理性能。
第 3 步 ,數(shù)據(jù)需要從內(nèi)存拷貝到 GPU 的顯存中。這就涉及到 GPU 和系統(tǒng)內(nèi)存之間的數(shù)據(jù)傳輸性能,一般稱之為 H2D(Host To Device)。
第 4 步,GPU 從 GPU 顯存中讀取相關(guān)的數(shù)據(jù)進(jìn)行運(yùn)算。此時主要涉及 GPU 的顯存帶寬和 GPU 的計算性能。如果數(shù)據(jù)比較龐大,單個GPU無法處理,就涉及到多個 GPU 的處理,那么這里就涉及到多 GPU 之間的集合通信。
第 5 步,如果是單機(jī)多卡的情況,就涉及到 GPU 在機(jī)內(nèi)之間數(shù)據(jù)傳輸?shù)男阅?如果是多機(jī)多卡的場景,那么就涉及到多節(jié)點(diǎn)之間的網(wǎng)絡(luò)傳輸性能。
第 6 步,當(dāng) GPU 運(yùn)算完成后,數(shù)據(jù)需要從 GPU 的顯存再拷貝到內(nèi)存中。這里也涉及到 GPU 和系統(tǒng)內(nèi)存之間的數(shù)據(jù)傳輸性能。一般稱之為 D2H(Device To Host)。
我們在設(shè)計 GPU 云服務(wù)器時,需要綜合考慮上面 GPU 數(shù)據(jù)處理鏈路的每一個環(huán)節(jié),然后結(jié)合業(yè)務(wù)特點(diǎn)和使用成本,進(jìn)行 GPU 云服務(wù)器的設(shè)計。
2.GPU 云服務(wù)器設(shè)計的層次劃分
談到 GPU 云服務(wù)器的設(shè)計,我們一般分為了 4 個層次。下圖展現(xiàn)了這個層次結(jié)構(gòu),涉及到硬件和軟件的多個層面。
首先從下面來看,主要是 GPU 云服務(wù)器底層基礎(chǔ)技術(shù)組件,包括如硬件選型、拓?fù)浣Y(jié)構(gòu)、GPU 互聯(lián)和虛擬化技術(shù)。這些技術(shù)不僅決定了單卡運(yùn)行的效率,也會影響上層多卡通信的效率。
向上一層是多卡通信方式。此時我們需要考慮硬件和軟件的支持程度,比如是采用共享內(nèi)存、P2P 、NVLink 還是 GDR 結(jié)構(gòu),每一種結(jié)構(gòu)都需要考慮到對應(yīng)的硬件和軟件實現(xiàn)。比如有的軟件不支持 P2P,此時我們可能就需要退回到共享內(nèi)存的方式。如果涉及到大模型就需要采用多機(jī)多卡,此時還涉及到 RDMA 網(wǎng)絡(luò)的通訊。
再上一層是集合通信庫,即在多卡通信的場景下,我們需要考慮如何提升集合通信的性能,一般會各種 CCL (Collective Communications Library )的通信庫,這些庫會基于 GPU 卡的互聯(lián)技術(shù)和軟件支持,來進(jìn)行合理的選路。一般來說會先探測出當(dāng)前的 GPU 能進(jìn)行哪些通信(比如支持 P2P 或者支持共享內(nèi)存),然后根據(jù)該結(jié)果進(jìn)行合理的選路,并通過合適的通信算法,大化提升集合通信的性能。
再往上就是 AI 框架。AI 框架依賴于集合通信的性能以提高 AI 計算的能力。
下面我們將詳細(xì)敘述底部的 2 個層次如何影響到 GPU 云服務(wù)器設(shè)計。
2.1.GPU 云服務(wù)器基礎(chǔ)技術(shù)
首先來看下 GPU 云服務(wù)器的底層實現(xiàn)技術(shù),這關(guān)系到 GPU 云服務(wù)器性能的基礎(chǔ),通常包括如下幾方面:
硬件選型:選擇合適的硬件,包括 CPU,內(nèi)存,GPU,網(wǎng)絡(luò)和存儲等。
拓?fù)浣Y(jié)構(gòu),包括實際的硬件拓?fù)洹H绻?GPU 云服務(wù)器采用虛擬化技術(shù),則包含虛擬拓?fù)洹?/p>
硬件拓?fù)?
NUMA 拓?fù)?包括 CPU、內(nèi)存和外設(shè)等拓?fù)浣Y(jié)構(gòu)。
PCIe 拓?fù)?包括 GPU 和 RDMA 網(wǎng)卡等設(shè)備的 PCIe 拓?fù)浣Y(jié)構(gòu)。
虛擬拓?fù)?主要指以上拓?fù)湓谔摂M機(jī)里的實現(xiàn)。
GPU 互聯(lián)技術(shù),主要指 GPU 的互聯(lián)方式:
如果是單機(jī),包括 PCIe 或者專有總線,影響到單機(jī)內(nèi)多卡通信的效率。
如果是多機(jī),主要指多機(jī)多卡的互聯(lián),包括各種網(wǎng)絡(luò)協(xié)議,如 RDMA 協(xié)議,或者專有各種總線協(xié)議。
虛擬化技術(shù):主要是指 GPU 云服務(wù)器是虛擬機(jī)形態(tài)還是裸金屬形態(tài)。
前者的 GPU 云服務(wù)器以虛擬機(jī)形態(tài)實現(xiàn),涉及到 CPU,內(nèi)存,GPU 的虛擬化,會影響到 GPU 的運(yùn)行效率。
后者的 GPU 云服務(wù)器以裸金屬形態(tài)實現(xiàn),主要特點(diǎn)是網(wǎng)絡(luò)和存儲的通過硬卸載到 DPU 來提供服務(wù)。
2.1.1.硬件選型
CPU:根據(jù) GPU 云服務(wù)器的用途,如推理或者訓(xùn)練,選擇合適的 CPU。需要考慮的因素,主要有 CPU 的平臺類型、核心數(shù)量和主頻。
內(nèi)存:GPU 云服務(wù)器應(yīng)配備足夠容量和帶寬的內(nèi)存,以支持 GPU 的數(shù)據(jù)處理需求。例如,使用 DDR5 內(nèi)存可以提供高達(dá) 1200 GB/s 的理論帶寬。
GPU:根據(jù) GPU 服務(wù)器的用途,如推理或者訓(xùn)練,選擇合適的 GPU,主要考慮 GPU 的計算性能、顯存大小和互聯(lián)方式等。
網(wǎng)絡(luò):通常包括南北向和東西向兩張網(wǎng)絡(luò)。前者通常用于存儲網(wǎng)絡(luò)業(yè)務(wù),后者負(fù)責(zé) GPU 跨機(jī)通信。要確保兩張網(wǎng)絡(luò)的帶寬都足夠高,以避免數(shù)據(jù)傳輸成為瓶頸。例如,A100/A800 機(jī)型的東西向的網(wǎng)卡帶寬達(dá) 100 Gbps 或者 200 Gbps,不同的網(wǎng)卡帶寬會導(dǎo)致集合通信的帶寬有差異,從而影響集群訓(xùn)練的性能。
存儲:通常配置大容量的 SSD 磁盤,用來存儲業(yè)務(wù)的數(shù)據(jù),這里主要考慮磁盤的 I/O 性能和容量等因素。但在進(jìn)行集群訓(xùn)練時通常會采用分布式文件系統(tǒng)用于存儲業(yè)務(wù)數(shù)據(jù),那么對本地磁盤的需求就沒有那么高,而分布式文件系統(tǒng)的選型就至關(guān)重要。
硬件選型中,每個組件的性能要合理配合,不能導(dǎo)致系統(tǒng)存在瓶頸。比如 CPU 預(yù)處理數(shù)據(jù)時,如果性能過低,會導(dǎo)致 GPU 等待時間過長,或者網(wǎng)絡(luò)帶寬低導(dǎo)致獲取數(shù)據(jù)速度慢,都會導(dǎo)致 GPU 的使用率降低。
2.1.2.單機(jī)硬件拓?fù)浣Y(jié)構(gòu)
單機(jī)層面的硬件拓?fù)?主要涉及 GPU 和 GPU,GPU 和其他組件的拓?fù)浣Y(jié)構(gòu),主要包括如下方面:
CPU、內(nèi)存和 GPU 的 NUMA 拓?fù)洹?/p>
包括 GPU 和 RDMA 網(wǎng)卡的 PCIe 拓?fù)洹?/p>
2.1.2.1.NUMA 拓?fù)?/p>
NUMA(Non-Uniform Memory Access,即非統(tǒng)一內(nèi)存訪問)是一種針對多處理器系統(tǒng)的內(nèi)存組織方式,每個處理器都有自己的本地內(nèi)存,處理器訪問本地內(nèi)存的速度比訪問其他處理器的內(nèi)存要快。
GPU 云服務(wù)器大多具備多路 CPU,那么系統(tǒng)的 NUMA 拓?fù)浜驮O(shè)置,不僅影響到 CPU 對內(nèi)存訪問的性能,還影響到一些需要訪問內(nèi)存的外設(shè)的性能,比如網(wǎng)卡和 GPU 等設(shè)備。有關(guān) NUMA 的問題主要包括
是否開啟 NUMA:系統(tǒng)可以選擇在 BIOS 設(shè)置中,開啟 NUMA,也可以不開啟 NUMA。
如果開啟 NUMA,開啟幾個 NUMA node。有些 CPU 內(nèi)部采用多 Die 設(shè)計,每個 Die 可以組成一個 NUMA node,那么一個 CPU 就可以支持一個或者多個 NUMA node。一路 CPU 作為一個 NUMA node,軟件設(shè)置和開發(fā)更加簡單,適合大多數(shù)業(yè)務(wù)場合;而一路 CPU 開啟多個 NUMA node,更多應(yīng)用在需要對內(nèi)存進(jìn)行更精細(xì)操作的業(yè)務(wù)場合。
GPU 設(shè)備如何分配到每個 NUMA node 上。大多數(shù)時候 GPU 都是均衡分配到每個 NUMA node 上,這樣每個GPU都會和本 NUMA node 上內(nèi)存進(jìn)行數(shù)據(jù)交互,減輕 PCIe 鏈路的負(fù)載。
對于虛擬化場合,是否輸出 NUMA 信息到虛擬機(jī)里,也是個影響 GPU 性能的重要考量因素。
2.1.2.2.PCIe 拓?fù)?/p>
涉及以下幾方面:
GPU 是否通過 PCIe 接口直連 CPU。
GPU 是否連接 PCIe Switch。
同一個 PCIe Switch 連接幾個 GPU。
GPU 和 RDMA 網(wǎng)卡的拓?fù)湓O(shè)計。
2.1.3.GPU 互聯(lián)技術(shù)
多個 GPU 之間的互聯(lián),根據(jù)擴(kuò)展方式的不同,可以分為 Scale Up 和 Scale Out 兩種方式。Scale Up 是指在同一臺服務(wù)器上增加 GPU 的數(shù)量,提升單機(jī)性能,通常可以通過 PCIe 總線和專有總線來擴(kuò)展。
PCIe 總線:GPU 通常通過 PCIe連接到 CPU,可以是直通或者通過 PCIe Switch,那么同一主機(jī)上的 GPU 可以通過 PCIe 進(jìn)行通信。
專有總線:為了彌補(bǔ) PCIe 總線帶寬低的問題,不同 GPU 廠商實現(xiàn)了專有總線,進(jìn)行單機(jī)內(nèi)的多個 GPU 的互聯(lián),也是 GPU 單機(jī)內(nèi) Scale Up 的重要手段。
Scale Out 通過增加多臺服務(wù)器,每臺服務(wù)器上配置多個 GPU,形成一個 GPU 集群,來提升整體計算能力,通常通過 RDMA 網(wǎng)絡(luò)和其他專有網(wǎng)絡(luò)技術(shù)來實現(xiàn)。
高速網(wǎng)絡(luò)技術(shù):多機(jī)之間通過高速網(wǎng)絡(luò)技術(shù)進(jìn)行互聯(lián),目前通常采用的是 RDMA 技術(shù)。當(dāng)前國際組織超以太聯(lián)盟,UEC (Ultra Ethernet Consortinum),正在制定新的高速網(wǎng)絡(luò)協(xié)議來改進(jìn) RDMA 協(xié)議。
2.1.3.1.PCIe 總線
PCIe 主要用于連接 CPU 與其他高速設(shè)備如 GPU、SSD 和網(wǎng)卡等,2003 年 PCIe 1.0 版本發(fā)布,目前已經(jīng)更新到 6.0 版本,傳輸速率高達(dá) 64 GT/s,16 通道的雙向帶寬可以達(dá)到 256 GB/s,性能和可擴(kuò)展性不斷提高。GPU 通常通過PCIe 連接到 CPU,可以是直通或者通過 PCIe Switch,那么同一主機(jī)上的 GPU 可以通過 PCIe 進(jìn)行通信。
2.1.3.2.專有總線 - NVIDIA NVLink
PCIe 總線迭代速度趕不上 GPU 對互聯(lián)帶寬的需求,當(dāng)前可用的PCIe 5.0 總線的雙向帶寬只有 128GB/s,無法滿足需求,于是各個 GPU 廠家都推出了自己的專有總線。NVLink 是 NVIDIA 推出的支持 GPU 之間高效通信的總線,目前 NVLink 已經(jīng)發(fā)展到了第 4 代,在 H100 中可以達(dá)到高 900 GB/s 的雙向帶寬。
圖片4.jpg
NVSwitch 是它的 Switch 芯片,可以支持 GPU 全域互聯(lián),目前已經(jīng)發(fā)展到了第 3 代。
圖片5.jpg
如果僅僅使用 NVLink,只能實現(xiàn)點(diǎn)對點(diǎn)的連接,而如果加入到 Switch 之后,就可以實現(xiàn)任意兩個 GPU 之間的高速互聯(lián),解決了點(diǎn)對點(diǎn)通信的拓?fù)淙毕荨?/p>
2.1.3.3.專有總線 - 華為 HCCS
HCCS 是華為自研的一款高速互聯(lián)總線,主要用于昇騰系列 AI 處理器之間的互聯(lián)。它提供了一種高效、可靠的數(shù)據(jù)傳輸方式,使得多個昇騰處理器能夠協(xié)同工作,共同完成大規(guī)模的 AI 計算任務(wù)。HCCS 采用對等拓?fù)?單鏈路的大帶寬是 56 GB/s。昇騰 910B 中的 HCCS 采用點(diǎn)對點(diǎn)拓?fù)?單鏈路的大帶寬是 56 GB/s。
2.1.3.4.RDMA
當(dāng)涉及到多機(jī) GPU 通信時,目前主流的選擇是 RDMA 網(wǎng)絡(luò),包含 Infiniband 和 RoCE 網(wǎng)絡(luò)。傳統(tǒng)的 TCP/IP 網(wǎng)絡(luò)通信因為需要操作系統(tǒng)內(nèi)核的介入,涉及較多數(shù)據(jù)移動和數(shù)據(jù)復(fù)制,不適用高性能計算和大數(shù)據(jù)分析等需要 I/O 高并發(fā)、低時延的場景。RDMA 是一種計算機(jī)網(wǎng)絡(luò)技術(shù),網(wǎng)卡可以直接遠(yuǎn)程訪問內(nèi)存或者 GPU 顯存的數(shù)據(jù),而無需操作系統(tǒng)內(nèi)核介入,不占用 CPU 資源,可以顯著提高數(shù)據(jù)傳輸?shù)男阅懿⑶医档脱舆t,因此更適配于大規(guī)模并行計算機(jī)集群的網(wǎng)絡(luò)需求。
2.1.4.虛擬化技術(shù)
虛擬化技術(shù)主要分為兩大類:
傳統(tǒng)虛擬化,主要是基于 Qemu/KVM 實現(xiàn)的虛擬化。
基于 DPU 的虛擬化,主要基于 DPU 實現(xiàn)的虛擬化。
他們共同要解決的問題主要是:
系統(tǒng)虛擬化:如果采用傳統(tǒng)虛擬化技術(shù),既包含 CPU 和內(nèi)存虛擬化,也包含各種設(shè)備的虛擬化,比如 GPU 和 RDMA 網(wǎng)卡。
網(wǎng)絡(luò)虛擬化:這里的網(wǎng)絡(luò)主要指 VPC(Virtual Private Cloud)網(wǎng)絡(luò)的虛擬化。
存儲虛擬化:主要指塊設(shè)備的存儲虛擬化,后端存儲設(shè)備可以是本地存儲,也可以是遠(yuǎn)程的存儲系統(tǒng)。
2.1.4.1.傳統(tǒng)虛擬化
傳統(tǒng)的 GPU 云服務(wù)器,都是基于 CPU 的硬件虛擬化技術(shù)來實現(xiàn),并且大多使用 QEMU 和 KVM 開源技術(shù)來開發(fā)。GPU 通過透傳的方式透傳到虛擬機(jī)里,GPU 的性能損耗很低。
2.1.4.2.基于 DPU 的虛擬化
當(dāng)前云廠商主流 GPU 云服務(wù)器,都開始基于 DPU 進(jìn)行設(shè)計。DPU 是繼 CPU 和 GPU 之后的「第三顆主力芯片」,其設(shè)計目標(biāo)是卸載 CPU 在網(wǎng)絡(luò)傳輸和存儲的負(fù)載。基于 DPU 設(shè)計的服務(wù)器,大多數(shù)為裸金屬服務(wù)器,沒有采用傳統(tǒng)虛擬化技術(shù),此時 CPU 和 GPU 基本實現(xiàn)了零損耗。
2.2.GPU 云服務(wù)器的多卡通信
基于上面介紹過的 GPU 硬件互聯(lián)技術(shù),接下來討論在硬件能力的基礎(chǔ)上,多個 GPU 之間如何實現(xiàn)實現(xiàn)多卡通信,這涉及到硬件和軟件的支持。我們知道,很多 AI 模型已經(jīng)超過了單個 GPU 的顯存大小。無論是推理還是訓(xùn)練,都需要多 GPU 來實現(xiàn)。這就涉及到單機(jī)多卡和多機(jī)多卡的通信問題,這也是我們在 GPU 云服務(wù)器設(shè)計時面臨的主要挑戰(zhàn)之一。首先是單機(jī)多卡通信的場景,主要有三種方式。
第一種是共享內(nèi)存。在這種通信方式中,多個 GPU 會通過系統(tǒng)內(nèi)存來共享數(shù)據(jù)。從下圖中可以看出,當(dāng) GPU 0 和 GPU 1 進(jìn)行通信時,GPU 0 會先把數(shù)據(jù)從顯存搬遷到系統(tǒng)內(nèi)存(即共享內(nèi)存)中,然后 GPU 1 再從系統(tǒng)內(nèi)存中讀取到自身的顯存中。一般來說,該方式的通信效率低,雙向帶寬在 10 ~ 20 GBps 左右。
第二種是 PCIe 的 P2P。這種通信方式相較于第一種來說,無論讀寫都不需要系統(tǒng)內(nèi)存做中轉(zhuǎn),GPU 0 可以直接向 GPU 1 發(fā)起通信,這種通信方式的雙向帶寬在 40 ~ 50 GBps 左右。
第三種是專有總線。這種方式是通過 GPU 廠商提供的專有總線進(jìn)行通信,比如說 NVIDIA 的 NVLink、華為的 HCCS 以及 AMD 的 Infinity Fabric 等。這種方式比 PCIe 的傳輸帶寬要的多。以 NVLink 舉例,專有總線的雙向帶寬可以達(dá)到 400-900 GBps,相比于 PCIe 的 P2P 通信來說要高出一個數(shù)量級。而且在實際通信的過程中,采用專有總線的方式大大提升了單機(jī)多卡的通信效率。
然后是多機(jī)多卡通信的場景,就需要采用上面介紹的 RDMA 網(wǎng)絡(luò)技術(shù)來實現(xiàn)。多卡通信的性能,決定了上層集合通信的性能。集合通信庫會先探測出當(dāng)前的 GPU 和系統(tǒng)能進(jìn)行哪些多卡通信的方式,然后根據(jù)該結(jié)果進(jìn)行合理的選路,同時選擇合適的通信算法,大化提升集合通信的性能。
2.2.1.共享內(nèi)存方式
單機(jī)上多個 GPU 可以通過 PCIe 總線,訪問系統(tǒng)內(nèi)存來共享數(shù)據(jù),從而達(dá)到通信的目標(biāo)。
2.2.2.PCIe 的 P2P
單機(jī)上多個 GPU 也可以通過 PCIe 總線,直接進(jìn)行通信,這就是 P2P 通信。
2.2.3.專有總線技術(shù)
上面我們介紹過幾個廠家的專有互聯(lián)硬件總線,它們都需要相應(yīng)的軟件支持,來到達(dá)單機(jī)多卡的通信。
2.2.4.多機(jī)互聯(lián) - GDR
多機(jī)多卡場景下,傳統(tǒng)的 TCP/IP 網(wǎng)絡(luò)通信速度過慢,無法滿足業(yè)務(wù)的需求。目前我們主要使用基于 RDMA 網(wǎng)絡(luò)的 GDR 技術(shù)來實現(xiàn), 即 GPU Direct RDMA。它支持 RDMA 的網(wǎng)卡直接訪問 GPU 的數(shù)據(jù),大大提升了多機(jī)多卡的通信效率。下面我通過一個例子來為大家講解 GDR 是如何提升通信效率的。在傳統(tǒng)的多卡通信中,即圖中紅色步驟,共分為 5 步:GPU 將數(shù)據(jù)傳給內(nèi)存 —— RDMA 網(wǎng)卡從內(nèi)存中拿到數(shù)據(jù) —— RDMA 網(wǎng)卡將數(shù)據(jù)傳給另外一個節(jié)點(diǎn)的 RDMA 網(wǎng)卡 —— 新節(jié)點(diǎn)的 RDMA 網(wǎng)卡將數(shù)據(jù)傳給該節(jié)點(diǎn)的內(nèi)存 —— GPU 從內(nèi)存中拿到該數(shù)據(jù)。而 GDR 的方式繞過了系統(tǒng)內(nèi)存的中轉(zhuǎn),讓 RDMA 網(wǎng)卡可以直接從 GPU 處獲取數(shù)據(jù),如圖中藍(lán)色步驟,共分為 3 步:RDMA 網(wǎng)卡從 GPU 處獲取數(shù)據(jù)—— RDMA 網(wǎng)卡將數(shù)據(jù)傳給另外一個節(jié)點(diǎn)的 RDMA 網(wǎng)卡 —— 新節(jié)點(diǎn)的 RDMA 網(wǎng)卡將數(shù)據(jù)傳輸給 GPU。
得益于 GDR 的方式可以在 PCIe Switch 中進(jìn)行傳輸,不僅僅提供了高速了數(shù)據(jù)傳輸,同時也減少了上行鏈路中的帶寬爭搶。相比于傳統(tǒng)的方式,采用 GDR 的方法可以提升整體 3-4 倍的帶寬。大大提升了多機(jī)多卡的通信效率。
3.百度智能云的 GPU 云服務(wù)器設(shè)計實踐
百度智能云主要有兩類 GPU 云服務(wù)器的實例,第一類是 BCC(Baidu Cloud Compute) GPU 云服務(wù)器,基于 Qemu/KVM 虛擬化的 GPU 服務(wù)器。第二類是 BBC(Baidu Baremetal Compute) GPU 云服務(wù)器,即基于裸金屬的 GPU 云服務(wù)器。
3.1.BCC GPU 云服務(wù)器
我們先來看 BCC,即基于 Qemu/KVM 虛擬化的 GPU 云服務(wù)器。整體的設(shè)計如下圖所示:下方是實際的 GPU 硬件,上層是包括 VFIO 和 KVM 在內(nèi)的內(nèi)核,再往上是 Hypervisor 和實際的虛擬機(jī)。主要適用于小模型的訓(xùn)練和推理、圖像識別、推薦系統(tǒng)等場景。
在這樣的結(jié)構(gòu)中,GPU 會通過 VFIO 技術(shù)整卡透傳給虛擬機(jī),使得整體算力的的損耗比較小。此外,它還可以支持 1 卡、2 卡、4 卡和 8 卡的實例,讓客戶可以根據(jù)實際需要來進(jìn)行采購,大大降低了客戶的使用成本。但在這種結(jié)構(gòu)中,BCC 的拓?fù)浣Y(jié)構(gòu)是虛擬的,這也意味著虛擬機(jī)中的拓?fù)浣Y(jié)構(gòu)和實際物理形態(tài)中的拓?fù)浣Y(jié)構(gòu)是有差異的。這些會為實際業(yè)務(wù)的運(yùn)行帶來一些性能影響,我們通過一些虛擬機(jī)的設(shè)計消化了影響,分別為:
GPU 的 NUMA 感知。
支持多 GPU 的 P2P。
支持 A100/A800 的 Shared NVSwitch 機(jī)型。
支持 RDMA 網(wǎng)絡(luò)。
3.1.1.支持 GPU 的 NUMA 感知
虛擬機(jī)里為什么需要 GPU 的 NUMA 感知呢?主要的原因在于保證 CPU 和 GPU 在同一個 NUMA 下,這樣就可以避免數(shù)據(jù)在系統(tǒng)內(nèi)存和 GPU 顯存之間的傳輸性能損失。實際上,系統(tǒng)內(nèi)存、CPU 和 GPU 都存在 NUMA 屬性的,如果彼此之間不在一個 NUMA 中,那么實際的性能差距就會受到影響,尤其是在 AMD MILAN 平臺上, GPU 跨 NUMA 訪問的 PCIe 帶寬只有同 NUMA 訪問性能的一半。
在虛擬機(jī)實現(xiàn)時,如果沒有考慮到 NUMA 屬性,當(dāng)我們將 GPU 透傳到虛擬機(jī)時,CPU 0 以及 Memory 0 不知道它要訪問的 GPU 是在同一個 NUMA 下還是跨 NUMA,這就大大降低了 GPU 和內(nèi)存之間的傳輸效率。所以我們需要在 GPU 透傳到虛擬機(jī)的時候,讓它感知到在哪一個 NUMA 下,這樣在虛擬機(jī)內(nèi)就可以強(qiáng)制把 GPU、CPU 以及 Memory 綁定在一起,大大降低了傳輸過程中的性能損失。在實現(xiàn)時,虛擬機(jī)每個 NUMA 的 CPU 都會擴(kuò)展出一個 PCIe bus。此時,實際物理機(jī)上的 NUMA 0 上的 GPU,在透傳給虛擬機(jī)的時候就會掛載到虛擬機(jī)的 NUMA 0 的 PCIe bus 上,NUMA 1 上的 GPU 會掛載到 NUMA 1 的 PCIe bus 上,這樣 GPU 就可以在虛擬機(jī)中感知到 NUMA,從而避免跨 NUMA 傳輸?shù)男阅軗p失。
3.1.2.支持多 GPU 的 PCIe P2P
我們的第二個改進(jìn)是在虛擬機(jī)內(nèi)對 GPU 的 PCIe P2P 支持。在物理機(jī)上如果要支持多 GPU 的 P2P,一般需要滿足兩個條件:
硬件層面支持:比如 PCIe Root Complex 或者 PCIe Switch 支持 P2P。
軟件層面支持:需要驅(qū)動端支持 PCIe P2P 的傳輸。
在物理機(jī)以上兩個條件都是支持的,但是當(dāng) GPU 透傳到虛擬機(jī)的時候就,要支持 PCIe P2P 就有新問題。第一個問題是因為虛擬機(jī)的 PCIe 拓?fù)浣Y(jié)構(gòu)是扁平的,驅(qū)動在虛擬機(jī)內(nèi)無法識別 GPU 的拓?fù)?所以無法開啟 GPU 的 P2P 能力。這里需要修改 Hypervisor 的實現(xiàn),在 Hypervisor 模擬的 GPU PCIe 配置空間里增加一個 PCI Capability,讓驅(qū)動識別出 GPU 的 P2P 親和性,這樣 GPU 驅(qū)動就可以根據(jù)這個信息來開啟 P2P 能力。第二個問題是,如果在物理機(jī)上通過 PCIe Switch 連接的兩個 GPU,要在虛擬機(jī)場景下進(jìn)行 P2P 通信,比物理的性能要差很多。這是因為透傳到虛擬機(jī)的 GPU 不支持 ATS,他們的 P2P 通信都會被路由到 IOMMU,而無法通過 PCIe Switch 中轉(zhuǎn),這樣通信的路徑就長了,導(dǎo)致性能下降。這個問題目前暫時無法解決。
3.1.3.支持 A100/A800 的 Shared NVSwitch 機(jī)型
第三個改進(jìn)是實現(xiàn)了對 A100 和 A800 的 Shared NVSwtich 機(jī)型的支持。下圖是 A100 和 NVSwitch 連接的拓?fù)鋱D。我們可以看到,一臺機(jī)器中有 8 張 A100 的卡,以及 6 個 NVSwitch。它通過 NVSwitch 的連線,可以進(jìn)行任意兩卡之間的 NVlink 高速互聯(lián)。
圖片6.jpg
但如果要做 A100 的虛擬機(jī),會存在有一個問題:如果我們要實現(xiàn)一個 2 卡的虛擬機(jī),在將 GPU 傳到虛擬機(jī)的同時還需要透傳 NVSwitch。但由于 NVSwitch 采用了全連接的形式,如果要保證兩卡的滿速互聯(lián),那么就需要將 6 個 NVSwitch 都透傳到虛擬機(jī)中,此時剩下的 6 張 GPU 就無法繼續(xù)使用 NVSwitch,這就造成了 GPU 資源的浪費(fèi)。為了解決這個問題,可以使用如下兩種方案:第一種是 Full Passthrough 機(jī)型。這種方案就是將所有的 GPU 和所有的 NVSwitch 都透傳到一個虛擬機(jī)中,但這樣的機(jī)型在 1 卡、2 卡、4 卡的情況下會損失部分 NVLink 的帶寬。
另外一種是 Shared NVSwtich 機(jī)型。這種設(shè)計需要創(chuàng)建一個 Service VM 的虛擬機(jī),這個虛擬機(jī)只透傳 NVSwitch。而用戶使用的虛擬機(jī)則只需要透傳 GPU。在 Service VM 中可以對 NVSwitch 進(jìn)行管控,讓用戶虛擬機(jī)內(nèi)的 GPU 都可以進(jìn)行高速互聯(lián)。
通過這樣的方式,解決了用戶使用 1 卡、2 卡或者 4 卡虛擬機(jī)時,虛擬機(jī)內(nèi)部 GPU 之間 NVLink 高速互聯(lián)不損失的問題。
3.1.4.支持 RDMA 網(wǎng)絡(luò)
第四個改進(jìn)是支持 RDMA 網(wǎng)卡透傳。有的 GPU 機(jī)型,除了要透傳 GPU 外,還需要把 RDMA 網(wǎng)卡透傳到虛擬機(jī)里。透傳 RDMA 網(wǎng)卡這點(diǎn)從技術(shù)上實現(xiàn)是比較簡單的,但是如果未做任何優(yōu)化手段的話,實測發(fā)現(xiàn),虛擬機(jī)里的 GDR 性能,只有物理機(jī)的 25% 左右,這顯然是無法接受的。為了改進(jìn)這個問題,需要我們做一些相關(guān)的設(shè)置和改進(jìn)。
首先就是網(wǎng)卡需要支持 ATS 功能,并在透傳前打開網(wǎng)卡的 ATS 功能。ATS 主要的工作就是緩存地址翻譯的結(jié)果。RDMA 網(wǎng)卡向 IOMMU 請求地址翻譯,并將得到的物理地址存儲到網(wǎng)卡的緩存中。這樣當(dāng) RDMA 網(wǎng)卡數(shù)據(jù)包時,可以直接使用緩存的物理地址。
其次是打開 PCIe Switch 上的 ACS 功能,主要是使能 Downstream Port 的 acsctl 的 DirectTrans 標(biāo)志位,這樣,PCIe Switch 就可以直接轉(zhuǎn)發(fā)網(wǎng)卡的數(shù)據(jù)包給 GPU,而不是通過 RC 來進(jìn)行中轉(zhuǎn),這大大降低了數(shù)據(jù)包的傳輸路徑。
通過以上兩個設(shè)置,就可以加速虛擬機(jī)中的 GDR 傳輸性能。但是我們發(fā)現(xiàn)另外一個問題,即多機(jī) NCCL 的性能只有物理機(jī)的 1/4。在物理機(jī)拓?fù)渲?RDMA 網(wǎng)卡和 GPU 在同一個 PCIe Switch 下,但是在虛擬機(jī)拓?fù)渲? GPU 和 RDMA 網(wǎng)卡是平鋪在一個總線上的。而對于 NCCL 來說,如果是物理機(jī)的場景,那么 NCCL 就會選擇 GDR 通信;而在虛擬機(jī)場景下,NCCL 則會認(rèn)為這些網(wǎng)卡和 GPU 無法做 GDR 通信,因此還是按傳統(tǒng)的通過內(nèi)存中轉(zhuǎn)的方式來進(jìn)行通訊。我們采用了 2 種解決方法來修復(fù)這個問題:
第一種方式是修改虛擬機(jī)拓?fù)涞姆绞?即通過增加 PCIe Switch 的方式,讓 GPU 和 RDMA 網(wǎng)卡在同一個 PCIe Switch下,這種方法能讓虛擬機(jī)拓?fù)浜臀锢頇C(jī)的保持一致,這樣 NCCL 選路也和在物理機(jī)的保持一致。
第二種方式是修正 NCCL 的拓?fù)渥R別結(jié)果。我們在每一個 GPU 和它相鄰的 RDMA 網(wǎng)卡中加了一個虛擬的 PCIe Switch,然后將這個拓?fù)湮募ㄟ^環(huán)境變量提供給 NCCL。通過這樣欺騙的方式,讓 NCCL 「誤以為」 GPU 0 和 RDMA 0 在同一個 PCIe Switch下,這樣就可以進(jìn)行 GDR 通信。
通過這樣的方式,我們虛擬的集合通信的性能可以和我們的物理機(jī)打平。
3.2.BBC GPU 云服務(wù)器(裸金屬)
接著是 BBC GPU 云服務(wù)器,即基于裸金屬的 GPU 云服務(wù)器。服務(wù)器的外設(shè)除了 GPU、NVSwitch 和 RDMA 等硬件之外,還通過 PCIe 總線連接了一個 DPU,給主機(jī)提供網(wǎng)絡(luò)和存儲的卸載功能,主機(jī)上的網(wǎng)絡(luò)和存儲的相關(guān)功能都在 DPU 上實現(xiàn)。這類服務(wù)器相比 BCC 服務(wù)器來說,因為 CPU、內(nèi)存、GPU 都不需要虛擬化,整體的算力損耗是零。
目前,我們已經(jīng)實現(xiàn)了 BCC 和 BBC 的融合,在統(tǒng)一的硬件架構(gòu)上,既可以交付虛擬機(jī)形態(tài)或者裸金屬形態(tài)的 GPU 計算實例。
3.2.1 DPU 功能
DPU 核心能力在于卸載、加速和隔離數(shù)據(jù)中心的基礎(chǔ)設(shè)施任務(wù),從而釋放主機(jī)的 CPU 算力,提升整體主機(jī)的系統(tǒng)效率。其核心功能包括:網(wǎng)絡(luò)功能卸載:DPU 通過硬件加速處理網(wǎng)絡(luò)協(xié)議(如 VxLAN 或者 RDMA 等),將虛擬交換機(jī)(如 OVS)的負(fù)載從 CPU 轉(zhuǎn)移到 DPU,顯著降低網(wǎng)絡(luò)時延并提升吞吐量。存儲加速:支持 NVMe-oF 協(xié)議,實現(xiàn)遠(yuǎn)程存儲訪問性能接近本地存儲,并通過 SNAP 技術(shù)優(yōu)化存儲虛擬化,減少 CPU 對存儲協(xié)議(如 iSCSI、NVMe)的處理開銷。
3.2.2.常用 BBC GPU 機(jī)型介紹
3.2.2.1 A800 機(jī)型
以下是我們主推的 A800 訓(xùn)練機(jī)型,它的規(guī)格如下:
CPU:Intel Xeon 8350C 3.1G。
GPU:8 × A800 SXM4 80GB。
NVLink:GPU 卡間雙向 400 GB/s。
網(wǎng)卡:8 × CX6 100G RoCEv2。
其中 8 個 A800 芯片通過 6 個 NVLink Switch 芯片進(jìn)行卡間的高速互聯(lián),雙向帶寬達(dá)到 400 GB/s,同時通過 4 張 PCIe Switch 和網(wǎng)卡進(jìn)行連接。(每張 PCIe Switch 連接了兩張 A800 和兩張 CX6 100G RoCEv2 的網(wǎng)卡進(jìn)行 GDR 的通訊)。
3.2.2.2.L20 機(jī)型
目前百度智能云也提供了 L20 的機(jī)型。由于 L20 可以進(jìn)行卡間的 P2P 傳輸。所以每個 PCIe Switch 都連接了 2 張 L20 和一張 400G RoCE v2 網(wǎng)卡,大大提升多機(jī)互聯(lián)的帶寬。通過這樣的架構(gòu)設(shè)計,我們既可以做模型的推理,也可以進(jìn)行大模型的訓(xùn)練。
3.2.2.3 H20 機(jī)型
百度智能云也提供了 H20 96GB 顯存版本的 BBC 機(jī)型。H20 96GB 是 H100 的精簡版,雖然對算力進(jìn)行了剪裁,但是保留了 H100 的卡間互聯(lián)帶寬,支持 NVLink 和 NVSwitch,適合大模型的推理和訓(xùn)練。H20 96G 8 卡 BBC 機(jī)型支持單機(jī)跑 DeepSeek V3 和 DeepSeek R1 模型的滿血版本。百度智能云同時推出了 H20 141GB 顯存版本的機(jī)型,提供單卡 141GB 的顯存,對 Deepseek 大模型提供了更高的吞吐支持。
4.GPU 云服務(wù)器的未來發(fā)展
4.1.Scale Up 和 Scale Out 的融合統(tǒng)一
在過去萬卡集群的建設(shè)中,云廠商的注意力主要放在 Scale Out 上,通過多機(jī)互聯(lián)技術(shù)合理的網(wǎng)絡(luò)架構(gòu),建設(shè)一個超大規(guī)模的集群,以實現(xiàn)超強(qiáng)算力。同時,Scale Out 和 Scale Up 技術(shù)是互相促進(jìn)和發(fā)展,Scale Out 的互聯(lián)帶寬要匹配對應(yīng)的 Scale Up 帶寬,如果 Scale Up 帶寬很高,而相應(yīng)的 Scale Out 的帶寬較低,會造成集合通信在多節(jié)點(diǎn)上成為瓶頸。這個相互關(guān)系,我們可以從 H800 實例配置 400G 的 RDMA 中可見一斑。不過,隨著集群能力的要求越來越高,單純擴(kuò)大規(guī)模變得不夠經(jīng)濟(jì)有效,Scale Up 逐漸成為關(guān)注點(diǎn),并且兩者之間的邊界變得模糊,節(jié)點(diǎn)間和節(jié)點(diǎn)內(nèi)的互聯(lián)技術(shù)逐漸對齊,以 NVL72 為代表的「高密機(jī)型」就是這個思想的體現(xiàn),使用 NVLink 作為節(jié)點(diǎn)間的連接方式。
4.2.推理卡和訓(xùn)練卡的分野
大模型推理需求的爆發(fā),將使得成本的關(guān)注變得非常敏感。相比算力的提高,大模型推理對 GPU 顯存的大小和互聯(lián)帶寬有著更高的需求,從 DeepSeek R1/V3 可見一斑。同時,專用芯片的崛起,將進(jìn)一步降低大規(guī)模部署情況下的成本。例如現(xiàn)在各大廠商都在設(shè)計針對推理優(yōu)化的 ASIC 芯片,通過簡化計算單元、采用 SRAM 替代 HBM,可以實現(xiàn)數(shù)倍于傳統(tǒng) GPU 的能效比提升。
