GPU通信技術初探(一)

自2007年NVIDIA率先推出GPU加速器後,由於GPU的超強的計算能力,現已廣泛應用於物理、生物科學、化學、天氣預報等需要高性能計算的領域。實際運用中,爲縮減計算時間,應用程序往往同時使用多卡進行並行計算,這裏的多卡包括單個服務器多張GPU卡(下簡稱單機多卡),和多個服務器,且每個服務器分別有多張卡的場景(下稱多機多卡)。同時,由於用於計算的數據量較大,GPU多卡之間的通信尤爲重要,本文主要探索GPU單機多卡和多機多卡兩種場景下的通信技術,並對部分技術進行實測。

1、單機間GPU通信

1.1 GPU Direct

使用GPU Direct技術,多個GPU、網絡和存儲設備可以直接讀寫主機和設備內存,減少不必要的內存拷貝和CPU開銷,降低網絡延遲,進而獲得性能的提升。

GPUDirect技術發展有三個階段:

  • 2010年,GPU支持與網卡,存儲等設備共享內存頁,即GPUDirect Shared Memory;
  • 2011年,NVIDIA推出GPUDirect P2P(Peer-to-Peer),支持同一PCIe總線上的GPU之間的內存訪問;
  • 2012年底,GPUDirect RDMA完美的解決了計算集羣節點間GPU卡PCIe總線的通信問題。該技術將在多機的GPU通信中詳細說明。

1.1.1 GPUDirect Shared Memory

GPUDirect SharedMemory支持GPU與第三方PCIe設備通過共享的host memory實現共享內存。下圖對未使用GPUDirect和使用GPUDirect後的GPU之間通信的數據拷貝進行了對比。


