課程導(dǎo)語(yǔ)
今年5月,在加州圣何塞舉辦的 2017 GPU技術(shù)大會(huì)(GTC 2017)上,英偉達(dá) CEO 黃仁勛發(fā)布了使用最新一代架構(gòu)Volta的NVIDIA Tesla V100,被業(yè)界稱為“宇宙最快”GPU加速器。
12月21日晚8點(diǎn),智東西策劃的英偉達(dá)公開課第二期開課,主講導(dǎo)師NVIDIA中國(guó)高級(jí)解決方案架構(gòu)師吳磊就主題《如何為深度學(xué)習(xí)和HPC提供更高算力—Telsa V100 深度講解》,對(duì)Volta架構(gòu)的最新特性、GV100的V架構(gòu)、專為深度學(xué)習(xí)設(shè)計(jì)的Tensor Core以及Volta如何加入深度學(xué)習(xí)英語(yǔ)進(jìn)行了深度講解。同時(shí),NVIDIA中國(guó)首席解決方案架構(gòu)師羅華平與吳磊一起參與了本期公開課的Q&A環(huán)節(jié)的交流。
課程提綱
-Volta架構(gòu)最新特性
-Volta架構(gòu)深度解析
-Volta加速HPC應(yīng)用
-Volta加速Deep Learning應(yīng)用
-Volta家族產(chǎn)品
重點(diǎn)內(nèi)容
1、不同于基于上一代Pascal架構(gòu)的產(chǎn)品多樣化(有P100,P40和P4),這一代基于Volta架構(gòu)的Tesla產(chǎn)品只推出了Tesla V100這一款——我們稱為universial(通用)的GPU,可以同時(shí)實(shí)現(xiàn)HPC、AI 訓(xùn)練(Training)和推理(Inference)的加速、以及虛擬化功能。相比上一代,Volta產(chǎn)品在各個(gè)應(yīng)用領(lǐng)域的加速性能都有所提升,尤其是在AI Training和AI Inference上的應(yīng)用,得益于新增加的張量計(jì)算單元,平均的加速比可以達(dá)到3倍。
2、Tensor Core是Volta架構(gòu)最重磅特性,是專門針對(duì)Deep Learning應(yīng)用而設(shè)計(jì)的專用ASIC單元,實(shí)際上是一種矩陣乘累加的計(jì)算單元。(矩陣乘累加計(jì)算在Deep Learning網(wǎng)絡(luò)層算法中,比如卷積層、全連接層等是最重要、最耗時(shí)的一部分。)Tensor Core可以在一個(gè)時(shí)鐘周期內(nèi)實(shí)現(xiàn)兩個(gè)4×4矩陣乘法以及與另一個(gè)4×4矩陣加法。整個(gè)計(jì)算的個(gè)數(shù),就是在一個(gè)時(shí)鐘周期內(nèi)可以實(shí)現(xiàn)64次乘和64次加。
3、利用Tensor Core實(shí)現(xiàn)矩陣乘法的加速的兩種方式:1、在CUDA編程里實(shí)現(xiàn)Tensor Core的調(diào)用。新的CUDA 9.0里增加了WMMA,可以調(diào)用其中的API實(shí)現(xiàn)輸入矩陣的Load,兩個(gè)矩陣做乘加,還有結(jié)構(gòu)矩陣的Store;2、可以利用現(xiàn)成庫(kù)函數(shù),最新版本的cuDNN 7.0、CUDA9.0中的cuBLAs,TensorRT 3.0都支持Tensor Core的調(diào)用。這個(gè)方式相對(duì)比較簡(jiǎn)單。
4、目前Tensor Core可以支持的深度學(xué)習(xí)框架有Caffe、Caffe2、MXNet、PyTorch、Theano、TensorFlow等,但不支持CNTK、Chainer、Torch;
5、在底層實(shí)現(xiàn)上,NVIDIA提供了大量SDK去支持上層應(yīng)用或者框架,來(lái)最簡(jiǎn)化、最高效地幫助用戶實(shí)現(xiàn)GPU加速Deep Learning的訓(xùn)練或推理的過(guò)程。這些SDK包括在Training(訓(xùn)練)端的SDK,如標(biāo)準(zhǔn)線性代數(shù)庫(kù)cuBLAS、深度學(xué)習(xí)算法庫(kù)cuDNN(最新版本7.0)、多GPU的集合通信庫(kù)NCCL(最新版本2.0)、基于WEB UI交互式的深度學(xué)習(xí)訓(xùn)練系統(tǒng)DIGITS(最新版本6.0),以及Inference(推理)端SDK,如推理加速引擎Tensor RT(最新版本3.0)、智能視頻分析工具DeepStream。
6、全球3組現(xiàn)在或者今后會(huì)大規(guī)模部署Tesla V100 GPU的數(shù)據(jù)中心:1、美國(guó)橡樹嶺國(guó)家實(shí)驗(yàn)室的Summit超級(jí)計(jì)算機(jī),將在明年完成超過(guò)3400臺(tái)Tesla V100 GPU服務(wù)器的搭建;2、日本國(guó)家先進(jìn)工業(yè)科學(xué)和技術(shù)研究所(AIST)將在其數(shù)據(jù)中心部署4352顆Tesla V100 GPU;3、NVIDIA超級(jí)計(jì)算器SARURNV。SARURNV將在原有的基礎(chǔ)上進(jìn)行升級(jí)改造。去年,SARURNV由124臺(tái)DGX-1服務(wù)器搭建而成,每臺(tái)DGX-1的服務(wù)器搭載了8顆Tesla P100 GPU,這臺(tái)超級(jí)計(jì)算機(jī)曾經(jīng)在世界Top500綠能計(jì)算機(jī)中排名第一。在升級(jí)之后,SARURNV將會(huì)由660臺(tái)DGX-1V服務(wù)器組成,每臺(tái)DGX-1V服務(wù)器會(huì)由8顆Tesla V100 GPU組成。
7、Tesla V100有NVLink和PCIe兩個(gè)版本,但計(jì)算核心都是GV100,都有5120個(gè)CUDA Cores以及640個(gè)Tensor Cores,不同點(diǎn)在于主頻和功耗。NVLink版本主頻更高,雙精度浮點(diǎn)計(jì)算能力可以達(dá)到7.8個(gè)TFLOPS,單精度浮點(diǎn)計(jì)算能力可以達(dá)到15.7個(gè)TFLOPS,而混合精度計(jì)算能力可以達(dá)到125個(gè)TFLOPS。PCIe版本對(duì)應(yīng)指標(biāo)分別是7個(gè)TFLOPS、14個(gè)TFLOPS和112個(gè)TFLOPS。兩個(gè)版本在計(jì)算性能上并無(wú)差異,主要取決于用戶實(shí)際需求。如果需要在GPU之間頻繁進(jìn)行數(shù)據(jù)交換,那么PCIe的傳輸帶寬可能會(huì)成為瓶頸;如果使用NVLink版本就能達(dá)到比較好的效果,否則PCIe版本的Tesla V100是更通用的選擇;
8、全世界越來(lái)越多的超算中心開始使用GPU計(jì)算集群代替原有的CPU計(jì)算集群,主要是因?yàn)镚PU的核心價(jià)值是可以為客戶大幅度的節(jié)省資金。相比CPU計(jì)算集群,GPU計(jì)算集群會(huì)把絕大部分的成本花費(fèi)在購(gòu)買計(jì)算力上,而CPU的集群有很多的成本花費(fèi)在建設(shè)基礎(chǔ)設(shè)施、網(wǎng)絡(luò)、機(jī)柜等花銷上。
福利入口
A、如果你需要本期英偉達(dá)公開課的標(biāo)準(zhǔn)課件和完整音頻,關(guān)注智東西公眾號(hào)(zhidxcom)并回復(fù)“公開課”即可獲取。
B、如果你需要試用NVIDIA Tesla V100,可以點(diǎn)擊底部「閱讀原文」免費(fèi)申請(qǐng)。
課程實(shí)錄
吳磊:大家好。我是NVIDIA高級(jí)解決方案架構(gòu)師吳磊。今天我將為大家?guī)?lái)NVIDIA最新推出的Tesla V100 GPU的深度講解。今天的課程將首先介紹Volta的最新特性,然后會(huì)深度解析Volta架構(gòu),接著我會(huì)帶大家了解一下Volta 加速HPC和Deep Learning的應(yīng)用,最后為大家介紹Volta產(chǎn)品家族中的一些產(chǎn)品。
Part
1
熟悉GPU發(fā)展歷程的朋友可能知道,從2006年NVIDIA發(fā)明CUDA到現(xiàn)在,我們推出了一系列支持加速計(jì)算的產(chǎn)品,每代產(chǎn)品都以著名物理學(xué)家的名字來(lái)命名,從Tesla到Fermi、Kepler、Maxwell、Pascal,再到今年最新推出的Volta。相比于上一代,每一代新產(chǎn)品在計(jì)算能力上都會(huì)有顯著提升。今年5月在美國(guó)舉辦的一年一度的GPU技術(shù)大會(huì)上,NVIDIA宣布了新一代GPU——Volta的誕生。不同于基于上一代Pascal架構(gòu)的產(chǎn)品的多樣化(有P100,P40和P4),這一代基于Volta架構(gòu)的Tesla產(chǎn)品只推出了一款Tesla V100——我們稱為universial(通用)的GPU,可以同時(shí)實(shí)現(xiàn)HPC、AI 訓(xùn)練(Training)和推理(Inference)的加速,以及虛擬化的功能。
從上面的四幅圖片可以看出,相比于上一代,Volta的產(chǎn)品在各個(gè)應(yīng)用領(lǐng)域的加速性能都有所提升,尤其是在AI Training和AI Inference上的應(yīng)用,得益于新增加的張量計(jì)算單元,平均的加速比可以達(dá)到3倍。
Tesla V100目前有兩款產(chǎn)品供大家選擇,左側(cè)的為NVLink版本,右側(cè)為PCIe版本。但是實(shí)際上這兩款產(chǎn)品的計(jì)算核心是相同的,都叫做GV100,他們都有5120個(gè)CUDA Cores以及640個(gè)Tensor Cores。我們?cè)诤竺鏁?huì)對(duì)Tensor Core進(jìn)行詳細(xì)講解。二者的不同點(diǎn)在于主頻和功耗。主頻更高的Tesla V100 NVLink版本,雙精度浮點(diǎn)計(jì)算能力可以達(dá)到7.8個(gè)TFLOPS(每秒萬(wàn)億次浮點(diǎn)運(yùn)算),單精度的浮點(diǎn)計(jì)算能力可以達(dá)到15.7個(gè)TFLOPS,而混合精度計(jì)算能力可以達(dá)到125個(gè)TFLOPS。PCIe版本對(duì)應(yīng)的指標(biāo)分別是7個(gè)TFLOPS,14個(gè)TFLOPS和112個(gè)TFLOPS。
從這幅圖上可以看到,Tesla V100 GPU具有五大特性:
1、Tesla V100采用了最新的12nm工藝設(shè)計(jì)。這使得在原有芯片面積上能部署更多的晶體管單元,進(jìn)而顯著增加GPU芯片內(nèi)部計(jì)算單元的個(gè)數(shù),進(jìn)一步提升芯片的節(jié)能性。
2、改進(jìn)了Tesla V100的IO性能。我們知道,異構(gòu)計(jì)算中GPU的計(jì)算能力提升是很快的,尤其在近幾年的時(shí)間里,而瓶頸往往會(huì)出現(xiàn)在存儲(chǔ)IO或者總線IO上。在這里,我們采用了最新的NVLink2.0技術(shù),有效地提升了CPU與GPU或者GPU與GPU之間傳輸帶寬,并采用了最新的HBM2技術(shù),進(jìn)一步提升了顯存的帶寬和利用率。
3、采用了新的MPS多進(jìn)程技術(shù)。MPS技術(shù)可以允許多個(gè)CPU的進(jìn)程,同時(shí)發(fā)射CUDA任務(wù)到GPU中去執(zhí)行,這可以顯著提升GPU的利用率和吞吐能力。Tesla V100采用了新的基于硬件加速的MPS技術(shù),進(jìn)一步優(yōu)化任務(wù)加載的延遲,同時(shí)容納更多的客戶數(shù)量。
4、我們采用了全新的SIMT編程模型,每個(gè)線程可以擁有獨(dú)立的存取計(jì)數(shù)和堆棧,使得線程間同步通信可以更加靈活,也可以去適應(yīng)更復(fù)雜的算法邏輯。
5、我們針對(duì)深度學(xué)習(xí)中的Training(訓(xùn)練)和Inference(推理)大量的矩陣運(yùn)算,專門設(shè)計(jì)了Tensor Core單元,這一點(diǎn)是整個(gè)設(shè)計(jì)中最重磅的一點(diǎn)。
上面是Tesla V100的框圖。Tesla V100的芯片面積有815平方毫米,一共有210億顆晶體管,搭載了84個(gè)SM(流多處理器)單元,其中有效單元是80個(gè)。每個(gè)SM單元中有64個(gè)單精度的處理單元CUDA Core以及8個(gè)混合精度的矩陣運(yùn)算單元Tensor Core,總共有5120個(gè)CUDA Core和640個(gè)Tensor Core。還有16GB的HBM 2的顯存,帶寬可以高達(dá)900GB/s,并且支持300GB/s雙向帶寬的NVLink2.0的主線協(xié)議。
接下來(lái)我們看一下Tesla V100與Tesla P100的性能比較。首先看第一行,Tesla P100有10個(gè)TFLOPS的單精度浮點(diǎn)計(jì)算能力和21個(gè)TFLOPS半精度浮點(diǎn)計(jì)算能力,而基于Tensor Core ,Tesla V100有125 個(gè)TFLOPS的混合精度計(jì)算能力。對(duì)比之下,V100分別提升了12倍和6倍;再看第三行,相比于Tesla P100,Tesla V100在雙精度和單精度浮點(diǎn)計(jì)算性能上都有了50%的性能提升;最后一行是L1 Caches,Tesla V100在容量上有了顯著的提升,對(duì)于全局存儲(chǔ)訪問(wèn)比較密集,并且數(shù)據(jù)局部性比較好的程序,能夠顯著提升程序的執(zhí)行速度。
實(shí)際上,HBM2技術(shù)在上一代的 GP100就已經(jīng)開始使用了。它是一種堆棧式的存儲(chǔ)技術(shù),共有4096位的主線位寬,這使得存儲(chǔ)器可以在較低的主頻下實(shí)現(xiàn)較高的帶寬。而Tesla V100采用的是更新的HBM2技術(shù),在位寬不變的情況下,主要是提升了Memory Clock的時(shí)鐘以及DRAM的利用率。這使得Tesla V100的HBM2的實(shí)際顯存帶寬比Tesla P100提升50%左右,最高可以達(dá)到900GB/s。
Tesla V100的NVLink版本支持NVLink2.0高速互聯(lián)總線協(xié)議。Tesla P100是支持當(dāng)時(shí)的NVLink1.0協(xié)議,每顆GPU可以連接4根總線,每根總線的單向傳輸帶寬可以達(dá)到20GB/s,四根總線可以實(shí)現(xiàn)單向80GB/s、雙向160GB/s的IO帶寬。而在Tesla V100中,我們支持最新的NVLink2.0協(xié)議,每顆GPU最多可以實(shí)現(xiàn)六根總線互聯(lián),每根總線的單向傳輸帶寬可以達(dá)到25GB/s,六根總線可以實(shí)現(xiàn)單向150GB/s、雙向300GB/s的IO帶寬,相比NVLink1.0,帶寬幾乎提升了1倍。
下面我們一起來(lái)了解下Tesla V100在可編程性方面新增的一些特性。
首先講一下Unified Memory(統(tǒng)一內(nèi)存尋址)。在編寫CUDA程序的時(shí)候,我們需要在CPU端和GPU端分別定義不同的內(nèi)存空間,用于存儲(chǔ)輸入或輸出的數(shù)據(jù)。簡(jiǎn)單來(lái)說(shuō),Unified Memory的概念就是定義一個(gè)內(nèi)存指針,既可以從CPU端去訪問(wèn),也可以從GPU端去訪問(wèn)。Unified Memory經(jīng)歷了一個(gè)比較長(zhǎng)的發(fā)展歷史,2010年CUDA4率先推出了統(tǒng)一虛擬地址——UV的概念,當(dāng)時(shí)我們叫做零復(fù)制內(nèi)存,GPU代碼可以通過(guò)PCIE總線訪問(wèn)固定的CPU內(nèi)存,無(wú)需進(jìn)行Memory Copy。
在CUDA6中推出了統(tǒng)一內(nèi)存池的概念。內(nèi)存池可以在CPU與GPU之間進(jìn)行共享,而CPU和GPU均可以利用單一的指針來(lái)訪問(wèn)管理內(nèi)存。但是,當(dāng)時(shí)受限于Kepler和Maxwell架構(gòu),CPU涉及的所有管理內(nèi)存必須是在Kernel函數(shù)啟動(dòng)之前先要與GPU同步,CPU和GPU是無(wú)法同時(shí)訪問(wèn)管理內(nèi)存分配空間的,而且統(tǒng)一的地址空間也要受限于GPU物理內(nèi)存的大小。
在Pascal架構(gòu)之后,我們?cè)黾恿舜笮偷刂房臻g的支持,可以支持49位的虛擬地址空間以及頁(yè)錯(cuò)誤,這是我們?cè)赑ascal架構(gòu)下新增的兩大特性。其中,頁(yè)錯(cuò)誤指的是GPU上代碼所訪問(wèn)的頁(yè)沒有常駐GPU內(nèi)存,這頁(yè)就會(huì)出錯(cuò),支持頁(yè)錯(cuò)誤可以讓該頁(yè)按需頁(yè)遷移GPU內(nèi)存或者映射到GPU地址空間,以便通過(guò)PCIE或者NVLink互聯(lián)來(lái)進(jìn)行訪問(wèn),實(shí)現(xiàn)按需進(jìn)行頁(yè)遷移的操作。
新一代Volta架構(gòu)是在Pascal的基礎(chǔ)上新增加了Access Counters(存取計(jì)數(shù)器)功能,它可以使得頁(yè)遷移控制更加精細(xì)、合理。
Pascal架構(gòu)下的頁(yè)遷移就如前一張圖片所示。它會(huì)根據(jù)GPU或者CPU上被訪問(wèn)地址所在頁(yè)的位置,比如logo的訪問(wèn)或者remote的訪問(wèn),按需發(fā)起頁(yè)遷移操作,這時(shí)候CPU或者GPU訪問(wèn)統(tǒng)一內(nèi)存不是直接訪問(wèn)方式,而是通過(guò)頁(yè)遷移來(lái)實(shí)現(xiàn)的。
在Volta架構(gòu)下面,我們新增了Access Counters的存取計(jì)數(shù)器這一特性。我們會(huì)對(duì)內(nèi)存訪問(wèn)的頻繁程度進(jìn)行計(jì)數(shù),只會(huì)對(duì)訪問(wèn)頻繁的內(nèi)存進(jìn)行遷移,從而進(jìn)一步提升內(nèi)存訪問(wèn)的效率。另外,基于NVLink連接的統(tǒng)一內(nèi)存管理,它支持對(duì)CPU與GPU的內(nèi)存進(jìn)行直接訪問(wèn)和cache(高速緩沖存儲(chǔ)器),但是目前支持這項(xiàng)功能的CPU實(shí)際上指的就是IBM的Power。同時(shí),它支持CPU與GPU之間的原子操作,以及地址轉(zhuǎn)換服務(wù)(ATS)功能,可以實(shí)現(xiàn)GPU訪問(wèn)CPU的分頁(yè)表,為GPU提供了對(duì)CPU內(nèi)存的完整訪問(wèn)權(quán)限。
接下來(lái)我們來(lái)了解一下多進(jìn)程服務(wù)——MPS。從Kepler的GP10架構(gòu)開始,我們就引入了MPS(基于軟件的多進(jìn)程服務(wù)),這種技術(shù)在當(dāng)時(shí)實(shí)際上是稱為HyperQ ,允許多個(gè) 流(stream)或者CPU的進(jìn)程同時(shí)向GPU發(fā)射Kernel函數(shù),結(jié)合為一個(gè)單一應(yīng)用程序的上下文在GPU上運(yùn)行,從而實(shí)現(xiàn)更好的GPU利用率。在單個(gè)進(jìn)程的任務(wù)處理,對(duì)GPU利用率不高的情況下是非常有用的。實(shí)際上,在Pascal架構(gòu)出現(xiàn)之后的MPS可以認(rèn)為是HyperQ的一種實(shí)現(xiàn)方式。
現(xiàn)在在Volta架構(gòu)下面,我們又將MPS服務(wù)進(jìn)行了基于硬件的優(yōu)化。MPS有哪些好處呢?首先可以增加GPU的利用率;其次可以減少多個(gè)CUDA進(jìn)程在GPU上的上下文空間。該空間主要是用于存儲(chǔ)和調(diào)度資源;最后可以減少GPU的上下文的切換。但MPS實(shí)際上也是有一些使用限制的,比方它現(xiàn)在僅支持Linux操作系統(tǒng),還要求GPU的運(yùn)算能力必須大于3.5。
下面用一個(gè)例子來(lái)比較使用MPS和不使用MPS有什么不同。
假設(shè)在CPU端有A、B、C三個(gè)進(jìn)程,每個(gè)進(jìn)程都要發(fā)射CUDA Kernel的任務(wù)到GPU上去,并且假設(shè)它們每一個(gè)獨(dú)立的任務(wù)對(duì)GPU利用率都不高。
在不使用MPS服務(wù)的情況下,A、B、C三個(gè)進(jìn)程實(shí)際上也可以同時(shí)把CUDA任務(wù)發(fā)射到GPU上去,但是默認(rèn)采用時(shí)間片輪轉(zhuǎn)調(diào)度的方式。首先第一個(gè)時(shí)間片,A任務(wù)被執(zhí)行,接著第二個(gè)時(shí)間片,執(zhí)行B任務(wù),第三個(gè)時(shí)間片, C任務(wù)將被執(zhí)行。時(shí)間片是依次進(jìn)行輪轉(zhuǎn)調(diào)度的,分別執(zhí)行A、B、C中的任務(wù)。
此時(shí)我們可以直觀地看到, 在GPU中,每一個(gè)時(shí)刻只有一個(gè)任務(wù)在執(zhí)行。這種情況下,CPU中的process(進(jìn)程)發(fā)射的CUDA任務(wù)對(duì)GPU的利用率是很低的!
接下來(lái)看一下基于Pascal架構(gòu)的MPS服務(wù)對(duì)任務(wù)的處理情況。從右側(cè)的框圖可以看到A、B、C三個(gè)進(jìn)程分別提交各自的任務(wù)到MPS的服務(wù)端,并在服務(wù)端整合為一個(gè)統(tǒng)一的上下文,并將三個(gè)任務(wù)同時(shí)發(fā)射到GPU中執(zhí)行,這就有效地提升了GPU的利用率。在Pascal架構(gòu)下,MPS是最多可以支持16個(gè)進(jìn)程或者說(shuō)16個(gè)用戶同時(shí)去提交任務(wù)的。
Volta架構(gòu)對(duì)MPS的實(shí)現(xiàn)做了進(jìn)一步的改進(jìn),主要是基于硬件加速的方式來(lái)實(shí)現(xiàn)。此時(shí)不同的進(jìn)程是可以直接穿過(guò)MPS服務(wù)器,提交任務(wù)到GPU的硬件,并且每個(gè)進(jìn)程客戶端有隔離的地址空間,這樣可以進(jìn)一步減少Launch(發(fā)射進(jìn)程)時(shí)帶來(lái)的延遲,也可以通過(guò)限制執(zhí)行資源配置來(lái)提升服務(wù)質(zhì)量。這里所說(shuō)提升服務(wù)質(zhì)量是指怎么樣平衡多個(gè)process(進(jìn)程)發(fā)射任務(wù)對(duì)計(jì)算和存儲(chǔ)資源的占用情況。比如我們現(xiàn)在可以去設(shè)定每一個(gè)process上下文,最多可以使用多少個(gè)資源。Volta下的MPS服務(wù)最多可以允許同時(shí)48個(gè)Client(客戶端)。
我們用一個(gè)benchmark(基準(zhǔn))來(lái)進(jìn)行比較,進(jìn)而了解MPS技術(shù)到底能帶來(lái)哪些好處。我們知道,對(duì)于單個(gè)任務(wù)占用GPU資源比較少的情形,MPS服務(wù)是非常有用的,比如在深度學(xué)習(xí)中做Inference(推理)應(yīng)用。相比Training(訓(xùn)練),Inference對(duì)于計(jì)算和存儲(chǔ)資源的要求比較小,這個(gè)時(shí)候會(huì)出現(xiàn)我們之前看到的情況,單一的Kernel任務(wù)是沒法有效利用GPU的。從上面的benchmark可以看到圖中最左側(cè)灰色的柱狀圖,在不使用MPS的情況下,Inference的吞吐性能很小;而中間綠色的柱狀圖,使用MPS允許多個(gè)Client同時(shí)發(fā)射計(jì)算任務(wù)到GPU,此時(shí)GPU吞吐性能直接提升了七倍;最后一個(gè)柱狀圖表示,如果我們使用MPS,并結(jié)合Batching操作,吞吐性能還能繼續(xù)再提升60%左右。由此可見,對(duì)于像Deep Learning的Inference這樣的應(yīng)用,MPS技術(shù)是可以有效地幫助我們優(yōu)化GPU利用率以及程序的吞吐性能。
Part
2
在上一節(jié)里面,我們主要是講解了Tesla V100的最新特性,包含計(jì)算性能和IO性能的提升,還有可編程性中針對(duì)Unified Memory和MPS技術(shù)的改進(jìn)。在第二節(jié),我會(huì)帶著大家一起來(lái)深度解析Tesla V100計(jì)算核心,我們稱之為GV100的V架構(gòu)的特性。
首先我們看到在GV100中每個(gè)流多處理器SM的單精度浮點(diǎn)計(jì)算單元個(gè)數(shù)是64個(gè),雙精度浮點(diǎn)計(jì)算單元格數(shù)是32個(gè),這和上一代Pascal的GP100架構(gòu)是完全相同的。但是,GV100中增加了INT32以及Tensor Core兩種計(jì)算單元。這在之前的GPU架構(gòu)中是沒有的。在Volta之前,整型運(yùn)算主要是由單精度浮點(diǎn)計(jì)算單元以及SFU單元來(lái)完成的。另外Tensor Core單元是專門為混合精度矩陣乘法而設(shè)計(jì)的。在后面我們還會(huì)詳細(xì)講Tensor Core。另外,值得注意的是,L1 cache和 Shared Memory再次被整合到了一起,二者各自的最大分配是96KB。
通過(guò)兩張框圖比較一下Pascal架構(gòu)與Volta架構(gòu)的L1 cache和Shared Memory有什么不同。首先,在Pascal架構(gòu)下,L1 Cache值固定是24kb,Shared Memory固定是64kb,而且二者是獨(dú)立的。并且Shared Memory的帶寬比較高,延遲比較小。而在Volta里,我們將二者整合在了一起,可以達(dá)到128kb,可以分別配制成32、48或者96三種模式,并且L1 cache和Shared Memory有著相同的帶寬和延遲的,這實(shí)際上等于極大地提升了L1 cache的大小以及性能。
通過(guò)這頁(yè)的benchmark來(lái)看一下這樣做到底有什么好處。我們知道在CUDA程序里Shared Memory是可以被程序員手動(dòng)控制的,并且可以利用它對(duì)全局內(nèi)存訪問(wèn)進(jìn)行優(yōu)化。而相比之下,L1 cache是不能被直接控制的,也就是說(shuō)它對(duì)程序員來(lái)講是透明的,但是有效地利用合并訪問(wèn)機(jī)制仍然可以利用L1 cache,從而極大提升內(nèi)存訪問(wèn)性能。我們從右側(cè)的柱狀圖可以看出,在Volta架構(gòu)下,L1 cache提升全體內(nèi)存訪問(wèn)的性能已經(jīng)接近Shared Memory的90%,極大提升了可編程性,使得我們?cè)谝恍﹫?chǎng)合可以不用手動(dòng)地使用Shared Memory進(jìn)行程序優(yōu)化也能達(dá)到比較好的性能!
接下來(lái)我們了解一下在Volta架構(gòu)下新增加的一個(gè)特性——獨(dú)立線程調(diào)度機(jī)制。
獨(dú)立線程調(diào)度機(jī)制可以這樣理解,主要是為線程與線程之間的通信和同步提供更加靈活的方式。
GPU中的線程執(zhí)行實(shí)際上是以WARP為基本單元執(zhí)行的,每個(gè)warp包含32個(gè)線程,這32個(gè)線程擁有共同的程序計(jì)數(shù)器,叫做Program Counter,還有Stack(堆棧)。無(wú)論程序是否出現(xiàn)分支,32個(gè)線程在同一個(gè)時(shí)刻都要執(zhí)行相同的指令。
比如上圖這樣的一段代碼,用現(xiàn)成ID號(hào)來(lái)定義程序的分支。我想讓0到3號(hào)執(zhí)行A、B指令,其他線程去執(zhí)行X、Y指令。執(zhí)行過(guò)程就像右圖中所示,首先0到3號(hào)線程會(huì)去執(zhí)行A、B指令,但同時(shí)其他線程會(huì)處于空跑的狀態(tài)。接下來(lái)其他線程去執(zhí)行X、Y指令,而0到3號(hào)線程處于空跑狀態(tài)。所以說(shuō)整個(gè)指令執(zhí)行完畢的時(shí)間,實(shí)際上是A、B、X、Y四個(gè)指令的執(zhí)行時(shí)間之和。這就是我們通常講的,在WARP內(nèi)出現(xiàn)分支時(shí)的執(zhí)行時(shí)間軸。
如果我需要在A指令與X指令執(zhí)行之后,進(jìn)行一個(gè)線程之間的同步通信,例如線程從0到3執(zhí)行指令B時(shí)需要利用指令X的執(zhí)行結(jié)果,而這種算法在Pascal架構(gòu)下是沒有辦法實(shí)現(xiàn)的。
在Volta架構(gòu)下,我們改變了這種線程調(diào)度機(jī)制。每一個(gè)線程可以有自己獨(dú)立的程序計(jì)數(shù)器PC以及堆棧,這使得每個(gè)線程可以獨(dú)立進(jìn)行線程的調(diào)度。
在我們所舉的例子里,執(zhí)行指令B之前需要新同步通信得到A和X的結(jié)果。我們可以在A指令和X指令執(zhí)行之后,進(jìn)行一個(gè)WARP內(nèi)的同步。我們?cè)贑UDA9里面新增加的一個(gè)函數(shù)——syncwarp,這樣就改變了指令的執(zhí)行順序??梢钥从疫叺膱D,此時(shí)變成了什么呢?首先線程0到3去執(zhí)行指令A(yù),然后其他的線程去執(zhí)行指令X,接下來(lái)0到3再去執(zhí)行指令B,最后是其他線程再去執(zhí)行指令Y。需要注意的是,此時(shí)在這個(gè)分支的外部,我們還需要再進(jìn)行顯式的syncwarp的線程同步的聲明。
接下來(lái)的小節(jié)里,我會(huì)向大家重點(diǎn)介紹Tensor Core,也是Volta架構(gòu)里面最重磅的特性。
Tensor Core實(shí)際上是一種矩陣乘累加的計(jì)算單元。矩陣乘累加計(jì)算在Deep Learning網(wǎng)絡(luò)層算法中,比如卷積層、全連接層等是最重要、最耗時(shí)的一部分。Tensor Core是專門針對(duì)Deep Learning的應(yīng)用而設(shè)計(jì)的專用ASIC單元,可以在一個(gè)時(shí)鐘周期內(nèi)實(shí)現(xiàn)兩個(gè)4×4矩陣的乘法以及與另一個(gè)4×4矩陣的加法。整個(gè)計(jì)算的個(gè)數(shù)就是我們?cè)谝粋€(gè)時(shí)鐘周期內(nèi)可以實(shí)現(xiàn)64次乘和64次加。
Tensor Core的矩陣乘累加運(yùn)算是一種混合精度運(yùn)算。我們前面提到的一個(gè)V100可以實(shí)現(xiàn)125 TLOPS的混合精度運(yùn)算,指的就是Tensor Core的混合精度。比如我們現(xiàn)在要計(jì)算D=A*B+C這樣的矩陣乘累加運(yùn)算,實(shí)際上這里面要求A、B兩個(gè)矩陣必須是半精度,即FP16的類型。而加法矩陣C還有結(jié)合矩陣D既可以是FP16類型,也可以是FP32類型。在Tensor Core中,這是需要大家注意的一個(gè)特性。
在具體實(shí)驗(yàn)過(guò)程中,Tensor Core以WARP為單元執(zhí)行。一個(gè)WARP中執(zhí)行的是一個(gè)16×16×16的矩陣乘累加運(yùn)算。這里就用到了剛才我們提到syncwarp線程之間進(jìn)行數(shù)據(jù)交換和同步的機(jī)制。
關(guān)于如何利用Tensor Core實(shí)現(xiàn)矩陣乘法的加速,我們提供兩種方式。第一種方式如右側(cè)圖中展示的代碼,在CUDA編程里實(shí)現(xiàn)Tensor Core的調(diào)用。我們?cè)谛碌腃UDA 9.0里增加了一個(gè)秘密空間——WMMA,可以調(diào)用其中的API去實(shí)現(xiàn)輸入矩陣的Load(加載),兩個(gè)矩陣做乘加,還有結(jié)構(gòu)矩陣的Store(存儲(chǔ))。而第二種方式相對(duì)比較簡(jiǎn)單,可以利用現(xiàn)成的庫(kù)函數(shù),最新版本的cuDNN7.0、CUDA9.0中的cuBLAs,TensorRT3.0都支持Tensor Core的調(diào)用。
Tensor Core的功能正在被集成到越來(lái)越多的深度學(xué)習(xí)框架里去,目前Tensor Core可以支持的深度學(xué)習(xí)框架有Caffe、Caffe2、MXNet、PyTorch、Theano、TensorFlow等,但CNTK、Chainer、Torch目前還不支持Tensor Core的調(diào)用,這點(diǎn)需要大家特別注意一下。
第二幅圖是一個(gè)benchmark的測(cè)試結(jié)果,左側(cè)的灰色的柱狀表示的是Tesla P100+CUDA8調(diào)用cuBLAS庫(kù),進(jìn)行混合精度的矩陣乘法得到的性能,而右側(cè)綠色的柱狀表示Tesla V100+CUDA9調(diào)用cuBLAS庫(kù),實(shí)現(xiàn)混合精度矩陣乘法的性能??梢钥吹?,Tesla V100相比于Tesla P100提升了9.3倍。
PART
3
我們進(jìn)入第三節(jié)的內(nèi)容。在第二節(jié)里面我們剖析了Tesla V100的V架構(gòu)特性,解釋了新的SIMT模型,獨(dú)立線程調(diào)度的概念,并重點(diǎn)說(shuō)明了Tensor Core的工作原理以及調(diào)用的方式。在第三節(jié)里面,我們會(huì)帶著大家了解Tesla V100在HPC中的一些應(yīng)用。
實(shí)際上排名前15的HPC商用軟件都可以支持GPU的加速,比如我們比較熟悉的ANSYS、Gaussian、VASP、AMBER。它們?cè)谖锢?、化學(xué)、生物、流體電磁等領(lǐng)域的設(shè)計(jì)、仿真、驗(yàn)證方面都起到至關(guān)重要的作用,可以極大提升工程師的工作效率,促進(jìn)產(chǎn)品創(chuàng)新。很多產(chǎn)品在GPU上的加速效果,相比于CPU可以達(dá)到幾倍甚至十幾倍的加速比。在未來(lái),Tesla V100 GPU將會(huì)為這些HPC軟件提供更好的加速效果。
讓我們來(lái)看一下Tesla V100 GPU在一些HPC算法中的benchmark測(cè)試,比如矩陣乘,快速傅里葉變換,QUDA等等。從圖中可以看到,相比Tesla P100的GPU,Tesla V100的平均加速比是在1.5倍左右。由于這些算法都是使用雙精度浮點(diǎn)計(jì)算,所以這個(gè)結(jié)果與Tesla V100的雙精度浮點(diǎn)計(jì)算能力方面比Tesla P100有50%的性能提升是直接相關(guān)的。
來(lái)關(guān)注幾組現(xiàn)在或者在不遠(yuǎn)的將來(lái)會(huì)大規(guī)模部署Tesla V100的GPU的數(shù)據(jù)中心。
第一個(gè)是美國(guó)的橡樹嶺國(guó)家實(shí)驗(yàn)室,它將在明年完成超過(guò)3400臺(tái)Tesla V100 GPU服務(wù)器的搭建,這臺(tái)超級(jí)計(jì)算機(jī)稱為Summit。相比于上一代超級(jí)計(jì)算機(jī)Titan(Titan,中文名泰坦,是在2012年建造的,今年的全球排名是第四名),Summit的浮點(diǎn)計(jì)算性能大概提升了10倍,也為各種HPC的應(yīng)用提供5到10倍的性能提升。
第二個(gè)是日本的國(guó)家先進(jìn)工業(yè)科學(xué)和技術(shù)研究所(AIST)將在其數(shù)據(jù)中心部署4352顆Tesla V100 GPU,實(shí)現(xiàn)37PetaFLOPS的雙精度浮點(diǎn)計(jì)算性能,以及大約0.55ExaFLOPS的混合精度計(jì)算性能。該超算中心將會(huì)為一些世界級(jí)的AI研發(fā)提供創(chuàng)新平臺(tái),以使得AI的研發(fā)成果能夠更快地部署到商業(yè)和社會(huì)應(yīng)用中。
第三個(gè)是NVIDIA超級(jí)計(jì)算器——SARURNV。SARURNV將在原有的基礎(chǔ)上進(jìn)行升級(jí)改造。去年,SARURNV由124臺(tái)DGX-1服務(wù)器搭建而成,每臺(tái)DGX-1的服務(wù)器搭載了8顆Tesla P100 GPU,這臺(tái)超級(jí)計(jì)算機(jī)曾經(jīng)在世界Top500綠能計(jì)算機(jī)中排名第一。在升級(jí)之后,SARURNV將會(huì)由660臺(tái)DGX-1V服務(wù)器組成,每臺(tái)DGX-1V服務(wù)器會(huì)由8顆Tesla V100 GPU組成。
全世界越來(lái)越多的超算中心開始使用GPU計(jì)算集群代替原有的CPU計(jì)算集群,主要是因?yàn)镚PU的核心價(jià)值是可以為客戶大幅度的節(jié)省資金。從右邊的兩個(gè)餅圖可以看到,相比CPU計(jì)算集群,GPU計(jì)算集群會(huì)把絕大部分的成本花費(fèi)在購(gòu)買計(jì)算力上,而CPU的集群有很多的成本花費(fèi)在建設(shè)基礎(chǔ)設(shè)施、網(wǎng)絡(luò)、機(jī)柜等花銷上。從左側(cè)的benchmark的對(duì)比看到,假設(shè)有18臺(tái)GPU服務(wù)器,每臺(tái)是由2顆CPU和4顆V100的GPU,同等計(jì)算力的情況下,對(duì)于不同的算法,需要多少CPU的計(jì)算集群。
RTM算法需要360顆CPU放入五個(gè)機(jī)柜,VASP的算法需要1152顆CPU放入14個(gè)機(jī)柜。而對(duì)于ResNet-50深度學(xué)習(xí)訓(xùn)練模型來(lái)說(shuō),需要有1764顆CPU去實(shí)現(xiàn)同等計(jì)算力。相比而言,從成本、功耗方面,GPU集群擁有巨大的優(yōu)勢(shì)!
PART
4
在第四部分,我們?cè)賮?lái)看一下Tesla V100 GPU在加速深度學(xué)習(xí)應(yīng)用方面會(huì)有哪些提升。在這一節(jié)里面我也會(huì)簡(jiǎn)單的跟大家介紹一下幾個(gè)Tesla V100 GPU在深度學(xué)習(xí)開發(fā)生態(tài)中比較重要的軟件SDK。
提到Deep Learning(深度學(xué)習(xí)),大家一定會(huì)想到GPU。我認(rèn)為GPU在Deep Learning方面如此受歡迎主要有兩方面原因,第一是GPU在硬件性能上擁有強(qiáng)大的浮點(diǎn)計(jì)算能力。無(wú)論是對(duì)于訓(xùn)練端,還是推理端來(lái)講,GPU相比CPU都有巨大的性能優(yōu)勢(shì)。并且,NVIDIA每年推出新的GPU產(chǎn)品在計(jì)算性能上也在不斷地提升。由于GPU產(chǎn)品多樣化的特征,無(wú)論是針對(duì)云端的數(shù)據(jù)中心,還是自動(dòng)駕駛汽車或者嵌入式智能機(jī)器人,我們都有對(duì)應(yīng)的GPU產(chǎn)品可以被用戶所選擇。因此從訓(xùn)練端到推理端的解決方案方面,GPU有著天然優(yōu)勢(shì)!
對(duì)于一個(gè)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型,我們當(dāng)然希望在做推理時(shí),可以最小化導(dǎo)入模型、修改模型、執(zhí)行模型。如果在訓(xùn)練端使用GPU處理器,并在推理端使用同樣架構(gòu)的GPU處理器,并且實(shí)現(xiàn)比較高的吞吐和低延遲,當(dāng)然是最好不過(guò)的選擇!
GPU在Deep Learning方面受歡迎的第二個(gè)原因,它擁有一套非常強(qiáng)大且完整的生態(tài)體系。無(wú)論是對(duì)計(jì)算機(jī)視覺、語(yǔ)音識(shí)別和翻譯,或者是自然語(yǔ)言處理方面的應(yīng)用,我們都可以使用GPU進(jìn)行加速。目前所有主流的深度學(xué)習(xí)框架,像Caffe、TensorFlow、MXNet、CNTK等都支持GPU的加速。對(duì)使用這些框架的用戶來(lái)講,這種加速是透明的,通常我們只需要在執(zhí)行腳本里面加入類似于GPU enable的命令就可以了。
那么,在底層實(shí)現(xiàn)上,NVIDIA提供了大量SDK去支持上層應(yīng)用或者框架,來(lái)最簡(jiǎn)化、最高效地幫助用戶實(shí)現(xiàn)GPU加速Deep Learning的訓(xùn)練或推理的過(guò)程。這些SDK包含了像標(biāo)準(zhǔn)線性代數(shù)庫(kù)cuBLAS、深度學(xué)習(xí)算法庫(kù)cuDNN、多GPU的集合通信庫(kù)NCCL以及推理加速引擎Tensor RT等。我會(huì)一一地向大家介紹。
先來(lái)看一下在Training(訓(xùn)練)端的SDK。第一個(gè)是cuBLAS庫(kù),cuBLAS是標(biāo)準(zhǔn)線性代數(shù)庫(kù)在GPU上實(shí)現(xiàn)的一種封裝。大家可以看到這幅圖的兩個(gè)benchmark測(cè)試結(jié)果,我們分別比較了Tesla P100和Tesla V100在單精度浮點(diǎn)計(jì)算矩陣乘法和混合精度浮點(diǎn)計(jì)算矩陣乘法方面的性能。
左側(cè)的單精度浮點(diǎn)計(jì)算矩陣乘法,可以看到不同矩陣大小得到加速比實(shí)際上是不一樣的,最大加速比可以達(dá)到1.8倍左右,而平均的加速比是在1.5倍。這跟Tesla V100比Tesla P100在單精度的浮點(diǎn)計(jì)算性能上提升50%的結(jié)果是相吻合的。
右側(cè)的混合精度浮點(diǎn)計(jì)算,由于Tesla V100可以使用Tensor Core進(jìn)行加速,所以最大的加速比達(dá)到了9.3倍。因此Tensor Core在矩陣乘法方面的性能優(yōu)勢(shì)可見一般。
在Training方面第二個(gè)比較重要的庫(kù)是cuDNN。cuDNN是深度學(xué)習(xí)基礎(chǔ)模塊加速庫(kù),可以支持所有主流的深度學(xué)習(xí)框架,比如Caffe、Tensorflow、CNTK、Theano、PyTorch等,這些基礎(chǔ)模塊指的是深度學(xué)習(xí)框架中常用的一些layer(神經(jīng)網(wǎng)絡(luò)層)操作,比如卷積、LSTM、全連接、Pooling(池化層)等。那么cuDNN的優(yōu)勢(shì)有什么呢?首先它將layer專門針對(duì)GPU進(jìn)行了性能調(diào)優(yōu);第二是cuDNN以調(diào)用庫(kù)函數(shù)的方式進(jìn)行神經(jīng)網(wǎng)絡(luò)設(shè)計(jì),能夠大大節(jié)省開發(fā)者的時(shí)間,讓大家可以將時(shí)間和精力集中在神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)和實(shí)現(xiàn),而不是去進(jìn)行GPU代碼的開發(fā)和性能調(diào)優(yōu)。
在這個(gè)benchmark中大家都可以看到,分別使用了八顆不同架構(gòu)的GPU服務(wù)器對(duì)GoogLeNet網(wǎng)絡(luò)進(jìn)行訓(xùn)練的性能對(duì)比,大家可以只看最后兩個(gè)綠色的柱狀圖,分別代表的是八顆P100的DGX-1服務(wù)器以及八顆Tesla V100的DGX-1V服務(wù)器。大家可以看到二者的性能差異大概是在2.5倍左右,也就是我們?cè)赥esla V100上進(jìn)行Deep Learning 訓(xùn)練時(shí)的性能提升水平。
接下來(lái)介紹的SDK是NCCL。NCCL表示的是NVIDIA集合通信庫(kù)的一個(gè)簡(jiǎn)稱。它是多GPU之間常用的一些集合通信算法,比方說(shuō)all-reduce、all-gather以及broadcast等等,它能夠自動(dòng)檢測(cè)GPU之間的拓?fù)溥B接關(guān)系,再結(jié)合通信采用最佳的路徑實(shí)現(xiàn)數(shù)據(jù)IO。在最新的NCCL 2.0版本里面,增加了對(duì)多服務(wù)器節(jié)點(diǎn)的支持,在NCCL 1.0版本里面我們只是支持單節(jié)點(diǎn)內(nèi)的多GPU,但目前NCCL 2.0可以支持多節(jié)點(diǎn)的,并且可以同時(shí)支持PCle和NVLink連接方式。大家從右側(cè)的benchmark可以看到,從單節(jié)點(diǎn)一顆GPU到單節(jié)點(diǎn)八顆GPU,再到兩個(gè)節(jié)點(diǎn)16顆GPU,以及四個(gè)節(jié)點(diǎn)32顆GPU,使用NCCL實(shí)現(xiàn)的Deep Learning 訓(xùn)練的吞吐性能幾乎是線性增長(zhǎng)的,其實(shí)這是非常難達(dá)到的一個(gè)性能。而目前NCCL 2.0最多可以支持八個(gè)服務(wù)器節(jié)點(diǎn)的并行。
接下來(lái)要給大家介紹一個(gè)工具,叫做DIGITS。DIGITS是一個(gè)基于WEB UI交互式的深度學(xué)習(xí)訓(xùn)練系統(tǒng)。對(duì)于深度學(xué)習(xí)的初學(xué)者或數(shù)據(jù)科學(xué)家來(lái)說(shuō),這個(gè)工具能夠?yàn)樗麄兲峁O大的便利性,主要有四個(gè)方面的功能。
1、進(jìn)行數(shù)據(jù)的預(yù)處理。比如說(shuō)我可以把一些原始的jpeg格式的圖片轉(zhuǎn)成lmdb或者leveldb這樣的數(shù)據(jù)庫(kù)導(dǎo)入到DIGITS。
2、我可以利用DIGITS去配置我的網(wǎng)絡(luò)模型,比如我去選某個(gè)Deep Learning的框架,某一個(gè)標(biāo)準(zhǔn)的模型,比如AlexNet、GoogLeNet等,或者自定義一個(gè)網(wǎng)絡(luò)模型,然后去設(shè)置模型訓(xùn)練參數(shù),以及要使用哪些GPU。
3、可以實(shí)時(shí)動(dòng)態(tài)地監(jiān)控整個(gè)訓(xùn)練過(guò)程。當(dāng)導(dǎo)入數(shù)據(jù)和配置網(wǎng)絡(luò)模型完成后,就可以點(diǎn)擊按鈕開始訓(xùn)練,在訓(xùn)練過(guò)程中可以實(shí)時(shí)動(dòng)態(tài)地去監(jiān)控loss和accuracy這樣的參數(shù)曲線以及GPU、 CPU的利用率,包括顯存和內(nèi)存的使用情況都可以一目了然。
4、訓(xùn)練完成之后,我們還可以使用保存的訓(xùn)練好的model的參數(shù)進(jìn)行一些測(cè)試,包括網(wǎng)絡(luò)層可視化這樣的工作。目前DIGITS支持的深度學(xué)習(xí)框架包括了Caffe、PyTorch和TensorFlow,支持的算法主要是包含了圖像分類、圖像分割、目標(biāo)檢測(cè)。
下面我會(huì)給大家展示幾組Tesla V100在不同的Deep Learning的framework上,針對(duì)不同的網(wǎng)絡(luò)模型的一些benchmark測(cè)試結(jié)果,他們對(duì)比的都是八顆Tesla V100以及八顆P100的性能加速。左邊展示的是Tesla V100的PCIe卡的性能加速,右邊展示的是Tesla V100的NVLink卡的性能加速。大家可以挑選自己使用的framework測(cè)試結(jié)果來(lái)看,我就不一一介紹了。針對(duì)不同的framework,實(shí)際上Tesla V100的加速效果確實(shí)會(huì)略有不同,需要向大家說(shuō)明的是,這些framework測(cè)試中包括Caffe、Caffe2、TensorFlow、MXNet以及PyTorch,他們都支持Tensor Core,但是目前CNTK還不支持Tensor Core。
接下來(lái)我們來(lái)看一下在Inference(推理)端的SDK的工具。首先是TensorRT,TensorRT是可編程的處理加速器,主要是用來(lái)部署神經(jīng)網(wǎng)絡(luò)到Inference端之前,對(duì)于網(wǎng)絡(luò)進(jìn)行優(yōu)化加速,來(lái)提高程序的吞吐量以及降低延遲。TensorRT理論上可以支持所有主流的深度學(xué)習(xí)框架,目前最新的版本是3.0版,可以支持Caffe 模型的直接導(dǎo)入,還有就是TensorFlow模型轉(zhuǎn)換為UFF格式后的導(dǎo)入。對(duì)于其他的framework,需要用戶手動(dòng)的去調(diào)用一些API進(jìn)行模型和參數(shù)的導(dǎo)入,而且在TensorRT 3.0里面還加入了對(duì)Python接口的支持,原來(lái)我們是只支持C++的,目前加入了Python,這樣使得導(dǎo)入網(wǎng)絡(luò)模型可以變得更加容易一些。
TensorRT 能夠幫助我們做哪些網(wǎng)絡(luò)模型優(yōu)化呢?大家可以看到右邊這個(gè)圖里面有五大優(yōu)化方面,這里面著重介紹兩個(gè),第一個(gè)叫做權(quán)重系數(shù)和激活值的精度校準(zhǔn),我們知道在Training端,一般計(jì)算精度是FP32單精度的。但是在做Inference部署的時(shí)候,在整個(gè)網(wǎng)絡(luò)精度變化不大的情況下,我們更關(guān)心延遲和吞吐。實(shí)際上這也是降低計(jì)算精度的一個(gè)很常用的方法。比如我們可以將FP32的精度降為FP16或者INT8,由于量化范圍縮小,我們只需要在量化過(guò)程中做一些動(dòng)態(tài)的校準(zhǔn),TensorRT 就可以自動(dòng)幫助我們完成校準(zhǔn)過(guò)程,并且精度損失縮到最小化。
第二個(gè)叫做網(wǎng)絡(luò)層的合并,在網(wǎng)絡(luò)模型里,通常一個(gè)layer(網(wǎng)絡(luò)層)就需要發(fā)射一次Kernel,而在layer比較小的情況下,這種發(fā)射的效率是比較低的,因?yàn)槊看蜬ernel發(fā)射是需要耗時(shí)的,并且對(duì)GPU的利用率也不會(huì)很高。這時(shí)TensorRT 就可以自動(dòng)地去檢測(cè)一些可以合并的來(lái)源,把它們合并成一個(gè)比較大的Kernel發(fā)射,減少Kernel發(fā)射并且提升GPU的利用率。關(guān)于其他的一些優(yōu)化方法,大家可以再參考TensorRT 用戶手冊(cè)進(jìn)行詳細(xì)的了解。
TensorRT的部署流程可以分成兩部分。首先是向TensorRT 導(dǎo)入訓(xùn)練好的網(wǎng)絡(luò)模型、參數(shù),輸入一組測(cè)試集數(shù)據(jù),這個(gè)數(shù)據(jù)集不用太大。在TensorRT 啟動(dòng)之后,會(huì)根據(jù)我們剛才所說(shuō)的幾大優(yōu)化方式依次對(duì)網(wǎng)絡(luò)模型進(jìn)行優(yōu)化,對(duì)于規(guī)模不大的網(wǎng)絡(luò),這個(gè)過(guò)程可能需要耗費(fèi)幾分鐘的時(shí)間。在執(zhí)行完成之后,它會(huì)輸出一個(gè)優(yōu)化策略,如上圖所示的Plan。這時(shí)我們可以選擇將這個(gè)優(yōu)化策略以序列化的方式導(dǎo)出到磁盤文件進(jìn)行存儲(chǔ),這樣,這個(gè)策略文件就可以被復(fù)制以及移植到不同的設(shè)備端來(lái)使用。接下來(lái)我們就可以拿著這個(gè)優(yōu)化策略文件連通TensorRT 的引擎,一起部署到線上服務(wù)端。
我們?cè)谏厦孢@幅圖里給出了兩組TensorRT 3.0 Performance的benchmark,左側(cè)的benchmark是對(duì)一個(gè)CNN網(wǎng)絡(luò)ResNet-50的測(cè)試結(jié)果,大家可以先看第二和第四個(gè)柱狀圖,這里面是比較了使用V100 加TensorFlow,也就是不用TensorRT做優(yōu)化 ,然后直接做Inference,此時(shí)的吞吐量是305,在使用TensorRT 加速以后,吞吐量提升到5707,大概是20倍的性能提升。另外,大家再看第三和第四個(gè)柱狀圖,可以看到同樣使用FP16的計(jì)算精度,Tesla V100比Tesla P100提升了大概3倍多的性能,這主要得益于Tensor Core的加速。
右邊的benchmark是對(duì)一個(gè)RNN網(wǎng)絡(luò)OpenNMT的測(cè)試結(jié)果。大家可以先來(lái)看二和四這兩個(gè)柱狀圖,使用Tesla V100+Torch直接做Inference,這時(shí)候吞吐量是26.16,我們用TensorRT 加速以后,吞吐量直接提升到了541,加速比可以達(dá)到20倍以上。我們?cè)賮?lái)看第三和第四,比較一下Tesla P100和Tesla V100的加速,可以看出Tesla V100大概比Tesla P100加速比在1.5倍左右,這主要是因?yàn)槲覀冊(cè)谠摼W(wǎng)絡(luò)模型里使用FP32進(jìn)行Inference,無(wú)法使用Tensor Core進(jìn)行加速,實(shí)際上TensorRT 目前對(duì)RNN網(wǎng)絡(luò)只能支持FP32的精度,還不能支持到FP16。
在Inference端的最后一個(gè)SDK的軟件我們叫做DeepStream,DeepStream主要是針對(duì)于智能視頻分析的一個(gè)工具,智能視頻分析我們稱之為IV。實(shí)際上IV的工作流程主要是包含三個(gè)部分,首先是做視頻解碼,然后進(jìn)行圖片的預(yù)處理,比如Reset(重置)或顏色空間的轉(zhuǎn)換等,最后是基于神經(jīng)網(wǎng)絡(luò)的推理操作。GPU有獨(dú)立的編解碼單元,并且可以支持多種編解碼格式。我們?cè)谡{(diào)用DeepStream SDK的時(shí)候是可以將視頻的解碼以及Inference(推理)的功能集中在一起,直接利用GPU上的NVdata單元做解碼,利用Cuda core做Inference,方便開發(fā)者使用,同時(shí)提升處理的效率。
從右邊的benchmark中,大家可以看到在測(cè)試環(huán)境為720P的視頻解碼里面采用GoogLeNet做神經(jīng)網(wǎng)絡(luò)的分類預(yù)測(cè),這個(gè)時(shí)候我們可以用DeepStream SDK搭載一張P4的GPU服務(wù)器,而它的視頻流的處理能力大概相當(dāng)于13臺(tái)E5 CPU雙路服務(wù)器,因此整個(gè)的性能提升還是非??捎^的。
PART
5
前面四個(gè)部分主要是給大家介紹了關(guān)于Volta架構(gòu)的解析以及在HPC和Deep Learning中的一些應(yīng)用。最后一部分給大家介紹Volta產(chǎn)品家族。首先針對(duì)Deep Learning的應(yīng)用,如果只做Training或者既需要做Training,又需要做Inference這樣的場(chǎng)景,Tesla V100肯定是最好的選擇,因?yàn)槲覀兇钶d了最新的Tensor Core,可以支持Training和Inference的加速。對(duì)于NVLink的應(yīng)用,比如Transcoding + Inference,實(shí)際上我們的Tesla P4這款GPU是最合適的,它的功耗很低,有50瓦和75瓦兩款產(chǎn)品,同時(shí)也能夠提供最佳的計(jì)算性能和功耗比。
對(duì)于中間的兩款Tesla V100的GPU ,NVLink版本以及PCIe版本,其實(shí)沒有非常嚴(yán)格的界限,要根據(jù)客戶的實(shí)際應(yīng)用進(jìn)行選擇。一般來(lái)說(shuō)如果算法里需要在GPU之間頻繁進(jìn)行數(shù)據(jù)交換,那么PCIe的傳輸帶寬可能會(huì)成為瓶頸,如果這個(gè)時(shí)候使用NVLink版本的GPU就能達(dá)到比較好的效果,否則PCIe版本的V100是更通用的選擇,畢竟二者在計(jì)算性能上的差異并不大,而且支持PCIe版本的GPU 服務(wù)器是比較多的!
另外NVIDIA在去年推出了深度學(xué)習(xí)一體機(jī)——DGX系列產(chǎn)品。目前DGX有兩款產(chǎn)品可供選擇,分別叫做DGX Station和DGX-1 Server,它們?yōu)樾枰焖俨渴鹕疃葘W(xué)習(xí)研發(fā)環(huán)境的客戶提供了一種最佳的選擇。下面我們分別來(lái)看一下這兩款產(chǎn)品的技術(shù)細(xì)節(jié)。
DGX-1的第一代產(chǎn)品是NVIDIA在去年推出的。上一代產(chǎn)品里面搭載了八顆Tesla P100的GPU。在今年美國(guó)GTC大會(huì)上,我們陸續(xù)推出了DGX的升級(jí)版,也叫做DGX-1V的服務(wù)器,它搭載了八顆Tesla V100GPU,它的混合精度計(jì)算能力可以達(dá)到1PFLOPS,這是由每一個(gè)V100由125個(gè)TFLOPS乘以八顆Tesla V100計(jì)算得到的。而它的NVLink帶寬最高可以達(dá)到300GB每秒。這相比上一代產(chǎn)品有顯著提高,剛才我們?cè)谶@部分也給大家做了詳細(xì)的介紹。另外,在其他特性上,比如搭載了兩顆Xeon CPU,8TB RAID 0磁盤陣列,4路IB,2路萬(wàn)兆網(wǎng)接口,這些技術(shù)跟上一代的產(chǎn)品都是一樣的。
今年我們又推出了DGX家族的一個(gè)新成員,叫做DGX Station,也就是DGX工作站,搭載了四顆Tesla V100的GPU,GPU之間采用的是NVLink互聯(lián),它的混合計(jì)算精度可以達(dá)到500TFLOPS,DGX Station最大的亮點(diǎn)是采用了靜音水冷設(shè)計(jì),它的噪音水平小于35db,非常適合研發(fā)人員將它放在辦公室桌面端進(jìn)行使用,不需要放在機(jī)房里面。
DGX產(chǎn)品家族的亮點(diǎn)不止于剛才我們提到它具有非常強(qiáng)大的硬件配置性能,同時(shí)它還向客戶提供了非常豐富的軟件棧產(chǎn)品。這些軟件棧主要指一些基于Docker 鏡像的封裝,比如針對(duì)深度學(xué)習(xí)主流的學(xué)習(xí)框架Caffe、TensorFlow、MXNet等,我們都會(huì)向客戶提供一些Docker 的鏡像,而且這些鏡像是NVIDIA的工程師專門針對(duì)DGX硬件做了優(yōu)化,可以實(shí)現(xiàn)比普通的GPU服務(wù)器環(huán)境更快的性能,同時(shí)購(gòu)買DGX的用戶,它的鏡像可以在NVIDIA的官方網(wǎng)站上進(jìn)行更新,可以免費(fèi)下載使用。
今天整個(gè)公開課的內(nèi)容就是這些,也歡迎大家來(lái)使用我們目前宇宙最快的加速器V100。謝謝大家。
提問(wèn)環(huán)節(jié)
Q1
胡遠(yuǎn)武-城市生活(北京)資訊有限公司-架構(gòu)師
1、OpenGL和OpenCL能否集成,如果能集成,他的主要優(yōu)勢(shì)是什么?
2、GPU取代CPU的前景如何?
3、提升GPU利用率的關(guān)鍵點(diǎn)是哪些?
A1
羅華平(英偉達(dá)中國(guó)首席解決方案架構(gòu)師):
1、關(guān)于第一個(gè)問(wèn)題,在很多年之前Open CL可以去調(diào)用Open GL的API,就是說(shuō)Open CL可以直接使用Open GL的庫(kù)函數(shù)來(lái)對(duì)OpenGL圖形信息進(jìn)行處理計(jì)算,這個(gè)技術(shù)在Cuda里也早已實(shí)現(xiàn)。那么它到底有哪些優(yōu)勢(shì)呢?我覺得現(xiàn)在用Open CL的人并不太多,雖然說(shuō)Open CL是一個(gè)跨平臺(tái)的軟件,但是Open CL目前面臨的最大問(wèn)題就是它雖然是跨平臺(tái)的,但是針對(duì)不同的平臺(tái),可能需要進(jìn)行不同的性能優(yōu)化,所以O(shè)penCL目前并沒有得到一個(gè)很好的推廣!另外一個(gè)方面就是Open CL是由一個(gè)聯(lián)盟組織來(lái)規(guī)范能夠加入哪些新的功能,因此OpenCL的發(fā)展就會(huì)受制于各個(gè)廠家對(duì)性能的一些要求等,因而發(fā)展比較慢?,F(xiàn)在在異構(gòu)計(jì)算里Cuda已經(jīng)是使用最普遍的一個(gè)并行編程平臺(tái),也可以說(shuō)Cuda已經(jīng)是業(yè)界的一個(gè)事實(shí)標(biāo)準(zhǔn)。使用Cuda,特別是在NVIDIA GPU上,可以獲得一個(gè)最高的性能。雖然Open CL可以跨平臺(tái),但是目前確實(shí)沒有Cuda使用的那么快,因此它有什么優(yōu)勢(shì),我現(xiàn)在確實(shí)也說(shuō)不上來(lái)。在并行計(jì)算領(lǐng)域,我們還是推薦Cuda或者加OpenGL,來(lái)處理計(jì)算和圖形的任務(wù)。
2、可以說(shuō)GPU的出現(xiàn)不是取代CPU的,GPU是對(duì)CPU的一個(gè)補(bǔ)充。GPU離開CPU是不能單獨(dú)工作的,所以GPU需要一個(gè)x86的CPU或者是IBM的Power CPU來(lái)做運(yùn)行操作系統(tǒng),運(yùn)行整個(gè)程序只是把需要并行計(jì)算的部分我放到GPU上來(lái)加速進(jìn)行,所以GPU不會(huì)取代CPU,同時(shí)GPU離開CPU也是不能工作的。
吳磊:3、實(shí)際上對(duì)于GPU利用率的提升,我們可以分兩方面來(lái)講:第一個(gè)方面,我們剛才在介紹MPS的時(shí)候也介紹到了,如果我們現(xiàn)在發(fā)射的Kernel的計(jì)算量不大,那么這時(shí)候我們可以采用多Kernel并行發(fā)射的方式,比如利用MPS技術(shù),使得多個(gè)Kernel同時(shí)發(fā)射到GPU中去,提升GPU的利用率;另一方面,如果單一的Kernel計(jì)算量就很大,可以把GPU的資源幾乎占滿,對(duì)于這種情況下我們就需要去考慮基于GPU以及基于Cuda的一些優(yōu)化方法。比如我們知道常用的一些優(yōu)化方法有:基于存儲(chǔ)的優(yōu)化、基于指令的優(yōu)化以及基于延遲的優(yōu)化。具體的要去利用一些工具,比如Visual Profiler 以及其它的工具進(jìn)行性能的剖析,然后在我們知道性能受限的因素之后,再進(jìn)行一個(gè)具體的優(yōu)化。
Q2
管偉-千丁互聯(lián)-自然語(yǔ)言處理工程師
做深度學(xué)習(xí)的最低配置方面,最小能出效果的數(shù)據(jù)量是多少?
A2
羅華平:這個(gè)問(wèn)題說(shuō)實(shí)話不是特別好的回答,現(xiàn)在做深度學(xué)習(xí)主要是讓訓(xùn)練速度快,訓(xùn)練時(shí)間越短越好。從我們訓(xùn)練的GPU平臺(tái)上來(lái)講,現(xiàn)在已經(jīng)從標(biāo)準(zhǔn)的四卡服務(wù)器發(fā)展到八卡服務(wù)器,且八卡服務(wù)器目前也受到了大家普遍的接受,可以說(shuō)在明年將成為訓(xùn)練平臺(tái)的一個(gè)主要配置。至于多少數(shù)據(jù)量才能出效果,要根據(jù)用戶的神經(jīng)網(wǎng)絡(luò)模型來(lái)決定的,說(shuō)實(shí)話,我們現(xiàn)在也不好確切回答,可以看到,做圖像和做語(yǔ)言處理需要的數(shù)據(jù)量也是不一樣的,還是需要根據(jù)具體的神經(jīng)網(wǎng)絡(luò)的模型來(lái)看待,這是我的一點(diǎn)點(diǎn)看法!
Q3
董瑞賓-北京瑞遠(yuǎn)機(jī)器人-視覺工程師
NVIDIA有沒有較低功耗的嵌入式平臺(tái),可以快速部署本地化處理深度學(xué)習(xí)的成熟的解決方案?
A3
羅華平:NVIDIA專門有一條產(chǎn)品線叫Tegra,這是NVIDIA嵌入式的一個(gè)解決方案。目前我們NVIDIA的嵌入式平臺(tái)有Jetson TX1和TX2兩個(gè)產(chǎn)品,這兩個(gè)產(chǎn)品的功耗非常低,大概是10W左右的功耗,但是計(jì)算力非常強(qiáng),它實(shí)際上是一個(gè)SoC,是ARM + GPU這樣一個(gè)架構(gòu),能夠自己獨(dú)立運(yùn)行操作系統(tǒng),獨(dú)立做很多計(jì)算。目前如果你在大的GPU上訓(xùn)練好的神經(jīng)網(wǎng)絡(luò),可以直接部署在我們的TX1和TX2去做線上的推理,像無(wú)人機(jī)、機(jī)器人甚至一些自動(dòng)駕駛的方案都在采用我們TX1和TX2的解決方案。
Q4
王武峰-七彩虹科技-技術(shù)經(jīng)理
目前DL各種框架(framework)比較繁多,NV是否會(huì)認(rèn)為這種情況會(huì)持續(xù)下去?
A4
吳磊:我們都知道現(xiàn)在做Deep Learning有非常多的framework和非常多的方法。不同的framework實(shí)際上是針對(duì)一些不同的應(yīng)用場(chǎng)景,比如caffe,它主要是針對(duì)CNN網(wǎng)絡(luò)做圖像方面的一些應(yīng)用。對(duì)于“這種情況是否會(huì)持續(xù)下去”的問(wèn)題,我覺得從NVIDIA角度來(lái)說(shuō),沒有辦法去回答這個(gè)問(wèn)題。但是我們知道現(xiàn)在GPU是支持所有主流的framework的加速,而且還在進(jìn)一步擴(kuò)大這個(gè)名單,同時(shí)NVIDIA的工程師會(huì)和這些framework的工程師一起去優(yōu)化這些規(guī)模,去實(shí)現(xiàn)更好的加速效果。
Q5
snow-AMD-高級(jí)軟件工程師
對(duì)于DL 的各種frameworks caffe/tensorflow/mxNet/torch, cuda 版本,cudnn, cublas,是否只有采用一個(gè)版本就能做到所有framework 都適用,可以達(dá)到兼容性。
A5
羅華平:確實(shí)是這樣,NVIDIA的目的是通過(guò)同一個(gè)版本的cuDNN、cuBLAS和Cuda來(lái)支持所有的framework框架,這是NVIDIA的目標(biāo)。可能每個(gè)框架的適配時(shí)間會(huì)略微有點(diǎn)差別。比如說(shuō)我們現(xiàn)在最新的cuDNN版本是7.1,再過(guò)上一段時(shí)間,所有的框架都會(huì)引入7.1,這是我們的目標(biāo),當(dāng)然時(shí)間上確實(shí)還會(huì)有點(diǎn)差異,比如TensorFlow會(huì)快一點(diǎn),Caffe會(huì)慢一點(diǎn)等這些情況也會(huì)出現(xiàn)。但是總體來(lái)講,我們一個(gè)版本的這些庫(kù)都會(huì)支持所有的框架。
Q6
劉博-北京思普科股份有限公司-AI工程師
深度學(xué)習(xí)平臺(tái)的模型部署一般具體如何實(shí)施,還有就是都需要注意哪些?
A6
羅華平:這個(gè)問(wèn)題可以這么來(lái)看,NVIDIA剛才也介紹了,可以提供一個(gè)端到端的解決方案,從訓(xùn)練到線上的推理,特別是在訓(xùn)練平臺(tái)上,我們有自己的一體機(jī)。DGX系列有DGX-1的服務(wù)器以及DGX Station工作站系列,這個(gè)系列最大好處就是已經(jīng)預(yù)裝了操作系統(tǒng),預(yù)裝了針對(duì)GPU優(yōu)化好的各種框架,Caffe、TensorFlow等等。這樣用戶部署起來(lái)就會(huì)非常簡(jiǎn)單,只需要簡(jiǎn)單的開啟設(shè)施就可以選擇你使用的深度學(xué)習(xí)框架,比如Caffe、TensorFlow等等,通過(guò)DOC的方式,只需把這個(gè)框架拉下來(lái),就可以進(jìn)行深度學(xué)習(xí)。
在訓(xùn)練的時(shí)候選擇什么樣的網(wǎng)絡(luò)模型,要根據(jù)自己的實(shí)際情況來(lái)看,可以選擇Google Net、AlexNet等網(wǎng)絡(luò)模型上進(jìn)行一些修改來(lái)適應(yīng)你的深度學(xué)習(xí)目標(biāo)。同時(shí)需要準(zhǔn)備相應(yīng)的數(shù)據(jù)才能夠去進(jìn)行訓(xùn)練。
除此之外,我們還提供一個(gè)叫做DIGITS,基于web UI的圖形訓(xùn)練平臺(tái),它也可以在DGX服務(wù)器上運(yùn)行。它可以通過(guò)圖形界面的方式來(lái)選擇你的神經(jīng)網(wǎng)絡(luò)模型,選擇你的數(shù)據(jù),你可以采用幾個(gè)GPU來(lái)做訓(xùn)練,非常方便,訓(xùn)練的過(guò)程也可以通過(guò)圖形化的方式顯示出來(lái)。對(duì)于在訓(xùn)練這一端,如果用戶對(duì)于這些框架的部署不是特別熟悉,建議你采用DGX一體機(jī)來(lái)做深度學(xué)習(xí)的訓(xùn)練。對(duì)于訓(xùn)練好的模型,可以用我們的TensorRT來(lái)進(jìn)行優(yōu)化以及部署到不同的GPU平臺(tái)上去,我們可以支持嵌入式的平臺(tái)DIGITS、TSPACTS2,也可以支持低功耗的GPU P4或者是其他的大功耗GPU等等。
聯(lián)系客服