選擇深度學習計算硬體時,我們在考慮些什麼
- 2021 年 3 月 25 日
- AI
「 選擇深度學習計算硬體時,我們在考慮些什麼?」
前兩天做一個交流時,被問到一個問題,大概是「怎麼看待深度學習對計算晶片的影響或者要求」。無獨有偶,早前我有兩篇文章或多或少講了一些觀點:
-
現在用於深度學習的計算晶片(比如說NVIDIA的顯示卡GPU),大多都標榜自己有多少TOPS的算力,以彰顯晶片的先進性。而運算時的實際算力和標榜的理論峰值算力一般存在不小的gap,這一gap便是晶片的軟體+硬體設計效率的體現。(參見《人腦的算力估算》)
-
你以為是深度學習演算法選擇了GPU,使得近些年雲計算中心對NVIDIA顯示卡的採購越來越多。換個角度想,也是GPU選中了深度學習——沒有恰好存在的GPU這一硬體,就沒有近十年對深度學習的大規模運用。(參見《硬體彩票:GPU和神經網路加速器》)
今天便更具體的講一講,在選擇深度學習計算硬體時,我們應該考慮些什麼?
PS. 這篇文章的主要參考資料來源於Efficient Processing of Deep Neural Networks一書的第三章Key Metrics and Design Objectives。
圖源[1] 2020年初版的介紹深度神經網路軟硬體設計的書
深度學習的背後是神經網路,神經網路本質是矩陣運算,矩陣運算也就是很多次乘加運算(Multiply-Accumulate (MAC))。對於一款用於深度學習的計算硬體,其核心便是執行MAC的速度。因此,業界會使用TOPS(Tera-operations per second,每秒萬億次運算)作為評估硬體算力的一個關鍵指標:每秒能夠執行的MAC次數越高,算力越強。
然而,這一TOPS指標只是硬體能夠達到的理論峰值,它與晶片運算單元的個數(PE(處理單元,Process Element)的個數)、運行頻率有關。實際使用中的TOPS值又和下面的一些因素有關:
-
模型的並行性:數據並行和運算並行的程度,這與神經網路模型的設計和編譯器有關;
-
記憶體的大小和記憶體頻寬的大小:與硬體設計有關。如下圖的roofline模型,當演算法的運算強度較小時,運算性能(實際的OPS)實際受限於頻寬,大量PE會處於閑置狀態。
圖源[1] The roofline model
既然實際中不能僅以TOPS作為選擇硬體的唯一指標,並且在不知道硬體內部及其編譯器具體設計和實現方案的基礎上,我們需要更多的指標,用以綜合評價硬體:
-
理論峰值TOPS:雖然我們認為不能以TOPS作為唯一的評價指標,但不能否認TOPS仍然是最直觀的指標。它直接反映了硬體上的「堆料」情況,即處理單元PE的數量。
-
能耗(Energy and Power):能耗對於邊緣計算非常重要,畢竟沒人會想要一個會大幅縮短手機電池使用時間的應用。一個神經網路應用的能耗可以分為兩大塊——MAC運算和數據搬運。下圖展示了一些運算的能耗情況,其中涉及SRAM和DRAM的記憶體讀寫帶來的能耗遠大於普通的MAC運算。
圖源[1] 不同運算和記憶體訪問的能耗情況(45nm製程)
因此在設計時需要:
-
減少數據搬運次數、利用數據復用方法、減少MAC數、避免片外存儲的訪問次數
-
硬體成本(Cost):要提高第1、2點的指標,最直接的方法便是增加PE數量、片上存儲空間、使用HBM(High Bandwidth Memory)、更先進的製程等,但這必然會帶來更高的硬體成本。因此,一個設計目標是——在給定的成本下,提升其他指標。
-
吞吐量和延遲(Thoughput and Latency):吞吐量表示每秒處理的數據量,延遲表示從輸入到得到輸出的時間。吞吐量和延遲在某些時候是衝突的,例如積攢一個星期的臟衣服進洗衣機,這樣的吞吐量很高,但是對於其中第一件衣服而言,就存在一個星期的延遲(可能你其實馬上就想穿)。因此,對於批處理的情況,需要對吞吐量和延遲進行權衡。
吞吐量的計算理論上由下式表示:
其中operations/inference指的模型每次推理所需要的MAC數量,該項由神經網路的模型設計支配,即減少模型的運算數量可以提升吞吐量。
operations/second可以繼續分解為下式:一個PE的吞吐量(可以通過超頻、硬體設計、優化MAC的指令設計等進行提升)、PE的數量(通過提升單位面積下的PE個數)、PE的利用率(通過調度平衡多個PE的工作量、提供足夠的頻寬,避免出現空閑的PE)。
下表列出了影響吞吐量的關鍵因素,以及所屬類別(硬體、模型、輸入數據):
圖源[1] 影響吞吐量的關鍵因素
吞吐量和延遲是一個比較複雜的指標,會受到諸多因素的影響。在設計輕量化神經網路模型時,需要考慮模型的運算量、參數的稀疏化程度,以及結合硬體設計的模型效率(書的第九章專門講到了「硬體在環的神經網路模型設計」,之後再專門開一篇文章簡要介紹)。
-
準確性(Accuracy):不同模型在不同數據集/任務下的模型指標(如視覺的分類任務的準確率指標)。
-
靈活性(Flexibility):能夠(高效)支援的深度學習模型、運算元等。深度學習模型的更新速度一定是快於計算硬體的設計,因此硬體的設計和實現需要a)功能上支援多個模型的運行;b)性能上也能保障不同模型的吞吐量、準確性。
-
擴展性(Scalability):隨著硬體資源的增加,性能的擴展性。例如隨著PE和片上存儲的資源擴展,吞吐量和能耗是否也能夠隨之擴展。
-
易用性(Usability):這一項和計算硬體的工具鏈或者生態相關。在訓練深度學習模型時,可能因人而異會涉及到多種不同的框架(tensorflow、caffe、pytorch、mxnet等),計算硬體的生態對框架的支援程度、工具鏈對演算法開發人員的易用程度也會作為考量因素。
最後,我們會發現,這些指標是會相互影響的——選擇合適的硬體,竟然還是一個帶約束的多目標優化問題:約束可以是【必須支援某一些模型、必須支援某一框架】,目標可以是【成本最低、準確率最高、吞吐量最高等】。
一個多目標優化問題,必然意味著取捨,不同的人站在不同角度會作出不同的選擇。我個人對這些指標做了一些排序,只代表個人想法:
-
準確性:決定了這款硬體是否能夠滿足應用需求;
-
吞吐量和延遲:決定了這款硬體的效率,是否能滿足邊緣計算的實時性要求;
-
靈活性:決定了這款硬體能夠支援的任務類型、能夠支援的演算法豐富度;
-
易用性:決定了開發人員的工作效率;
-
成本:影響了邊緣系統的整體成本;
-
能耗:影響了邊緣系統的整體能源效率;
-
擴展性:在算力不夠時,一個好的擴展性表示,可以採用多個相同硬體的連接,達到有效補充算力的目的;
-
理論TOPS:如果上述的指標都能得到答案,那麼TOPS只不過是一個好看的數字罷了。
參考資料:
[1] Vivienne Sze; Yu-Hsin Chen; Tien-Ju Yang; Joel S. Emer, Efficient Processing of Deep Neural Networks , Morgan & Claypool, 2020, doi: 10.2200/S01004ED1V01Y202004CAC050.
– END –
新朋友們可以看看我過往的相關文章
⬇
【相關推薦閱讀】
長按二維碼關注我⬇