NVIDIA造出16核心全球最大GPU,靠的就是它!
「
在之前的GTC2018大會上,英偉達發布了全新的DGX-2超級計算機。憑藉多達16顆Volta GPU強大的計算能力,這款重達350磅、售價40萬美元的機器可以提供最多2PFLOPS的深度學習計算能力,堪稱目前AI業界的最強者。那麼,英偉達是如何將16顆Tesla V100的GPU連接在一起,並發揮出如此強大的計算能力的呢?要回答這個問題,就有必要來看看什麼是NVLink 2和NVSwitch。
隨著AI市場的興起,英偉達近年來在GPU上持續發力,不斷推出全新的產品。新產品在計算能力提升的同時,其晶元面積也已經屢創新高,甚至逼近了製程和成本的平衡極限。以最新的GV100核心為例,其計算能力高達單精度浮點15TFLOPS,雙精度浮點8.5TFlops,新加入的Tensor Core帶來了大約120TFlops的AI計算能力。獲得如此計算能力的代價是GV100的晶元面積已經高達815平方毫米,堪稱史上面積第一大的GPU核心。即使是台積電使用了最先進的12nm製程,受制於晶元如此大的面積,其良率表現和最終成本也很不好看。
但是,即使這樣的計算能力、即使已經逼近成本和製造平衡線,GV100核心也是無法滿足AI計算需求的。在深度學習的模型訓練中,面對海量的數據,人們對計算能力的需求幾乎是無限的,TFLOPS僅僅是入門,科學家們還在考慮如何製造和使用性能達到PFLOPS甚至EFLOPS、ZFLOP性能級別的設備,更快的性能帶來了更快的計算速度,也帶來了更高的效率來完成計算並獲得結果,實現研究的突破。
對英偉達來說,單晶元計算能力已經達到了目前技術條件下的上限,除非更換全新的製程,否則14/16nm世代的工藝已經很難再榨出油水(TSMC 12nm工藝實際上只是之前16nm工藝的深度優化版本,起名12nm更多是商業用途)。為了滿足計算能力的需求,英偉達開始考慮並聯多個GPU來獲得更好的性能。
和桌面SLI等消費級技術完全不同的是,工業和科學研究所需要的計算加速設備對GPU並聯的需求更高,8個起步,16個也才剛剛夠看。鑒於此,英偉達需要一種全新的匯流排來連接所有的GPU,以實現數據共享和滿足計算所需,這就是NVLink的由來。
NVLink
小試牛刀的160GB/s
說起NVLink,我們不得不提到PCIe匯流排。在NVLink出現之前,多GPU之間的互聯是由PCIe匯流排完成的,PCIe 3.0 x16匯流排能夠提供32GB/s的雙向帶寬,藉助於PCIe Switch的存在,PCIe匯流排能夠完成CPU-GPU、GPU-GPU之間的數據交換。一個典型的例子就是AMD的CrossFire X多卡互聯繫統,完全藉助PCIe匯流排來傳遞數據,甚至不需要額外的橋接通道,相比之下,英偉達的SLI技術至今依舊在使用橋接晶元實現GPU的直接連接。
依賴PCIe匯流排的多路GPU系統。
雖然通過PCIe匯流排可以連接多顆GPU,但是僅僅32GB/s的雙向帶寬和PCIe Switch的存在,還是使得更多GPU之間的連接存在瓶頸。尤其是在AI計算這種需要更多數據傳遞和平衡的系統中,PCIe不可能支持諸如8個GPU這樣的系統,因此系統的性能難以繼續提升。
在這種情況下,英偉達決定自行開發一種匯流排用於多GPU互聯。在2016年發布的Pascal架構GPU中,英偉達首次推出了這種名為NVLink的匯流排系統。單個NVLink是一個雙向介面,包含了32個鏈路,每個方向形成8個差分對。根據英偉達的數據,Pascal家族的GP100核心中集成了4個NVLink匯流排,每個可以提供40GB/s的帶寬,因此GP100晶元擁有的帶寬為160GB/s。
支持NVLink技術與不支持NVLink技術的CPU連接結構示意圖。
作為一種創新的匯流排設計,NVLink如果只是用於連接GPU,就顯得有些浪費了。實際上英偉達希望NVLink作為系統的基礎匯流排而存在,就像PCIe匯流排那樣。在這一點上,IBM有力地支持了英偉達,IBM為旗下的高性能處理器Power 8+中加入了對NVLink 1.0的支持,這使得Power 8處理器能夠通過更快、更寬的NVLink連接GPU,而不是之前的PCIe。在一些系統中,四顆GP100 GPU和2個IBM Power 8+處理器藉助於NVLink匯流排,可以實現GPU之間的兩兩聯通以及CPU和GPU之間的互聯互通,相比PCIe效率大大提升。
NVLink匯流排結構示意圖。
除了面向大中型設備外,英偉達還推出了採用英特爾處理器、使用NVLink匯流排的設備。這款專門面向AI加速市場的設備被稱為DGX-1,它集成了8顆GP100 GPU和雙插槽、20核心的英特爾至強Xeon E5-2698v4處理器。由於每顆GPU只有4個NVLink匯流排,因此8顆GPU組成了立方體樣式的網狀網路拓撲結構。其中一組4顆GPU可以實現兩兩連接,然後每顆GPU再和另一組相對應的GPU直連,最終實現了8顆GPU互聯的設計。
DGX-1的8路GPU連接方案示意圖。
NVLink介面正視圖。
在和CPU通訊方面,由於英特爾的至強Xeon處理器不支持NVLink,因此GPU需要通過PCIe匯流排連接至CPU。在這種系統中,8顆GPU所需要的PCIe通道數量遠遠超過了系統所能提供的上限,因此每一對2顆GPU連接至一個PCIe Switch,系統中的4個PCIe Switch能夠滿足8顆GPU和CPU通訊的需求,CPU之間的通訊使用了英特爾自己的QPI匯流排。通過這樣複雜的設計,DGX-1完成了雙路CPU和8路GPU的互聯。
藉助於NVLink匯流排,系統實現了雙Power8 CPU和4顆GPU的互聯。
NVLink 2.0
邁向單晶元300GB/s帶寬
由於NVLink推出後獲得了成功,因此英偉達繼續研發第二代NVLink匯流排,IBM也跟進推出了支持NVLink 2.0的Power 9處理器。NVLink 2.0的特點在於將每條鏈路的信號帶寬從之前的20GB/s提升至25GB/s,因此一條NVLink 2.0匯流排的雙向帶寬可以達到50GB/s,賬面數據提升了25%。
不僅如此,NVLink 2.0還帶來了一些功能上的提升,比如允許CPU直接對每個GPU的HBM2顯存讀取或進行原子操作,並支持內存一致性,也支持CPU將圖形內存中的數據存儲在CPU緩存中,方便CPU快速處理,新加入的地址轉換服務(ATS)則允許GPU直接訪問CPU的頁表。在功耗方面,NVLink 2.0加入了低功耗模式,可以在沒有負載的情況下進入休眠模式,節約能耗的同時提升性能功耗比。
NVLink 2.0、NVLink 1.0以及PCIe匯流排的帶寬對比。
目前NVLink 2.0被GV100 GPU獨佔,GV100 GPU擁有6個NVLink 2.0匯流排,這使得其帶寬達到了300GB/s,相比之前的GP100 GPU的160GB/s提升了87.5%。
在產品方面,英偉達去年將DGX-1的GPU升級至GV100核心,但是沒有改變原有的拓撲結構,依舊是8顆GPU核心,多餘的NVLink 2.0匯流排被用於加強GPU之間的互聯。這些GPU之間能夠享受高達100GB/s的數據帶寬而不是上代的40GB/s,考慮到GV100的在深度學習上的性能暴增,NVLink 2.0能夠帶來的性能提升還是比較顯著的。另外在增加了額外的連接後,跨GPU之間的數據傳輸性能表現也會更好。
英偉達GV100核心是有史以來最大的GPU。
顯然,NVLink 2.0在8 GPU系統中的應用只是最開始的嘗試而已,英偉達還在準備著大規模的並行計算。在GTC 2018上,英偉達宣布了DGX-2,擁有16顆GV100核心,並且每顆核心擁有的HBM2內存的容量也從之前的16GiB升級至32GiB,總計擁有512GiB的HBM2內存。此外,DGX-2的CPU也升級至2顆2.7GHz的24核心至強Xeon Platinum 8168,相比前代產品的性能更為出色。
NVLink 2.0推出後,英偉達順勢升級了DGX-1系統。
但是,在面對越來越多的GPU互聯要求時,前代8顆GPU互聯時所採用的匯流排直連方案就存在一定的問題了。其原因主要是,8顆GPU在NVLink的連接中已經需要至少16條匯流排線路,在DGX-1升級版的NVLink 2.0中更是達到了24條匯流排。如此多的匯流排連接對PCB的布線和製造都是一個極大的難題,況且如果要完成16顆GPU兩兩互聯的話,其匯流排規模將急劇膨脹,甚至難以在PCB上完成。
為「世界上最大的GPU」而生
NVSwitch解析
為了解決這個問題,英偉達設計了一種取巧的方法:既然GPU之間的兩兩互聯難以完成,那麼可以設計一個交換晶元,讓所有的GPU都連接至交換晶元上,再由交換晶元實現數據的互聯互通,這顆交換晶元的名稱就叫NVSwitch。
NVSwitch是一個專用的NVlink交換器,每個NVSwitch晶元擁有18個NVlink埠,在連接NVlink 2.0匯流排的時候,每個埠的雙向帶寬為50GB/s,整個NVSwitch的總帶寬高達900GB/s。由於帶寬巨大、連接介面多,NVSwitch晶元的體積與功耗都比較誇張。
根據英偉達數據,NVSwitch內部集成了20億個晶體管,在採用了台積電12nm FFN工藝(和GV100工藝相同)後功耗依然高達100W,需要採用主動散熱方案才能正常運行。在封裝方面,NVSwitch採用的是1940針的4平方厘米BGA封裝方案,其中576個引腳分配給NVLink匯流排,其餘的引腳用作電源、PCIe、I2C以及GPIO等其他用途,規模巨大。
英偉達還公布了NVSwitch晶元的結構圖,其中大量的面積被兩側的NVLink匯流排佔據,中央部分則由上部的NVlink匯流排和中間用作數據交換的XBAR以及下部的控制部分佔據。從結構圖來看,NVSwitch晶元大量的晶體管被用在連接和數據通道上,其設計還是相當複雜的。
NVSwitch晶元正視圖。
由於NVSwitch擁有18個埠,因此這使得英偉達可以設計一個完全無阻塞、完全互聯、擁有16顆GPU的系統。從實際產品來看,英偉達的連接方式依舊是先將GPU分為兩組,每組8顆GV100 GPU,每顆GV100晶元擁有6個NVLink 2.0介面,每個介面都和一個單獨的NVSwitch晶元連接,一顆GV100可以連接6個NVSwitch晶元。以此類推,讓所有的8顆GPU都連接在這6個NVSwitch晶元上,實現了6個NVSwitch晶元和8顆GPU的連接。
在上述連接中,每個NVSwitch晶元實際上只使用了8個介面,還剩餘10個介面未連接。實際上在DGX-2中,16顆GPU分為2組後分別連接至2個NVSwitch底板上(每個底板有6個NVSwitch晶元,如上文所述),2個NVSwitch底板之間的連接是通過NVLink匯流排完成的,這兩個底板之間的NVLink 2.0匯流排正是來自於NVSwitch晶元剩餘的10個介面中的8個。至於最後的2個介面,目前是空置狀態,據猜測可能會被用於GPU和IBM Power 9處理器之間的連接。在這種連接方案中,IBM的Power 9處理器可以直接連接每個基板的每個NVSwitch晶元,這意味著所有的GPU都可以直接和CPU連接。
16顆GPU通過NVSwitch的連接示意圖,一共使用了12個NVSwitch晶元。
8顆GPU和6個NVSwitch晶元連接圖。
上述描述可能比較繞口且難以從字面上理解,理解NVSwitch的最佳方法是圖片。不過,為什麼英偉達要利用2個NVSwitch底板和12顆NVSwitch晶元來連接16顆GPU,而不是採用更簡單的6個NVSwitch晶元連接16顆GPU—即使看起來介面數量完全足夠,原因尚不得而知。一種猜測是可能16顆GPU晶元和6個NVSwitch連接的話,PCB設計會過於複雜,難以生產;另一種猜測則基於機器結構設計和散熱方面的考慮。無論怎麼說,英偉達通過「8×GPU-6×NVSwitch-6×NVSwitch-8×GPU」的設計,完成了一個史無前例的複雜系統,並帶來了革命性的優勢。
英偉達公布的NVSwitch連接方案示意圖,更為清晰、明朗。
其中一個顯著的優勢則來自於通訊一致性。在之前的DGX-1中由於跨GPU之間的數據需要額外的轉發,因此遠程訪問將是不一致的,通常的解決方法是增加緩存或延遲發送,但這無疑降低了效率並額外增加了負載,同時也使得利用統一內存變得更為困難。
但是藉助於NVSwitch,在DGX-2上,每顆GPU都可以以相同的延遲和速度和其他GPU進行通訊,因此大型AI工作負載可能利用這個特性進行並行工作,大大提高了效率。在GTC 2018上,藉助於這樣的一致性,英偉達稱DGX-2為「世界上最大的GPU」。在這種系統中,由於每顆GPU都和其他GPU相連,因此內存統一訪問的問題已經被大大簡化,現在可能存在高達512GiB的高帶寬(HBM2)內存被虛擬化後視作一個統一內存,GPU和NVSwitch也都實現了演算法來輔助內存子系統。
英偉達公布的DGX-2結構圖,清晰可見上下兩層PCB,每層8顆GPU。
就程序而言,不需要再等待或者將其看作多個GPU,整個機器可以被看做一個大型獨立的GPU方案,這使得大量的應用在計算中擁有最好的效能和最方便的程序設計。NVSwitch的出現,大大降低了多GPU系統優化的難度。
連接更多的可能
從上文的介紹可以看出,NVLink 2.0和NVSwitch的出現,使得GPU從之前的「多路系統」變成虛擬意義上的「單一GPU」。實際上,目前英偉達推出的DGX-2並沒有徹底發揮NVSwitch的實力,畢竟DGX-2採用的是英特爾方案,GPU依舊需要採用PCIe匯流排和CPU通訊,如果是IBM的Power 9,NVlink 2.0和NVSwitch系統的性能想必會更為出色。
理論上來說,NVSwitch支持更多的GPU連接,不僅僅只是16顆GPU。從NVSwitch設計來看,對應連接的系統最多支持18顆GPU,更大規模的GPU在部分應用中可以帶來顯著的性能提升。顯然,隨著英偉達不斷在GPU上推進技術發展,NVSwitch規模進一步擴大、NVlink連接進一步增多的話,DGX系統將更快、更大、更適合未來計算的需求。


※沒有劉海的華為Mate RS保時捷設計,在徠卡三攝的加持下表現如何?
※幾乎沒有短板!高通驍龍710擁有哪些強大的性能和先進的技術?
TAG:微型計算機 |