上文用簡單的小學數學算了一下Alexnet的參數說需要的內存空間,但對于運行的神經網絡,還有一個運行時的資源的問題。在github上的convnet-burden上有一個feature memory[1]的概念,這個和輸入的圖片的大小和運算的batch的size 都有關。
因此,Nvida的GPU上的HBM和GDDR對于大部分神經網絡的煉丹師都是非常重要,能夠在一個GPU的內存里完成模型的運算而不用考慮換進換出是大有裨益的。
總體來說,這個統計還是很直觀的[2],就是網絡模型越復雜,參數的規模越大,資源的占用也就越多,對GPU的整體內存占用也是越多。因此如何在有限的GPU上完成模型的訓練也成了一個非常有用的技巧。
在我們考慮計算對于內存帶寬的需求之前,我們需要復習一下作為一個神經網絡,每一層對于計算的需求,這個還是可以用小學數學搞定的東西。還是用標準的Alexnet為例。
對于計算來講,卷積層應該是主要,對于Pooling來講,應該是沒有的,對于FC來講,也是比較簡單的。基本上是乘法.
Conv Layer的計算復雜度:
1. 當前的層的圖片的width
2. 當前的層的圖片的height
3.上一層的深度
4。當前層的深度
5. 當前kernel的大小
的乘積就是這一層卷積的計算復雜度。以Alexnet的conv1為例:
Conv-1:第一層的卷積有96個kernel。kernel的大小是11X11,卷積的stride是4,padding是0
當前的輸出的是55X55,上一層的input的深度是3, 當前的kernel是11X11,當前的深度是96.因此
55X55X3X11X11X96=105,415,200次MAC的計算。
對于Alexnet來講,需要注意的是conv2,4 ,5三個層的計算沒有和上一層直接跨GPU,因此需要的計算規模上/2.
對于FC來講,比較粗略的計算就是 輸入和當前層的規模的乘積。
MaxPool-3:第五層卷積的最大值,Pooling是3X3, stride是2,
FC-1:第一個全連接層,有4096個神經元
因此FC-1 的計算就是:
6X6X256X4096=37,748,736
因此,總結一下之前的參數信息和計算量, Alexnet的圖如下:
這個通過統計每一層的計算的復雜度,就可以得到整個網絡的計算復雜度,也就是訓練一次網絡需要多少的MACC資源。對于alexnet 來講就是:724,406,816 次操作。
這個時候,有一個關鍵的信息就出來了。就是芯片的能力,大家都是用TFLOPs來表示芯片的浮點處理能力。對于Nvida的芯片,有了TFLOPS,有個一個網絡需要的計算量,我們就可以很快計算出每一層計算需要的時間了。
對于Alexnet 的conv1 來講,在Nivida 最新的V100的120TFLOPs的GPU上,進行訓練的執行時間差不多是105,415,200X2/(120X1,000,000,000,000), 約等于1.75us (微秒)。
對于Pooling這一層來講,因為沒有MACC的計算量,但是因為要Max Pooling,也需要大小比較的計算。因此,它的計算基本就是算是數據讀取。因此它的數據讀取是 conv-1 的55X55X96=290,440. 因此在同樣的GPU下,它的執行時間就是 2.42ns.
好了,有了計算時間,現在需要來計算數據量了。對于Conv1來講,它包含了對一下數據的讀寫:
對于輸入數據的讀取 227X227X3 =154,587
對于輸出數據的寫入55x55x96=290,400
對于參數的讀取34848+96=34944
因此,就可以算出對于120TFLOP的GPU的要求:因為在很多ASIC芯片中,輸入輸出可能在DDR中,但是參數可能放在SRAM中,因此我們就分開計算了。
對于輸入數據的讀取 (154,587/1.75)X1000,000X4=351.95GB/s
對于輸出數據的寫入 (290,400/1.75)X1000,000X4=661.16GB/s
對于參數的讀取 (34944 /1.75)X1,000,000X4=79.34GB/s
提個醒,我們現在的PC服務器上性能最高的DDR4的帶寬基本上在19GB/s左右。看到壓力了吧。現在的memory連很慢的CPU都跟不上。更何況老黃家的核彈。
-
NVIDIA
+關注
關注
14文章
5025瀏覽量
103270 -
深度學習
+關注
關注
73文章
5508瀏覽量
121303
原文標題:芯片架構師終于證明:深度學習的最大短板原來是它!
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論