圖1:without GPUDirect vs with GPUDirect(來源

可以看出支持GPUDirect SharedMemory後,GPU之間的通信僅需要兩次拷貝:

  • 先從GPU緩存拷貝到系統內存
  • 對端GPU緩存從系統內存拷貝數據

相較於未使用GPUDirect減少了一次數據拷貝,降低了數據交換的延遲。

1.1.2 GPUDirect P2P


圖2:GPUDirect P2P通信(來源

GPUDirect P2P支持相同PCIe root complex下的GPU之間的直接互訪顯存,如上圖所示,GPU之間的通信不需要將數據拷貝到CPU host memory作爲中轉,進一步的降低了數據交換的延遲。

1.2 NVLink

GPUDirect P2P技術中,多個GPU通過PCIe直接與CPU相連,而PCIe 3.0*16的雙向帶寬不足32GB/s,當訓練數據不斷增長時,PCIe的帶寬滿足不了需求,會逐漸成爲系統瓶頸。爲提升多GPU之間的通信性能,充分發揮GPU的計算性能,NVIDIA於2016年發佈了全新架構的NVLink。

NVLink 1.0與P100 GPU一同發佈,一塊P100上,可集成4條NVLink連接線,每條NVLink具備雙路共40GB/s的帶寬,整個芯片的帶寬達到了160GB/s(4(NVLink連接線)40GB/s),相當於PCIe 3.016的5倍。

NVLink 2.0版本與Tesla V100 GPU一同發佈,NVLink 2.0每個方向的信號發送速率從20GB/s增加到25GB/s,每條NVLink雙信道最大達到50GB/s。單個V100 GPU支持6條NVLink連接線,總帶寬最大可達300GB/s(6(NVLink連接線)*2(雙向)*25GB/s),是PCIe 3.0帶寬的將近10倍。

1.2.1 拓撲


圖3:NVLink拓撲(來源

上圖是使用NVLink連接8個Tesla V100的混合立體網絡拓撲。圖中也以看出每個V100 GPU有6個NVLink通道(綠色連接線),8塊GPU間無法做到全連接,2個GPU間最多只能有2個NVLink通道100GB/s的雙向帶寬。有趣的是GPU 0和3,GPU 0和4之間有2條NVLink相連,GPU0和GPU1之間有一條NVLink連接線,GPU 0和6之間沒有NVLink連接線,也就是說GPU0與GPU6之間的通信仍然需要通過PCIe。

1.2.2 實測

測試方法及環境:參考 cuda sample的readme,在ubuntu16.04鏡像中安裝好cuda toolkit 10.0,編譯好二進制,然後保存鏡像。在華爲雲CCI(Cloud Container Instance)服務中,使用剛製作好的鏡像,選擇規格:GPU計算加速型P2(支持NVLink的Tesla V100 32G * 8卡) 
創建一個無狀態負載。測試結果及說明如下:

圖4:GPU間連通性矩陣

該圖爲GPU之間的連通性,圖中可以看出任何兩個GPU設備之間是否可以直接通信,考慮到該服務器支持NVLink,即可以看出任兩個GPU設備之間是否有NVLink連接,但是無法看出GPU設備間NVLink的連接線個數。

圖5:Disable P2P vs Disable P2P單向的帶寬

該圖測試的是enable GPUDirect P2P和Disable GPUDirect P2P的單向帶寬數據 。圖中數據可看出,Enable GPUDirect P2P時,兩個GPU間通信帶寬最大可達到48.34GB/s,接近兩條NVLink的理論帶寬50GB/s;部分GPU間通信帶寬在24GB/s左右,接近一條NVLink連接線的理論帶寬25GB/s;11GB/s左右的帶寬爲PCIe帶寬。

從這組數據也能夠看出GPU之間的NVLink連接線個數如下表所示,與前面的NVLink拓撲圖一致:

圖6:Disable P2P vs Disable P2P雙向的帶寬

該圖測試的是enable GPUDirect P2P和Disable GPUDirect P2P的雙向帶寬數據 。圖中數據可看出,Enable GPUDirect P2P時,兩個GPU間通信帶寬最大可達到96.50GB/s,接近兩條NVLink的雙向通信的理論帶寬100GB/s;部分GPU間通信帶寬在48GB/s左右,接近一條NVLink連接線雙向通信的理論帶寬50GB/s;14-18GB/s的帶寬爲PCIe帶寬

圖7:Disable P2P CPU vs GPU時延矩陣

圖8:Enable P2P CPU vs GPU時延矩陣

上面兩張圖爲enable GPUDirect P2P和Disable GPUDirect P2P的時的GPU和CPU時延數據,可以看出enable GPUDirect P2P後,時延下降明顯,只要用NVLink連接,GPU時延從17us下降到不足2us,CPU時延也從8us多下降到不足3us。

從上面的測試結果也能看出單機多卡中,有NVLink連接的GPU之間的通信性能提升明顯。但是如果進行單機訓練時只需要用到2卡或者4卡時,如果隨機分配GPU卡,豈不是會出現GPU之間沒有NVLink連接線?不用擔心,華爲雲CCI服務在調度層保證了基本不會出現該問題,調度時會保證GPU之間有NVLink連接線,從而能充分享受到NVLink技術帶來的性能提升。

1.3 NVSwitch

前面也看到,NVLink2.0技術使得單服務器中8個GPU無法達到全連接,爲解決該問題,NVIDIA在2018年發佈了NVSwitch,實現了NVLink的全連接。NVIDIA NVSwitch是首款節點交換架構,可支持單個服務器節點中16個全互聯的GPU,並可使全部8個GPU對分別達到300GB/s的速度同時進行通信。

下圖爲16個GPU通過NVSwitch全連接拓撲圖。


圖9:NVSwitch全連接拓撲(來源

2、多機間的GPU通信

2.1 RDMA & Infiniband

2.1.1 RDMA

由於計算數量巨大,多機多卡的計算/訓練已經是一個常態,多機間的通信是影響分佈式訓練行的一個重要指標。在傳統的TCP/IP網絡通信中,如下圖所示,數據發送方需要將數據進行多次內存拷貝,並經過一系列的網絡協議的數據包處理工作;數據接收方在應用程序中處理數據前,也需要經過多次內存拷貝和一系列的網絡協議的數據包處理工作。經過這一系列的內存拷貝、數據包處理以及網絡傳輸延時等,server間的通信時延往往在毫秒級別,不能夠滿足多機多卡場景對於網絡通信的需求。

圖10:TCP/IP網絡通信

RDMA(Remote Direct Memory Access)就是爲了解決網絡傳輸中數據處理延遲而產生的一種遠端內存直接訪問技術,RDMA技術原理及其與TCP/IP架構的對比如下圖:

圖11:傳統模式 vs RDMA模式網路通信

可以看出RDMA模式的數據傳輸沒有經過一系列的網絡協議的數據包處理,通過網絡設備,服務器1可以直接讀寫服務器2的內存。使用RDMA技術的優點主要有:

  1. Kernel Bypass: 旁路內核,CPU卸載。實測中40Gbps流量CPU佔有率只有5%
  2. zero copy: 內存零拷貝,直接從網卡複製到應用內存,服務器內部處理時延低至1~2微秒
    因此RDMA可以實現服務器間的超低時延、超高吞吐量傳輸。

2.1.2 RDMA的三種硬件實現

目前RDMA有三種不同的硬件實現:

  1. Infiniband(IB):專爲RDMA設計的網絡,從硬件層面保證可靠傳輸,同時由於這是一種新的網絡技術,需要支持該技術的NIC和交換機。

  2. RoCE(RDMA over Converged Ethernet):RoCE是一種允許通過以太網進行RDMA的網絡協議。RoCE有2個版本:RoCE v1和RoCE v2。RoCE v1是一種鏈路層協議,允許在同一個廣播域下的任意兩臺主機直接訪問;RoCE v2基於UDP層協議,實現了路由功能,RoCE v2針對RoCE v1進行了一些改進,如引入IP解決擴展性問題,可以跨二層組網等。

  3. iWARP(internet Wide Area RDMA Protocol:允許在TCP上執行RDMA的網絡協議。在大型組網的情況下,iWARP的大量TCP連接會佔用大量的額外內存資源,對系統規格要求較高。

圖12:三種RDMA技術的軟件棧 (來源)

2.2 GPU Direct RDMA

2.2.1 簡介

GPUDirect RDMA技術支持Server1的GPU內存可以通過同一root complex下的網卡直接訪問對端Server2的GPU內存,如下圖所示。GPU通信通道中無需CPU參與,大幅度降低了CPU間通信的延遲。

圖13:GPUDirect RDMA (來源)

將GPUDirect 1.0與GPUDirect RDMA的通信進行對比,也能看出使用GPUDirect RDMA進一步減少了GPU通信的數據複製次數,進一步降低了通信延遲。

圖14:GPUDirect 1.0 vs GPUDirect RDMA

2.2.2 性能

中科曙光基於GPUDirect RDMA的性能測試的結果顯示,GPUDirect RDMA在小包通信的傳輸帶寬和網絡延遲方面可以帶來至少3倍的性能提升(數據來源)。

在40Gbps以太網上測試GPUDirect RDMA的性能測試結果如下。

圖15:enable GDR vs disable GDR吞吐量 (來源)

上圖比較了不同的I/O size,使用GPUDirect RDMA和不使用的吞吐量數據。結果顯示I/O size越大,GPUDirect RDMA的優勢越明顯,在I/O size在8192時,GPUDirect RDMA有4倍的性能提升。

圖16:enable GDR vs disable GDR時延 (來源)

上圖爲不同的I/O size下,使用GPUDirect RDMA和不使用時的時延數據。數據顯示在使用GPUDirect RDMA後,時延顯著降低,從接近20微妙下降到10微妙左右。

2.3 IPOIB

IPoIB(Internet Protocol over InfiniBand),指利用物理IB網絡(包括服務器上的IB卡、IB連接線、IB交換機等)通過IP協議進行連接,並進行數據傳輸。它提供了基於RDMA之上的IP網絡模擬層,允許應用無修改的運行在Infiniband網絡上。但是,IPoIB 仍然經過內核層(IP Stack),即會產生大量系統調用,並且涉及 CPU 中斷,因此IPoIB性能比RDMA通信方式性能要低,大多數應用都會採用RDMA方式獲取高帶寬低延時的收益,少數的關鍵應用會採用IPoIB方式通信。

3、總結

本文主要介紹了GPU間通信技術,包括單機多卡間的GPUDirect和NVLink技術,多機多卡間的IPOIB和GPUDirect RDMA技術。在大規模計算中,單機場景下使用NVLink技術,分佈式場景下使用GPUDirect RDMA技術,可以極大的縮短通信時間,提升整體性能。

當前華爲雲CCI (Cloud Container Instance)服務已提供搭載NVLink的Tesla V100服務器,同時支持IB卡用於分佈式場景下通信加速,後續我們選擇一些訓練場景進行實測。

4、參考

NVIDIA GPUDirect
GPUDirect RDMA,讓加速更深入
NVIDIA GPUDirect™ Technology – Accelerating GPU-based Systems
淺析GPU通信技術(上)-GPUDirect P2P
淺析GPU通信技術(中)-NVLink
淺析GPU通信技術(下)-GPUDirect RDMA
NVLINK 結構
NVIDIA NVSWITCH:The World’s Highest-Bandwidth On-Node Switch
NVSWITCH AND DGX-2:NVLINK-SWITCHING CHIP AND SCALE-UP COMPUTE SERVER
Accelerating High Performance Computing with GPUDirect RDMA
S8474 - GPUDirect: Life in the Fast
Mellanox OFED GPUDirect RDMA
How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章