1、Scalar、Vector、Marix、Tensor,點(diǎn)線面體一個(gè)都不少
我們先從點(diǎn)線面體的視角形象理解一下。點(diǎn),標(biāo)量(scalar);線,向量(vector);面,矩陣(matrix);體,張量(tensor)。我們?cè)僭敿?xì)看一下他們的定義
Scalar定義:標(biāo)量是只有大小、沒(méi)有方向的“量”。一個(gè)具體的數(shù)值就能表征,如重量、溫度、長(zhǎng)度等。
Vector定義:向量是即有大小、又有方向的“量”。由大小和方向共同決定,如力、速度等。
Matrix定義:矩陣是一個(gè)“按照長(zhǎng)方陣列排列”的數(shù)組,而行數(shù)與列數(shù)都等于N的矩陣稱(chēng)為N階矩陣,在卷積核中我們常用3x3或5x5矩陣。
Tensor定義:張量是一個(gè)“維度很多”的數(shù)組,它創(chuàng)造出了更高維度的矩陣、向量,在深度學(xué)習(xí)知識(shí)域的術(shù)語(yǔ)中張量也可解釋為數(shù)學(xué)意義的標(biāo)量、向量和矩陣等的抽象。即標(biāo)量定義為0級(jí)張量,向量定義為1級(jí)張量,矩陣定義為2級(jí)張量,將在三維堆疊的矩陣定義為3級(jí)張量,參考下圖。
2、深度學(xué)習(xí)依賴(lài)Tensor運(yùn)算,GPU解決了算力瓶頸(1)卷積網(wǎng)絡(luò)神經(jīng)中有海量的矩陣運(yùn)算,包括矩陣乘法和矩陣加法 參考機(jī)器學(xué)習(xí)中的函數(shù)(4) - 全連接限制發(fā)展,卷積網(wǎng)絡(luò)閃亮登場(chǎng)卷積神經(jīng)網(wǎng)絡(luò)(CNN)作為是實(shí)現(xiàn)深度學(xué)習(xí)的重要方法之一,整個(gè)網(wǎng)絡(luò)第一步就是應(yīng)用卷積進(jìn)行特征提取,通過(guò)幾輪反復(fù)后獲得優(yōu)質(zhì)數(shù)據(jù),達(dá)成改善數(shù)據(jù)品質(zhì)的目標(biāo),我們一起復(fù)習(xí)一下卷積層工作的這兩個(gè)關(guān)鍵步驟。
首先,進(jìn)行圖像轉(zhuǎn)換:先把我們眼中的“圖像”變成計(jì)算機(jī)眼中的“圖像”。
下一步,選擇一個(gè)卷積核進(jìn)行“濾波”:假設(shè)以一個(gè)2×2的小型矩陣作為卷積核,這樣的矩陣也被稱(chēng)為“濾波器”。如果把卷積核分別應(yīng)用到輸入的圖像數(shù)據(jù)矩陣上(如上圖計(jì)算機(jī)眼中的貓),執(zhí)行卷積運(yùn)算得到這個(gè)圖像的特征圖譜(Feature Map)。從下圖體現(xiàn)看到,圖像的特性提取本質(zhì)上就是一個(gè)線性運(yùn)算,這樣的卷積操作也被稱(chēng)為線性濾波。
2012年,辛頓(Hinton)和他的博士生(Alex Krizhevsky)等提出了經(jīng)典的Alexnet,它強(qiáng)化了典型CNN的架構(gòu),這個(gè)網(wǎng)絡(luò)中卷積層更深更寬,通過(guò)大量的”卷積層->激活層->池化層”的執(zhí)行過(guò)程提純數(shù)據(jù),因此在這個(gè)網(wǎng)絡(luò)中有海量的矩陣運(yùn)算,包括矩陣乘法和矩陣加法。
(2)應(yīng)用GPU解決算力瓶頸,Tensor是最基礎(chǔ)的運(yùn)算單元
Alexnet之所以是經(jīng)典中的經(jīng)典,除了它強(qiáng)化了典型CNN的架構(gòu)外,還有其它創(chuàng)新點(diǎn),如首次在CNN中應(yīng)用了ReLU激活函數(shù)、Dropout機(jī)制,最大池化(Max pooling)等技術(shù)等。還有一點(diǎn)特別重要,Alexnet成功使用GPU加速訓(xùn)練過(guò)程(還開(kāi)源了CUDA代碼),上世紀(jì)90年代限制Yann LeCun等人工智能科學(xué)家的計(jì)算機(jī)硬件“算力瓶頸”被逐步打開(kāi)。
深度學(xué)習(xí)為什么需要GPU呢?因?yàn)橹挥蠫PU能夠提供“暴力計(jì)算”能力,降低訓(xùn)練時(shí)間。大家都知道,GPU處理器擁有豐富的計(jì)算單元ALU,它相對(duì)于CPU處理器架構(gòu)的優(yōu)勢(shì)就在于能執(zhí)行“并行運(yùn)算”,參考下圖中的一個(gè)簡(jiǎn)單的矩陣乘法就是矩陣某一行的每一個(gè)數(shù)字,分別和向量的每一個(gè)數(shù)字相乘之后再相加,這就是并行運(yùn)算。
而如剛才討論的深度學(xué)習(xí)中的運(yùn)算大部分都是矩陣運(yùn)算,讓計(jì)算從“單個(gè)的”變成“批處理的”,充分利用GPU的資源。而Tensor是專(zhuān)門(mén)針對(duì)GPU來(lái)設(shè)計(jì)的,Tensor作為一個(gè)可以運(yùn)行在GPU上的多維數(shù)據(jù),加速運(yùn)算速度,提升運(yùn)算效率。參考深度學(xué)習(xí)靠框架,期待國(guó)產(chǎn)展雄風(fēng)中的討論,在一個(gè)框架中,必須有“張量對(duì)象”和“對(duì)張量的計(jì)算”作基礎(chǔ),TensorFlow、PyTorch等等主流框架中,張量Tensor都是最基礎(chǔ)的運(yùn)算單元。
3、提升Tensor效率,大家各顯神通 現(xiàn)在主要的GPU廠家為了能夠提高芯片在AI、HPC等應(yīng)用場(chǎng)景下的加速能力,都在芯片計(jì)算單元的設(shè)計(jì)上花大力氣,不斷創(chuàng)新優(yōu)化。比如AMD的CDNA架構(gòu)中計(jì)算是通過(guò)Compute Unit來(lái)實(shí)現(xiàn)的,在Compute unit中就有Scalar、Vector、Matrix等不同的計(jì)算功能模塊,針對(duì)不同的計(jì)算需求各司其職。Nvidia的計(jì)算是通過(guò)SM來(lái)實(shí)現(xiàn)的,SM中計(jì)算從Cuda Core發(fā)展到Tensor Core,針對(duì)Tensor的計(jì)算效率越來(lái)越高,到今年三月份發(fā)布的H100系列中,Tensor Core已經(jīng)發(fā)展到了第四代。而Google干脆就把自己的芯片定義為T(mén)PU(Tensor processing Unit),充分發(fā)揮Tensor加速能力,其中主要的模塊就是海量的矩陣乘法單元。(1)英偉達(dá)的Tensor Core 今年3月份黃教主穿著皮衣發(fā)布了H100(Hopper系列),Nvidia每一代GPU都是用一個(gè)大神的名字命名,這個(gè)系列是向Grace Hopper致敬,她被譽(yù)為計(jì)算機(jī)軟件工程***、編譯語(yǔ)言COBOL之母。她也被譽(yù)為是計(jì)算機(jī)史上第一個(gè)發(fā)現(xiàn)Bug的人,有這樣一個(gè)故事,1947年9月9日當(dāng)人們測(cè)試Mark II計(jì)算機(jī)時(shí),它突然發(fā)生了故障。經(jīng)過(guò)幾個(gè)小時(shí)的檢查后,工作人員發(fā)現(xiàn)了一只飛蛾被打死在面板F的第70號(hào)繼電器中,飛蛾取出后,機(jī)器便恢復(fù)了正常。當(dāng)時(shí)為Mark II計(jì)算機(jī)工作的女計(jì)算機(jī)科學(xué)家Hopper將這只飛蛾粘帖到當(dāng)天的工作手冊(cè)中,并在上面加了一行注釋?zhuān)瑫r(shí)間是15:45。隨著這個(gè)故事傳開(kāi),更多的人開(kāi)始使用Bug一詞來(lái)指代計(jì)算機(jī)中的設(shè)計(jì)錯(cuò)誤,而Hopper登記的那只飛蛾看作是計(jì)算機(jī)里上第一個(gè)被記錄在文檔中的Bug,以后debug(除蟲(chóng))變成了排除故障的計(jì)算機(jī)術(shù)語(yǔ)。
讓我們回到英偉達(dá)GPU的計(jì)算單元設(shè)計(jì),Nvidia的9代GPU中計(jì)算單元架構(gòu)演進(jìn)過(guò)程如下,Tesla2.0(初代)-> Fermi(Cuda core提升算力)-> Kepler(core數(shù)量大量增長(zhǎng))-> Maxwell(Cuda core結(jié)構(gòu)優(yōu)化)-> Pascal(算力提升)-> Volta(第一代Tensor core提出,優(yōu)化對(duì)深度學(xué)習(xí)的能力) -> Turning(第二代Tensor core)-> Ampere(第三代Tensor core)-> Hopper(第四代Tensor core),其中從Volta開(kāi)始,每一代Tensor Core的升級(jí)都能帶來(lái)算力X倍的提升。Tensor core專(zhuān)門(mén)為深度學(xué)習(xí)矩陣運(yùn)算設(shè)計(jì),和前幾代的“全能型”的浮點(diǎn)運(yùn)算單元CUDA core相比,Tensor core運(yùn)算場(chǎng)景更有針對(duì)性,算力能力更強(qiáng),下圖就是NV一個(gè)計(jì)算單元SM中各種模塊的組成,各種類(lèi)型的計(jì)算模塊配置齊全。
再詳細(xì)討論一下Tensor Core,Tensor Core是專(zhuān)為執(zhí)行張量或矩陣運(yùn)算而設(shè)計(jì)的專(zhuān)用執(zhí)行單元,每個(gè)時(shí)鐘執(zhí)行一次矩陣乘法,包含批次的混合精度乘法操作(區(qū)別于Cuda core每個(gè)時(shí)鐘執(zhí)行單次混合精度的乘加操作),矩陣乘法(GEMM)運(yùn)算是神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理的核心,Tenore Core更加高效。參考下圖(藍(lán)色和紫色為輸入,綠色是計(jì)算結(jié)果,中心的灰色部分就是計(jì)算單元),第一代Tencor Core加入Votal后,以4x4 矩陣乘法運(yùn)算時(shí)為例,參考英偉達(dá)白皮書(shū)上的數(shù)據(jù),優(yōu)化后與前一代的Pascal相比,用于訓(xùn)練的算力峰值提升了 12 倍,用于推理的算力峰值提升了6 倍。
(2)Google的TPU
2013年,Google意識(shí)到數(shù)據(jù)中心快速增長(zhǎng)的算力需求方向,從神經(jīng)網(wǎng)絡(luò)興起開(kāi)始矩陣乘加成為重要的計(jì)算loading,同時(shí)商用GPU很貴,也為了降低成本,Google選擇了擼起袖子自己干,定制了Tensor Processing Unit(TPU)專(zhuān)用芯片,發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了4代了。
TPU V1:2014年推出,主要用于推理,第一代TPU指令很少,能夠支持矩陣乘法(MatrixMultiple / Convole) 和特定的激活功能(activation)。
TPU V2:2017年推出,可用于訓(xùn)練,這一代芯片指令集豐富了;提升計(jì)算能力,可以支持反向傳播了;內(nèi)存應(yīng)用了高帶寬的HBM;針對(duì)集群方案提供了芯片擴(kuò)展能力。
TPU V3:2018年推出,在V2的結(jié)構(gòu)上進(jìn)一步優(yōu)化,對(duì)各個(gè)功能模塊的性能都做了提升。
TPU V4:2022年推出,算力繼續(xù)大幅度提升,尤其是集群能力不斷優(yōu)化后,TPU成為谷歌云平臺(tái)上很關(guān)鍵的一環(huán)。
相信Google會(huì)在Tensor processing unit的路徑上繼續(xù)加速,對(duì)于云大廠來(lái)說(shuō),這是業(yè)務(wù)底座。
4、只有硬件是不夠的,TensorFlow讓Tenor流動(dòng)起來(lái) 我們看到了各個(gè)廠家在硬件上的不懈努力和快速進(jìn)步,當(dāng)然,只有硬件是遠(yuǎn)遠(yuǎn)不夠的,一個(gè)好的Deep Learning Framework才能發(fā)揮這些硬件的能力,我們還是從最出名的框架TensorFlow說(shuō)起。
2011年,Google公司開(kāi)發(fā)了它的第一代分布式機(jī)器學(xué)習(xí)系統(tǒng)DistBelief。著名計(jì)算機(jī)科學(xué)家杰夫·迪恩(Jeff Dean)和深度學(xué)習(xí)專(zhuān)家吳恩達(dá)(Andrew )都是這個(gè)項(xiàng)目的成員。通過(guò)杰夫·迪恩等人設(shè)計(jì)的DistBelief,Google可利用它自己數(shù)據(jù)中心數(shù)以萬(wàn)計(jì)的CPU核,建立深度神經(jīng)網(wǎng)絡(luò)。借助DistBelief,Google的語(yǔ)音識(shí)別正確率比之前提升了25%。除此之外,DistBelief在圖像識(shí)別上也大顯神威。2012年6月,《紐約時(shí)報(bào)》報(bào)道了Google通過(guò)向DistBelief提供數(shù)百萬(wàn)份YouTube視頻,來(lái)讓該系統(tǒng)學(xué)習(xí)貓的關(guān)鍵特征,DistBelief展示了他的自學(xué)習(xí)能力。DistBelief作為谷歌X-實(shí)驗(yàn)室的“黑科技”開(kāi)始是是閉源的,Google在2015年11月,Google將它的升級(jí)版實(shí)現(xiàn)正式開(kāi)源(遵循Apache 2.0)。而這個(gè)升級(jí)版的DistBelief,也有了一個(gè)我們熟悉的名字,它就是未來(lái)深度學(xué)習(xí)框架的主角“TensorFlow”。
TensorFlow命名源于其運(yùn)行原理,即“讓張量(Tensor)流動(dòng)起來(lái)(Flow)”,這是深度學(xué)習(xí)處理數(shù)據(jù)的核心特征。TensorFlow顯示了張量從數(shù)據(jù)流圖的一端流動(dòng)到另一端的整個(gè)計(jì)算過(guò)程,生動(dòng)形象地描述了復(fù)雜數(shù)據(jù)結(jié)構(gòu)在人工神經(jīng)網(wǎng)絡(luò)中的流動(dòng)、傳輸、分析和處理模式。
Google的深度學(xué)習(xí)框架TensorFlow的有三大優(yōu)點(diǎn)
形象直觀:TensorFlow有一個(gè)非常直觀的構(gòu)架,它有一個(gè)“張量流”,用戶(hù)可以借助它的工具(如TensorBoard)很容易地、可視化地看到張量流動(dòng)的每一個(gè)環(huán)節(jié)。
部署簡(jiǎn)單:TensorFlow可輕松地在各種處理器上部署,進(jìn)行分布式計(jì)算,為大數(shù)據(jù)分析提供計(jì)算能力的支撐。
平臺(tái)兼容:TensorFlow跨平臺(tái)性好,不僅可在Linux、Mac和Windows系統(tǒng)中運(yùn)行,還可在移動(dòng)終端下工作。
審核編輯:郭婷
-
Google
+關(guān)注
關(guān)注
5文章
1772瀏覽量
57805 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5515瀏覽量
121553
原文標(biāo)題:【AI】深度學(xué)習(xí)框架(1)
文章出處:【微信號(hào):Hardware_10W,微信公眾號(hào):硬件十萬(wàn)個(gè)為什么】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論