GPU在深度學習中究竟起了什么作用
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達

圍繞深度學習的“噪聲”經(jīng)常誤導外行人以為這是一種新發(fā)明的技術,使他們?yōu)橹徽竦氖钱斔麄冎郎疃葘W習早在1940-1950年代就奠定了基礎。還有很長的歷史,其中最流行的深層神經(jīng)網(wǎng)絡結構和理論已經(jīng)在整個20世紀后半期提出深的學問。如果是這種情況,那么你們可能會問,為什么在當前時代發(fā)生了深度學習革命,為什么不回溯幾十年。
簡單來說,在那些時期內(nèi),不存在有效訓練大型神經(jīng)網(wǎng)絡所需的正確硬件和計算能力。因此所有的理論大部分都在紙上,沒有實際的支持。盡管專門的研究人員繼續(xù)在神經(jīng)網(wǎng)絡上開展工作,直到2000年代下半葉,當硬件革命開始興起時,但它大部分都是不切實際的理論。
圖1 并行執(zhí)行神經(jīng)網(wǎng)絡的矩陣計算

圖2 GPU與CPU架構
讓我們比較一下CPU和GPU的體系結構,以了解為什么GPU在神經(jīng)網(wǎng)絡上執(zhí)行操作要比CPU更好。
第一個主要的明顯區(qū)別是CPU僅具有幾個內(nèi)核來執(zhí)行算術運算,而GPU可以具有成千上萬個這樣的內(nèi)核。從一個角度來看,一個標準的性能良好的CPU有8個內(nèi)核,而功能強大的CPU Intel Core i9-10980XE有18個內(nèi)核。另一方面,出色的GeForce GTX TITAN Z NVIDIA GPU具有5760個CUDA內(nèi)核。如此多的內(nèi)核使GPU可以非常高效地進行并行計算以產(chǎn)生高吞吐量。GPU還具有比CPU高的內(nèi)存帶寬,從而使GPU可以一次在存儲單元之間移動大量數(shù)據(jù)。
由于其高內(nèi)存帶寬和并行化,GPU可以立即加載神經(jīng)網(wǎng)絡矩陣的很大一部分,并進行并行計算以產(chǎn)生輸出。另一方面,與GPU相比,CPU將以幾乎可以忽略的并行化順序加載數(shù)字。這就是為什么對于具有大型矩陣運算的大型深度神經(jīng)網(wǎng)絡而言,GPU可以勝過CPU的原因。
應該注意的是,擁有如此多的內(nèi)核并不能使GPU在所有操作上都優(yōu)于CPU。由于其低延遲,CPU可以更快地處理無法分解為并行化的任何操作。因此,CPU將比GPU更快地計算順序浮點運算。

圖3 Voltas Tensor核心性能
隨著GPU在深度學習中的廣泛采用,NVIDIA在2017年推出了GPU Tesla Tesla V100,它具有新型的Voltas架構,該架構具有稱為Tensor Core的專用內(nèi)核,以支持神經(jīng)網(wǎng)絡的特定張量操作。NVIDIA聲稱,Volta Tensor Core的吞吐率比使用常規(guī)CUDA的前代產(chǎn)品高出12倍。

圖4 矩陣的計算操作支持張量核心
其背后的基本方法是Tensor Core專門用于將兩個4x4 FP16矩陣相乘并在其中添加4x4 FP16或FP32矩陣(FP代表浮點數(shù))。這樣的矩陣運算在神經(jīng)網(wǎng)絡中非常普遍,因此具有一個專用的Tensor Core進行優(yōu)化的優(yōu)勢,以使其比傳統(tǒng)的CUDA內(nèi)核執(zhí)行得更快。
到目前為止,我們的討論集中在GPU的硬件方面?,F(xiàn)在讓我們了解程序員如何利用NVIDIA GPU進行深度學習。在前面的部分中,我們討論了CUDA,其中討論了CUDA是供程序員在GPU上執(zhí)行通用計算的API。CUDA具有對C / C ++和Fortran等編程語言的本機支持,以及對其他編程語言(如Python,R,Matlab,Java等)的第三方包裝支持。
CUDA的發(fā)布是為了牢記圖形設計社區(qū),盡管深度學習社區(qū)開始使用CUDA,但對于他們而言,專注于CUDA的低級復雜性而不是專注于神經(jīng)網(wǎng)絡是一項艱巨的任務。因此,NVIDIA在2014年發(fā)布了CUDNN,這是一個基于CUDA的專用于深度學習的庫,為神經(jīng)網(wǎng)絡的原始操作提供了功能,例如反向傳播,卷積,池化等。
只有認真使用GPU,GPU才能加速深度學習管道,否則也會造成瓶頸。當用戶嘗試通過GPU推送所有代碼而不考慮是否可以在GPU上并行執(zhí)行所有這些操作時,通常會發(fā)生這種情況。
根據(jù)經(jīng)驗,只有可以并行執(zhí)行的計算密集型代碼才應推送到GPU,其余所有序列代碼都應發(fā)送到CPU。例如,用于數(shù)據(jù)清理,預處理的代碼應在CPU上執(zhí)行,而用于神經(jīng)網(wǎng)絡訓練的代碼應在GPU上運行,只有這樣,您才能看到性能的提升。

圖5 GPU加速
在本文中,我們了解了GPU如何在重新激發(fā)ML社區(qū)對神經(jīng)網(wǎng)絡的興趣并將深度學習帶入主流方面發(fā)揮如此重要的作用。以下是針對深度神經(jīng)網(wǎng)絡進行編程時要考慮的一些要點:
GPU用于大規(guī)模并行計算,因此應用于大量數(shù)據(jù)處理。
僅當將可分解為并行計算的操作發(fā)送到GPU,而其他操作應在CPU上執(zhí)行時,GPU才是有益的。
在使用大數(shù)據(jù)進行模型訓練時,GPU更為有利,你們可以在其中對數(shù)據(jù)進行分塊處理并利用并行計算。推論可能并非如此。如果推斷是在非??斓囊慌鷶?shù)據(jù)上發(fā)生的,但是如果推斷在每個數(shù)據(jù)點上是一個接一個地發(fā)生(實時推斷),則在GPU上加載模型可能不會導致性能提高。
盡管GPU支持研究人員和大公司通過深度學習創(chuàng)造奇跡,但它們的成本很高,超出了大多數(shù)愛好者的能力范圍。但是,Google Colab和Kaggle上有免費的GPU免費層選項,但資源有限,初學者可以嘗試動手。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

