GPU 通信技術初探(一)- 深度學習集羣

作者: 華爲雲原生團隊

2019 5 21 09:41

https://www.infoq.cn/article/3D4MsRVS8ZOtGCj7*krT

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

0. GPUDirect的演進 (add by danteliujie)

2010年

 

GPUDirect Shared Access

通過共享的固定主機內存(不推薦使用)提供了與第三方PCI Express設備驅動程序加速通信的支持

 

2011年

 

GPUDirect Peer to Peer

允許GPU使用高速DMA傳輸直接在兩個GPU的內存之間加載和存儲數據

2011年

 

GPUDirect for Video

爲基於幀的設備(例如,圖像採集卡,視頻切換器,HD-SDI捕獲和CameraLink設備)提供了優化的管道,可有效地將視頻幀傳入和傳出NVIDIA GPU內存

2013年

 

GPUDirect RDMA(遠程直接內存訪問)

使網絡設備可以完全繞過CPU主機內存直接訪問GPU內存

2019年

 

GPUDirect Storage

支持在GPU內存和NVMe或NVMe-oF等存儲設備之間傳輸數據的直接路徑

來源(https://developer.nvidia.com/gpudirect)

1、單機間 GPU 通信

1.1 GPU Direct

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

GPUDirect 技術發展有三個階段:

2010 年,GPU 支持與網卡,存儲等設備共享內存頁,即 GPUDirect Shared Memory;

2011 年,NVIDIA 推出 GPUDirect P2PPeer-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 之間通信的數據拷貝進行了對比。


1without 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/s4NVLink 連接線)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/s6NVLink 連接線)*2(雙向)*25GB/s),是 PCIe 3.0 帶寬的將近 10 倍。

1.2.1 拓撲


3NVLink 拓撲(來源

上圖是使用 NVLink 連接 8 Tesla V100 的混合立體網絡拓撲。圖中也以看出每個 V100 GPU 6 NVLink 通道(綠色連接線),8 GPU 間無法做到全連接,2 GPU 間最多隻能有 2 NVLink 通道 100GB/s 的雙向帶寬。有趣的是 GPU 0 3GPU 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,編譯好二進制,然後保存鏡像。在華爲雲 CCICloud Container Instance)服務中,使用剛製作好的鏡像,選擇規格:GPU 計算加速型 P2(支持 NVLink Tesla V100 32G * 8 卡)

創建一個無狀態負載 (https://github.com/NVIDIA/cuda-samples/tree/master/Samples/p2pBandwidthLatencyTest)。測試結果及說明如下:

4GPU 間連通性矩陣

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

5Disable 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/s11GB/s 左右的帶寬爲 PCIe 帶寬。

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

圖 6Disable 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/s14-18GB/s 的帶寬爲 PCIe 帶寬

7Disable P2P CPU vs GPU 時延矩陣

8Enable P2P CPU vs GPU 時延矩陣

上面兩張圖爲 enable GPUDirect P2P Disable GPUDirect P2P 的時的 GPU CPU 時延數據,可以看出 enable GPUDirect P2P 後,時延下降明顯,只要用 NVLink 連接,GPU 時延從 17us 下降到不足 2usCPU 時延也從 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 全連接拓撲圖。


9NVSwitch 全連接拓撲(來源

2、多機間的 GPU 通信

2.1 RDMA & Infiniband

2.1.1 RDMA

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

10TCP/IP 網絡通信

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

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

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

Kernel Bypass: 旁路內核,CPU 卸載。實測中 40Gbps 流量 CPU 佔有率只有 5%

zero copy: 內存零拷貝,直接從網卡複製到應用內存,服務器內部處理時延低至 12 微秒
因此 RDMA 可以實現服務器間的超低時延、超高吞吐量傳輸。

2.1.2 RDMA 的三種硬件實現

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

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

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

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

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

IBTA(InfiniBand Trade Association)

2.2 GPU Direct RDMA

2.2.1 簡介

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

13GPUDirect RDMA (來源)

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

14GPUDirect 1.0 vs GPUDirect RDMA

2.2.2 性能

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

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

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

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

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

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

2.3 IPOIB

IPoIBInternet 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

 

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