高考放榜抽獎|不止GPU!這些硬件也影響著深度學習訓練速度
今天起,全國各地將陸續(xù)進入高考“放榜”時間。將近兩周的等待后,考生們終于盼到了成績出爐。寬泛科技祝所有考生都能得償所愿,在2020年秋季,去到理想的院校,開啟嶄新的征程。有志于投身人工智能研究的青年,在關注計算機專業(yè)選擇時,也不妨先了解一下影響深度學習訓練速度的種種因素。?計算機科學與技術學科高校排名(點擊查看)
本文實驗數(shù)據(jù)來源:知乎@Justin ho
工程師之于計算機就相當于賽車手對待跑車一樣,必須十分熟悉它的每一個部件,明白各自的用途,然后在每一次調(diào)參當中充分發(fā)揮各部分的潛力,最終才能爆發(fā)出最大的性能。本次分享以圖像任務訓練為例,將從CPU、內(nèi)存、硬盤、GPU這些方面對算法性能的影響進行逐一分析,配合相應的實驗,給出相應的優(yōu)化建議。
數(shù)據(jù)流動路徑
假設我們現(xiàn)在有一批圖片集放在硬盤當中,待讀取進內(nèi)存送入GPU運算,那么一般會經(jīng)歷以下流程:
CPU發(fā)出讀取指令,從硬盤中找到圖片數(shù)據(jù),并存到內(nèi)存中;
CPU從內(nèi)存中取出一批數(shù)據(jù),轉化為numpy array,并作數(shù)據(jù)預處理/增強操作,如翻轉、平移、顏色變換等。處理完畢后送回內(nèi)存。
CPU內(nèi)存(后面簡稱內(nèi)存)和GPU內(nèi)存(后面簡稱顯存)各開辟一塊緩沖區(qū),內(nèi)存中的一個batch的數(shù)據(jù)通過PCIe通道傳輸?shù)斤@存當中。
GPU核心從顯存中獲取數(shù)據(jù)進行并行計算,計算結果返回至顯存中。
計算好的結果將從顯存經(jīng)過PCIe通道返回到內(nèi)存。
這5個步驟涉及到幾個影響數(shù)據(jù)傳輸速度的環(huán)節(jié):
硬盤讀取速度;
PCIe傳輸速度;
內(nèi)存讀寫速度;
cpu頻率。
我們首先來說說硬盤。
硬盤
在深度學習模型進行訓練前,往往需要從本地硬盤讀取數(shù)據(jù)到內(nèi)存,并做一些預處理,硬盤讀取速度會極大影響訓練的效率。如果讀取速度快,送進GPU的數(shù)據(jù)多,GPU的利用率就越高。當然提高數(shù)據(jù)傳送效率除了有硬件的部分也有軟件的部分,我們先來討論硬件方面的影響。而目前市售硬盤有機械硬盤和固態(tài)硬盤兩種,固態(tài)硬盤根據(jù)接口分為sata、M.2 NVME、PCIe三種。我們使用Kaggle著名數(shù)據(jù)集dogs_cats_redux,從兩個硬盤中分別測試數(shù)據(jù)讀取的速度。


從代碼里面可以看到,先用opencv讀取圖片,然后統(tǒng)一進行resize到(224, 224)的操作,固態(tài)硬盤的讀取速度差不多是機械硬盤的7倍!
PCIe
內(nèi)存中的數(shù)據(jù)通過PCIe總線傳輸?shù)紾PU顯存當中,如果是單顯卡的機器,大部分都能工作在PCIe 3.0 x16帶寬下,此時的帶寬為15.754GB/s。PCIe各代速率對比如下圖,來自百度百科:
當一個batch的數(shù)據(jù)(假設tensor shape: (32, 224, 224, 3))通過PCIe (3.0 x16)傳輸至GPU時,理論上所需時間為:2.44ms。(float 32的tensor的size為32×224×224×3×8≈0.0385GB)。
但目前市售的桌面級cpu(以英特爾酷睿系列的i7 cpu為例),CPU直連的PCIe通道一般只有16條,如果插了雙GPU,那么只能工作在PCIe 3.0 x8帶寬上(如果你的主板支持的話),那么理論延遲時間加倍。因此一般多卡機器如4卡、8卡、10卡,均最低使用雙路工作站或服務器級別的CPU,如英特爾至強系列,此系列單U最低都能提供40條PCIe總線。
但這些延遲時間相比起GPU計算、IO等這些時間來說,其實影響甚微,加上還有軟件層面的速度優(yōu)化,這個延遲可以忽略不計,因此裝機時不必太多糾結于PCIe通道數(shù)上。
CPU頻率
沒錯!CPU頻率也會對數(shù)據(jù)讀取速度有影響,這跟市面上大多裝機分享所說的不同,但實驗證明頻率也對讀取速度有比較大的影響。
測試條件:
CPU i7-8700k是可超頻的u,因此通過Bios的超頻設置,分別設置為2.5GHz、3.0GHz、3.5GHz、4.7GHz四個不同的頻率,分別測試OpenCv讀取12500張狗狗圖的速度,結果對比如下:

