深度學習得靠它!NVIDIA Volta GPU核心架構深層技術
人工智慧是目前產業發展的一個熱點,其中深度學習又是熱點中的熱點。過去幾年,隨著深度學習技術的發展、演算法和框架的優化,GPU一躍成為深度學習的計算核心,與之相匹配的則是NVIDIA(英偉達)GPU被廣泛用在深度學習各個階段,成為了事實上深度學習領域的核心產品。在這種情況下,NVIDIA再接再厲,推出了全新的專門為深度學習優化的Volta架構,憑藉全新加入Tensor Core和大量的架構改進,希望進一步加強自己在深度學習領域的地位。
Volta架構公佈於2013年的GTC大會,NVIDIA當時計劃Volta架構大約在2016年左右上市,接替Maxwell架構。不過實際情況是在Maxwell架構後Pascal架構橫空出世,Volta架構則繼續延後。直到2017年5月的GTC大會上,NVIDIA終於公布了數年前就開始籌劃的Volta架構,具體的產品則是產品代號為GV100的晶元以及Tesla V100、TITAN V。GV100晶元核心面積超過800mm2,深度學習性能更是超過100TFlops。究竟NVIDIA是如何達到如此高的性能,巨大無比的GV100核心有什麼秘密,本文將帶你一探究竟。
史上最大的GPU核心
在詳細介紹GV100和Volta架構相關架構設計之前,我們先來了解下GV100核心有關工藝、晶體管數量和規格方面的內容。
工藝和尺寸:台積電12nm FFN,815mm2
根據官方資料,NVIDIA的GV100晶元採用的是台積電的12nm FFN工藝。對於新工藝,目前官方消息不多。考慮到台積電在之前10nm工藝的信息披露中宣稱10nm才是全面更新的節點,因此有理由相信台積電在20nm、16nm、12nm的三種工藝上使用了基本相同的掩模,其主要進步在FinFET的引入和後期不斷的優化上,包括鰭片尺寸、單元距離、柵極距離等更為微觀的內容以及庫文件的優化等。
因此,業內普遍認為台積電的12nm FFN是台積電對16nm工藝的進一步深入優化版本,畢竟16nm已經從2015年用到了現在。另外,FF代表的是FinFET,「N」則指的是專門為英偉達優化的版本。
為什麼要為NVIDIA專門推出一個版本呢?這是因為GV100核心實在是太大了,它的晶體管數量高達221億,封裝面積高達815mm2,遠超歷史上幾乎所有民用處理器,要知道之前已經被稱作晶元之王的GP100核心面積也不過610mm2。從歷史來看,NVIDIA觸碰600mm2的機會非常稀少,早期的GT200面積約為580mm2,Fermi面積也基本相當。
GV100碩大無比的核心照片,注意周圍四顆HBM2顯存。
GP100核心照片,用HBM2顯存作參照物的話,GP100明顯比GV100小。
GV100對比GP100、GM200和GK180。
從工藝和製造角度來說,晶元面積增大將帶來巨大的風險和嚴重降低的良率,NVIDIA在早期基本上不觸碰600mm2的紅線,就是因為超過這條線後良率可能無法控制。本次GV100帶來了史上最大的221億晶體管和超過800mm2的巨大面積,意味著其產量不可能太大並且價格更是昂貴到驚人。
規模:5376個CUDA核心和新加入的672個張量單元
在半導體業界,巨大的核心面積、晶體管數量只意味著一個結果,那就是超大的規模。這一點在GV100上顯示得淋漓盡致。首先來看計算模塊,根據官方資料,GV100核心擁有6個GPC,每個GPC內部擁有7個TPC,每個TPC擁有2個SM模塊,整個GV100擁有84個SM模塊。
進一步細分,每個SM模塊中擁有64個FP32的單元、64個INT32單元、32個FP64單元以及新加入的8個張量(Tensor)單元,此外還有4個紋理單元。因此完整版本的GV100核心就擁有5376個FP32單元、5376個INT32單元、2688個FP64單元,672個張量單元以及336個紋理單元。
GV100的SM結構詳圖,可見全新加入的張量核心。
在內部存儲模塊方面,GV100設計了共享的128KB可配置L1數據緩存,L2緩存方面高達6MB,幾乎可以趕上傳統CPU的緩存了。在外部存儲單元上,GV100設計了八個512bit的內存控制器,配合HBM2顯存,組成了4096bit的規模,搭配8顆每顆2GB共16GB、1.75GHz的HBM2顆粒時,帶來了約900GB/s的顯存帶寬,也是目前帶寬最大的GPU。
GV100核心架構示意簡圖,密密麻麻的CUDA核心塞滿了整個處理器,中央是6MB L2緩存。
從架構上來看,GV100核心的主要晶體管耗費除了規模更大的FP32和FP64核心部分外,主要用於容量更大功能更豐富的緩存、新加入的INT32單元和張量單元等方面。
在計算能力方面,GV100的實際產品Tesla V100雙精度計算能力高達7.5TFlops,單精度則翻倍至15TFlops,半精度30TFlops,相比Pascal架構最強的Tesla P100提高了約41.5%,計算能力暴增。
在深度學習計算能力方面,由於新加入的張量核心,Tesla V100的理論峰值張量計算能力高達125Tensor TFlops,遠超目前市面所有產品。
功耗和實際產品
目前NVIDIA在Volta架構上推出了兩款單卡產品,分別是TITAN V和Tesla V100,其他還有DGX-1的Tesla V版本。只看單卡產品的話,TITAN V和Tesla V100的功耗控制相當出色,最高不超過300W,其中Tesla V100還可以通過使用功率限制的方式來大幅度降低功耗的同時儘可能少的損失性能。
DGX-1目前也推出了Volta架構GV100核心的產品。
Tesla V100提供了最高性能模式和最高能耗模式,前者將持續運行在300W的最大TDP功耗下,性能也是最出色的;後者則運行在50%~60% TDP模式下,但是能夠提供75%~85%的性能。
值得一提的是,目前NVIDIA發布的GV100的產品包括Tesla V100和TITAN V都並非完全版本的GV100晶元,都經過部分的屏蔽以提高早期良率。未來NVIDIA可能在良率表現改善後推出全規格的產品,不過價格很可能更為昂貴。
深入解讀Volta架構
由於產品規模更大、計算能力更強,因此在設計如此大規模晶元時需要仔細平衡性能和功耗、效率等內容。對於這一點,Volta架構在SM核心上主要有下列優點:全新加入的張量核心,理論擁有125 Tensor TFlops計算能力(Tesla V100數據);在進行通用計算時高達50%的能效比提升;增強的高性能L1數據緩存;全新的SIMT線程模型架構,能夠避免之前SIMT和SIMD架構設計的局限性。
在架構設計方面,Volta架構的每個SM被劃分為4四個區塊,每個區塊包含16個FP32計算單元、8個FP64計算單元、16個INT32計算單元、2個新的混合精度張量單元和一個新的L0指令緩存、1個warp調度器、1個調度單元和1個64KB文件寄存器。相比之下,上代Pascal架構中,GP100核心的每個SM只有2個區塊,每個區塊包含了32個FP32計算單元、16個FP64計算單元、1個指令緩衝區、1個warp調度器、2個調度單元和一個128KB的文件寄存器。
對比Pascal架構的SM單元,Volta架構SM的每個區塊更「小」,規模大約是Pascal架構的一半,這樣有利於進行更細粒度的調用從而提高效率,同時全新的L0指令緩存的加入也會顯著提高指令效率。另外,由於共享存儲單元和L1的合併,使得每個SM擁有96KB的緩存可供調用,遠大於Pascal架構的64KB,考慮到兩代架構SM在FP能力上基本相當,這意味著Volta擁有更充裕的緩存資源。
全新加入的張量單元
在目前深度學習神經網路計算中,張量單元的計算主要採用了FMA也就是乘加的計算方法。比如D=A×B+C,D的格式為FP16或者FP32,A和B都是FP16,C是FP32。在擁有大量類似計算的情況下,NVIDIA加入的張量單元專門為乘加計算進行加速,帶來了非常驚人的張量Flops。
以Tesla V100為例,其中包含了640個張量單元,每個SM中包含8個,總計有80個SM內核。每個張量單元每個時鐘周期可以進行64位浮點的FMA操作,8個張量單元也就是一個SM一個時鐘周期可執行512個FMA操作,或者1024個獨立浮點操作,這個數據反映在Tesla V100上,就是每周期峰值計算能力為125Tensor TFlops。
相比之下,傳統的Pascal架構的Tesla P100採用標準的FP32對其進行計算,每周期峰值效能大約只有Tesla V100的1/12,也就是大約10.5TFlops(Tesla P100的單精度浮點計算能力,需要GPU全速運轉),這樣的性能是指在模型訓練階段。如果是推理階段,由於FP16操作大量加入,Tesla V100相對Tesla P100的峰值性能倍數會下降至6倍,依舊非常誇張。
當然,上述數據表明的都是理論峰值計算的能力,實際上在應用中並不會達到如此誇張的倍數增加,因為實際應用的計算要更複雜,張量單元並不會全程參與,還有其他的一些計算需要GPU甚至CPU加入,因此綜合來看,在單精度矩陣乘法計算較多的應用中,支持張量單元的CUDA 9的Tesla V100在實際計算中性能大約是支持CUDA 8的Tesla P100的1.8倍;如果是訓練和推理操作使用的是半精度矩陣乘法(比如FP16輸入和FP32累加的矩陣計算),那麼由於張量單元的加持,這個性能差距會提高到9倍以上。在更極端的情況下,比如計算4×4矩陣乘法計算,生成4×4輸出矩陣,那麼Volta架構將發揮最強大的加速能力,相比Pascal架構性能提高12倍左右。
根據NVIDIA數據,混合精度張量計算中,GV100和GP100的性能差距會提高到9倍以上。
對4×4的張量積,張量核心的效能可以達到最高。
全新加入的張量單元帶來了強大的加速能力,那麼功耗表現是不是很誇張呢?根據NVIDIA介紹,他們通過底層數學上的優化,使得張量單元非常省電。一般來說,這種大量承接某類計算的模塊容易使用固定單元完成,效率極高但可編程能力比較弱,考慮到深度學習計算的需求,放置在GPU中可謂相得益彰。
不僅如此,NVIDIA還為張量單元部分加入了時鐘門控,在單元靜默的時候可以通過時鐘門控降低單元頻率甚至關閉它來節約能耗。不過,張量單元對傳統的圖形計算來說是沒有任何幫助的,很可能在面向圖形的GeForce和Quadro產品中被徹底取消。
可同時執行FP和INT指令
之前的帕斯卡架構上,SM單元中只設計了FP單元,沒有加入INT單元,因此不能同時執行FP和INT計算。但是在Volta架構上,每個SM單元中都有獨立的FP單元和INT單元,允許用戶以全吞吐量同時執行FP32和INT32操作,同時提高了指令發送的吞吐量。
另外,在計算FMA時延遲也得到了降低,帕斯卡架構需要6個時鐘周期,但是伏打架構只需要4個,降低了50%。藉助於新加入的INT32單元,對一些包含有整數計算(指針計算或整數存儲器地址計算)和浮點計算內部循環的應用程序而言,在一個迭代周期內可以同時計算新的地址、FP數據同時為下一次迭代計算載入數據,效率與性能大幅度提升。
增強的L1數據緩存、共享存儲
在NVIDIA之前的產品中,更快的共享存儲和更方便的L1數據緩存是分開設計的,但是在Volta架構上,這兩個緩存被合併為增強型L1數據緩存,總容量為每SM 128KB,是Pascal架構的SM L1緩存容量的7倍以上,並且整體使用方式也非常靈活,比如根據不同的應用場合可以將其調整為64KB L1數據緩存或者64KB共享緩存,或者在計算應用中全部將其設置為L1數據緩存,非常方便。
除了容量上的靈活操作外,對使用L1緩存的應用來說,緩存的延遲和帶寬都得到了改善,高帶寬訪問和低延遲訪問都能夠更高效運行。另外,共享存儲的帶寬更高、延遲更低並且不存在緩存未命中情況,需要程序員對其進行手動配置,過程比較複雜。通過Volta架構全新的設計,縮小了使用共享內存的應用程序與直接訪問設備內存數據的應用程序之間在性能上的差距,使其更為平衡,程序員可以更方面大膽的使用L1緩存而不用太擔心性能的損失了。
在實際的性能測試中,當應用程序代碼不訪問共享內存轉而使用L1數據緩存時,在Volta架構上的性能損失大約為7%,而Pascal架構則損失了30%。這意味著儘管共享內存可以實現更高性能,但新的Volta L1緩存可以在損失少部分性能的情況下大大降低程序工作的難度。總的來看,Volta架構增強的L1緩存設計,不但提高了性能,還簡化了編程,同時降低了程序員在性能調優上的工作負荷,是一舉多得的設計方案。
第二代NVLink匯流排
NVLink匯流排在Pascal架構上首次出現,這也是NVIDIA首次自定義系統級別高速匯流排。NVLink的主要作用是用於CPU和GPU之間、GPU和GPU之間的高帶寬、高速度、低延遲連接。相比傳統的PCI-E匯流排,NVLink有著更高的帶寬和更強大的性能。在Volta上,NVIDIA推出了第二代NVLink,可以提供更高的連接速度、更多的GPU連接和更出色的緩存一致性、可伸縮性等。
NVLink匯流排是NVIDIA和IBM共同研發的,在Volta上升級到了第二代。
在帶寬方面,第二代NVLink相比前代產品提升了25%,從之前的每鏈路單向帶寬的20Gb/s提升至25Gb/s。最大支持鏈路數量從4個增加到6個,因此總計可以提供最多300Gb/s的雙向帶寬。更多的鏈路允許配置更多的GPU連接,比如8個GPU之間的高速連接,或者CPU和GPU之間更快速的通訊等。
在功能方面,第二代NVLink允許CPU直接對每個GPU的HBM2顯存直接讀取或進行Atom操作,並支持內存一致性,也支持CPU將圖形內存中的數據存儲在CPU Cache中方便CPU快速處理。另外,新的NVLink還加入了對地址轉換服務(ATS)的支持,允許GPU直接訪問CPU的頁表。
在功耗方面,NVLink加入了低功耗模式,可以在沒有工作的情況下進入休眠模式,節約能耗的同時提升性能功耗比。第二代NVLink匯流排在加強帶寬的同時還加入了不少新功能,這能夠顯著降低多GPU的系統延遲並提升其性能,尤其是在計算密度較高的應用中將非常有效。
獨立的線程調配設計
在硬體部分介紹完成後,Volta架構在軟體方面的設計也非常值得一提。其中最重要的就是獨立顯存調配設計功能,這也是前文提到的「全新的SIMT線程模型架構,能夠避免之前SIMT和SIMD架構設計的局限性」的詳細解釋。
在之前的Pascal架構或者更早的架構中,NVIDIA的GPU都是以SIMT方式執行一組32個線程的。以Pascal架構為例,Pascal架構的一個warp包含32個線程,共享一個程序計數器,使用一個活動掩碼來確定線程是否正在運行。這意味著如果存在操作的分支,執行路徑會呈現發散的狀態,這樣不同分支的線程就會缺乏並發性除非重新同步。缺乏並發性的線程可能存在無法交換數據、運行不一致以及線程分歧等,容易導致死鎖問題的出現。這就意味著程序員需要盡量少的使用細粒度的同步,或者依靠無鎖演算法等來避免發生這樣的問題。
在Volta架構架構上,這樣的問題得到了改善。Volta架構通過在所有線程之間實現相等的並發性來防止這類問題的出現,每個線程都有自己的程序計數器和調用堆棧。在實際操作中,Volta架構的獨立線程調度器允許GPU執行任何線程,也允許一個線程等待另一個線程產生數據。不僅如此,Volta架構還設計了進度優化器,這個優化器的作用是確定如何將來自同一個warp的活動線程一起分組到SMIT中再同時並發出去,這樣既保留了SMIT的高吞吐量,又實現了比較高的靈活性。另外,如果需要的話,程序可以使用顯式同步來重新令warp中的線程收斂,操作非常靈活方便。
Volta架構下,程序可以使用顯式同步來重新令warp中的線程收斂。
獨立線程設計的出現,使得Votla架構在面對分支操作時更遊刃有餘,這大大增強了GPU在面對不同類型計算時的靈活性,在很大程度上提高了GPU的整體效能,使得GPU在面向更多樣化的通用計算時有更出色的表現。
面向計算,深度學習的專屬武器
從NVIDIA最近數代產品發展來看,在進入Kepler架構後,NVIDIA在產品規划上越來越重視計算性能了,表現最明顯的就是Volta架構,面向計算而生,特點就是大幅度提升了雙精度性能、加入了張量單元、加強了深度學習神經網路計算的能力。
毫不誇張地說,從其高昂的售價和特色的功能來看,圖形功能只是Volta架構的功能的一部分,更重要的部分反而是深度學習和通用計算市場。這和之前GPU主要以Graphic為主,以General為輔的情況大相徑庭。Volta架構是面向計算的產品,是深度學習的專屬武器。
Volta架構和相關產品的發布,是NVIDIA加速轉向計算市場的一個標誌。
出現這種情況的原因一是目前NVIDIA在遊戲市場上基本處於壟斷地位,競爭對手的弱勢無法給其帶來更強大的壓力,因此可以在掌控市場節奏的情況下,將資源轉移至更富有利潤的市場。二是目前深度學習和通用計算市場剛剛打開,龐大的利潤和極高的增長空間讓NVIDIA不得不重新權衡產品重心。
毫不誇張的說,伴隨著深度學習和通用計算市場的進一步成長,未來NVIDIA極有可能推出無圖形處理能力的專用計算晶元,專門面向計算市場,圖形市場則交給傳統GPU部門完成,徹底變成「雙頭鷹」架構,互不干擾的完成市場的擴張和佔領。屆時,GPU一詞的含義,也將包含Graphic Process Unit和General Process Unit,不再唯一。
對遊戲玩家而言,Volta架構目前的產品是幾乎不存在選擇意義的,Tesla V100純粹是計算卡無法使用,新的TITAN V高昂的售價和目前的情況顯然更偏向的是專業和企業用戶。雖然各大測試都顯示TITAN V的性能比目前TITAN Xp要高出20%~30%,但這顯然不是一張815mm2晶元的真正實力(壕用戶請隨意)。
遊戲玩家唯一的希望就是明年NVIDIA是否會推出Volta架構的GeForce產品,去掉了雙精度單元和張量單元,保留了大部分伏打架構精髓的全新晶元,按照慣例,首發產品應該是GV104,性能如果能持平GTX 1080Ti那就再好不過了。
賣個小關子,在前文中,我們多次提到了張量(Tensor)一詞,那麼什麼是張量?張量和深度學習的關係是什麼?不妨在《微型計算機》2018年02期里找答案吧!
※小米電視4A 50英寸發布;驍龍835 PC運行exe性能曝光…
※SK海力士搞定單Die 16Gb DDR4顆粒;小米盒子4下周發布…
TAG:微型計算機 |