實際上,由于所有數(shù)據(jù)預處理的操作都在CPU上執(zhí)行,因此CPU頻率越高,生成圖片的速度就越快,這樣的差距也在情理之中。當機器擁有多顯卡時,CPU喂數(shù)據(jù)的速度可能會成為整個系統(tǒng)的瓶頸。
內(nèi)存頻率
我們來測試一下在不同內(nèi)存頻率下,OpenCv讀圖的速度。內(nèi)存頻率分別設為2133MHz、2400MHz、2666MHz、3000MHz。

可以看到,這幾個內(nèi)存頻率下,讀取速度幾乎沒差別,其實內(nèi)存的帶寬相對來說已經(jīng)足夠大,真正的短板在于硬盤。這里附上維基百科給出的內(nèi)存頻率-帶寬對比表格:

GPU
有錢就買最貴的就對了(誤)。目前市面上許多深度學習裝機教程已經(jīng)對顯卡的選擇作了非常細致的解釋,這里就不作推薦什么價位買什么顯卡的重復勞動了,這里聊聊顯卡的幾項指標(如非特別說明,本文提到的顯卡一律指Nvidia的顯卡,目前幾乎沒人用AMD顯卡做深度學習,或許未來有)。
CUDA核心數(shù)
CUDA核心數(shù)基本確定了一張顯卡的算力,當前服務器級別的Tesla V100顯卡擁有高達5120個cuda核心;工作站級別最強的RTX 8000顯卡以及TITAN系列最強的RTX TITAN,CUDA數(shù)為4608個;而當前桌面級別最強的RTX2080ti,擁有4352個CUDA核心。核心數(shù)越多意味著執(zhí)行并行計算的量就更多。詳細的顯卡規(guī)格對比可以參考維基百科:List of Nvidia graphics processing units
內(nèi)存顆粒
最新幾代的顯存顆粒類型分別有GDDR5X(1080ti)、GDDR6(2080ti)、HBM、HBM2(V100),對應的帶寬如下表:

HBM2顯存的帶寬已經(jīng)高達256GB/s,Nvidia目前把這種顯存只用在最高端的顯卡上,而AMD這邊則已經(jīng)應用到桌面級顯卡。(英偉達官方宣傳其V100的HBM2顯存擁有900GB/s的帶寬,應該是擁有多個channel的結果)
TensorCore
TensorCore最早出現(xiàn)在Nvidia的Volta架構,用于加速深度學習經(jīng)常需要的矩陣運算。當使用TensorCore時,我們需要從以往的單精度運算(float32)轉換成為混合精度(float16+float32)計算,而TensorCore正是能加速這些混合精度運算。所謂“混合精度-mix precision”,如下圖,假設A和B是FP16精度的矩陣,矩陣相乘后再和一個FP16或者FP32精度的矩陣相加,會得到一個FP16或者FP32的矩陣(取決于你相加的矩陣是什么精度)。

由FP32轉換成FP16計算,能夠減少一半的顯存使用量,運算時的吞吐量大大增加。實際上,擁有640個tensorcore的V100,吞吐量是P100的12倍(詳見Nvidia的TensorCore介紹文檔)。
Nvidia的TensorCore介紹文檔 鏈接:
https://images.nvidia.com/content/volta-architecture/pdf/volta-architecture-whitepaper.pdf
我們來看看幾款顯卡的TensorCore數(shù)量:

在桌面級顯卡中,2080ti擁有最多的544個TensorCore,而RTX Titan則有576個TensorCore。
浮點算力
浮點算力是最能反映顯卡性能的指標,對于深度學習來說,單精度(float32)的運算最常見,因此最受關注的是float32的算力。而近來混合精度計算越來越受歡迎,float16的算力也越來越重要。至于int8一般用在要求極端速度的推理任務上。而float64一般在HPC應用中常用,所以基本可以忽略這一項。我們來看看幾款Volta、Turing架構的顯卡詳細參數(shù)表:

當前單精度和半精度浮點算力最高的是RTX Titan,而算力緊追其后的是Tesla V100和Titan V,但這兩款的核心數(shù)和顯存均是最高。更大的顯存意味著每次輸入數(shù)據(jù)的batch size可以更大,以及在GAN應用中可以生成更大分辨率的圖片。如果用于高精度的科學計算,Tesla V100和Titan V是最佳選擇。如果要考慮性價比,那無疑是2080ti最佳。
為什么服務器級別的Tesla卡在算力上與桌面級、工作站級的顯卡相差無幾,價格卻差這么大呢?除了上面的雙精度算力最高之外,筆者認為還有以下因素——Nvlink、Nvswitch。
Nvlink

Nvlink是英偉達在2014年推出的GPU互聯(lián)技術,由于以往的多卡環(huán)境中,GPU與其它GPU通信的時候,必須先通過PCIe把數(shù)據(jù)傳輸?shù)紺PU,再由CPU傳輸?shù)狡渌麲PU,整體計算速度受限于PCIe的速度(要知道HBM2顯存的帶寬已經(jīng)達到了900GB/s),PCIe 3.0 x 16雙向帶寬最多只有30GB/s。Nvlink的出現(xiàn)正是為了解決這個問題,看看下面Nvlink的說明圖:

先看左圖,有了Nvlink,GPU與GPU之間的通信不需要再通過CPU,直接通過Nvlink通信,雙向帶寬高達100GB/s(nvlink 2.0)。右圖是單服務器雙路CPU及8路GPU的架構,兩個CPU分別對應4個GPU,當其中一組GPU需要向另一組GPU進行通信時,以往同樣只能先通過PCIe傳輸?shù)紺PU,然后再通過QPI通道(帶寬為25.6GB/s)傳輸?shù)搅硪粋€CPU,最后再通過PCIe送進另一組GPU。而Nvlink支持跨CPU節(jié)點的直接通信,V100每個GPU有6條Nvlink通道,總帶寬高達300GB/s。
但從上圖可以看到,即使每個GPU擁有6條Nvlink通道,仍然無法做到“全連接”(即任意兩個GPU之間存在雙向通道)。這就引出了下一個更加瘋狂的技術:Nvswitch。
Nvswitch


Nvidia官網(wǎng)介紹視頻的這兩張圖很好地介紹了兩者之間的區(qū)別。下圖一個主板上的8塊GPU通過6塊Nvswitch芯片與另一塊主板上的任意一塊GPU進行通信,使得8對GPU能夠同時以300GB/s的速度進行通信,實現(xiàn)16個GPU全連接。除此之外,Nvswitch還能使得整個服務器作為一塊擁有0.5TB顯存、2PetaFLOPS算力的“大顯卡”使用。
PS:2080ti雖然也能使用Nvlink,但速度被砍了一刀。
選擇困難,無從下手?
寬泛科技旗下Cloudhin?云軒支持Deep learning和高性能計算服務器定制,針對主要深度學習框架(如TensorFlow、Caffe 2、Theano或Torch)進行了優(yōu)化和設置,在桌面上即可提供強大的深度學習功能。
WS4123深度學習工作站搭載9代8核16線程Intel Core i9處理器,核芯迭代,動力強勁。可選雙路Nvidia Tesla GPU,基于Volta架構,增加與深度學習高度相關的Tensor單元,單個GPU即可提供高達100個CPU的性能。輕松應對如云計算、數(shù)據(jù)分析、后期制作、技術計算等多任務處理。
專業(yè)勤修,銳意進取。云軒技術工程師畢業(yè)于NVIDIA深度學習研究所,豐富經(jīng)驗,值得信賴。更多定制方案請聯(lián)系客服,我們將實時響應您的定制需求。
如果您有合作需求或?qū)氋F建議,歡迎來信。
郵箱:hezuo@kuanfans.com
合作熱線:400-610-1360轉375899