深度學習的異構加速技術(一):AI 須要一個多大的「心臟」?

歡迎你們前往騰訊雲社區,獲取更多騰訊海量技術實踐乾貨哦~前端

做者:kevinxiaoyu,高級研究員,隸屬騰訊TEG-架構平臺部,主要研究方向爲深度學習異構計算與硬件加速、FPGA雲、高速視覺感知等方向的構架設計和優化。「深度學習的異構加速技術」系列共有三篇文章,主要在技術層面,對學術界和工業界異構加速的構架演進進行分析。git

1、概述:通用=低效

做爲通用處理器,CPU (Central Processing Unit) 是計算機中不可或缺的計算核心,結合指令集,完成平常工做中多種多樣的計算和處理任務。然而近年來,CPU在計算平臺領域一統天下的步伐走的並不順利,可歸因於兩個方面,即自身約束和需求轉移。github

(1)自身約束又包含兩方面,即半導體工藝,和存儲帶寬瓶頸。
一方面,當半導體的工藝製程走到7nm後,已逼近物理極限,摩爾定律逐漸失效,致使CPU再也不能像之前同樣享受工藝提高帶來的紅利:經過更高的工藝,在相同面積下,增長更多的計算資源來提高性能,並保持功耗不變。爲了追求更高的性能,更低的功耗,來適應計算密集型的發展趨勢,更多的設計經過下降通用性,來提高針對某一(或某一類)任務的性能,如GPU和定製ASIC。編程

另外一方面,CPU內核的計算過程須要大量數據,而片外DDR不只帶寬有限,還具備較長的訪問延遲。片上緩存能夠必定程度上緩解這一問題,但容量極爲有限。Intel經過數據預讀、亂序執行、超線程等大量技術,解決帶寬瓶頸,儘量跑滿CPU,但複雜的調度設計和緩存佔用了大量的CPU硅片面積,使真正用來作運算的邏輯,所佔面積甚至不到1%[1]。同時,保證程序對以前產品兼容性的約束,在必定程度上制約了CPU構架的演進。緩存

(2)需求轉移,主要體如今兩個逐漸興起的計算密集型場景,即雲端大數據計算和深度學習。
尤爲在以CNN爲表明的深度學習領域,準確率的提高伴隨着模型深度的增長,對計算平臺的性能要求也大幅增加,如圖1所示[2]。相比於CPU面對的通用多任務計算,深度學習計算具備如下特色:任務單一,計算密度大,較高的數據可複用率。對計算構架的要求在於大規模的計算邏輯和數據帶寬,而不在於複雜的任務調度,所以在CPU上並不能跑出較好的性能。服務器

圖1.1 深度學習的發展趨勢:更高精度與更深的模型,伴隨着更高的計算能力需求。架構

基於上述緣由,CPU構架在深度學習、大數據分析,以及部分嵌入式前端應用中並不具有普適性,此時,異構計算開始進入人們的視野。本文主要針對深度學習的計算構架進行討論。分佈式

在討論以前,先上一張經典的類比圖:分別以「可編程能力/靈活性」和「開發難度/定製性/計算效率/能耗」爲橫軸和縱軸,將CPU與當前主流異構處理器,如GPU、FPGA、專用ASIC等進行比較。佈局

圖1.2 計算平臺選擇依據性能

經過前文分析可知,CPU最大限度的靈活性是以犧牲計算效率爲代價。GPU將應用場景縮減爲圖形圖像與海量數據並行計算,設計了數千計算內核,有效的提高了硅片上計算邏輯的比例,但隨之而來的帶寬需求也是至關恐怖的。爲了解決這一問題,一方面,爲了保證通用性,兼容低數據複用的高帶寬場景,GPU內部設計了大量分佈式緩存;另外一方面,GPU的顯存始終表明了當前可商用化存儲器的最新成果。顯存採用的DDR始終領先服務器內存1~2代,併成爲業界首先使用HBM的應用。所以,相比於CPU,GPU具有更高的計算性能和能耗比,但相對的通用性和帶寬競爭使其能耗比依然高於FPGA和ASIC,而且性能依賴於優化程度,即計算模型和數據調度要適配GPU的底層架構。

FPGA和ASIC則更傾向於針對某一特定應用。無疑,專用ASIC具備最高的計算效率和最低的功耗,但在架構、設計、仿真、製造、封裝、測試等各個環節將消耗大量的人力和物力。而在深度學習模型不斷涌現的環境下,當還沒有出現肯定性應用時,對CNN、RNN中的各個模型分別進行構架設計甚至定製一款獨立ASIC是一件很是奢侈的事情,所以在AI處理器的設計上,你們的作法逐漸一致,設計一款在AI領域具有必定通用性的FPGA/ASIC構架,稱爲領域處理器。使其能夠覆蓋深度學習中的一類(如常見CNN模型),或多類(如CNN+RNN等)。

2、嵌入式VS雲端,不一樣場景下,AI處理器的兩個選擇

2.1 AI處理器的發展和現狀

伴隨着深度學習模型的深化和算力需求的提高,從學術界興起的AI處理器方案已經迅速蔓延到工業界。目前,各大互聯網、半導體、初創公司的方案主要分爲雲端、嵌入式端兩類(或稱爲雲側和端側),可概括如表1.1所示若感興趣可轉到唐杉同窗維護的列表:https://basicmi.github.io/Dee...

表1.1 深度學習處理器方案列表

圖1.3 AI處理器的發展和設計目標

AI處理器的發展過程如圖1.3所示。在早期,對AI處理器架構的探討源於學術界的半導體和體系架構領域,此時模型層數較少,計算規模較小,算力較低,主要針對場景爲嵌入式前端;隨着模型的逐漸加深,對算力的需求也相應增長,致使了帶寬瓶頸,即IO問題(帶寬問題的成因詳見2.2節),此時可經過增大片內緩存、優化調度模型來增長數據複用率等方式解決;當雲端的AI處理需求逐漸浮出水面,多用戶、高吞吐、低延遲、高密度部署等對算力的需求進一步提高。計算單元的劇增使IO瓶頸越發嚴重,要解決須要付出較高代價(如增長DDR接口通道數量、片內緩存容量、多芯片互聯等),制約了處理器實際應用。此時,片上HBM(High Bandwidth Memory,高帶寬存儲器)的出現使深度學習模型徹底放到片上成爲可能,集成度提高的同時,使帶寬再也不受制於芯片引腳的互聯數量,從而在必定程度上解決了IO瓶頸,使雲端的發展方向從解決IO帶寬問題,轉向解決算力伸縮問題。

到目前爲止,以HBM/HMC的應用爲標誌,雲端高性能深度學習處理器的發展共經歷了兩個階段:

1.第一階段,解決IO帶寬問題;
2.第二階段,解決算力伸縮問題。

2.2 帶寬瓶頸

第一階段,囊括了初期的AI處理器,以及至今的大部分嵌入式前端的解決方案,包括第一代TPU、目前FPGA方案的相關構架、寒武紀ASIC構架,以及90%以上的學術界成果。欲達到更高的性能,一個有效的方法是大幅度提高計算核心的並行度,但算力的擴張須要匹配相應的IO帶寬。例如,圖1.4中的1個乘加運算單元若運行在500MHz的頻率下,每秒須要4GB的數據讀寫帶寬;一個典型的雲端高性能FPGA(以Xilinx KU115爲例)共有5520個DSP,跑滿性能須要22TB的帶寬;而一條DDR4 DIMM僅能提供19.2GB的帶寬(上述分析並不嚴謹,但不妨礙對帶寬瓶頸的討論)。所以在第一階段,設計的核心是,一方面經過共享緩存、數據調用方式的優化等方式提高數據複用率,配合片上緩存,減小從片外存儲器的數據加載次數。另外一方面經過模型優化、低位寬量化、稀疏化等方式簡化模型和計算。

圖1.4 一個乘加單元及其帶寬計算(累加值一般與輸出共用,故未計入帶寬)

2.3 算力伸縮

儘管片上分佈的大量緩存能提供足夠的計算帶寬,但因爲存儲結構和工藝制約,片上緩存佔用了大部分的芯片面積(一般爲1/3至2/3),限制了算力提高下緩存容量的同步提高,如圖1.5所示。


圖1.5 芯片中片上緩存的規模,上圖爲Google第一代TPU,藍色部分爲緩存區域,佔用芯片面積的37%;下圖爲寒武紀公司的DiaoNao AI ASIC設計,緩存佔面積的66.7%(NBin+NBout+SB)。

而以HBM爲表明的存儲器堆疊技術,將本來一維的存儲器佈局擴展到三維,大幅度提升了片上存儲器的密度,如圖1.6所示,標誌着高性能AI處理器進入第二階段。但HBM的須要較高的工藝而大幅度提高了成本,所以僅出如今互聯網和半導體巨頭的設計中。HBM使片上緩存容量從MB級別提高到GB級別,能夠將整個模型放到片上而再也不須要從片外DDR中加載;同時,堆疊存儲器提供的帶寬再也不受限於芯片IO引腳的制約而獲得50倍以上的提高,使帶寬再也不是瓶頸。此時,設計的核心在於高效的計算構架、可伸縮的計算規模、和分佈式計算能力,以應對海量數據的訓練和計算中的頻繁交互

圖1.6 HBM與片內垂直堆疊技術

目前AI構架已從百家爭鳴,逐漸走向應用。在後續的篇幅中,將對這兩個階段進行論述。

[1] 王逵, 「CPU和GPU雙低效,摩爾定律以後一萬倍 ——寫於TPU版AlphaGo重出江湖之際」,新智元,2017.
[2] Jeff Dean, "Keynote: Recent Advances in Artificial Intelligence via Machine Learning and the Implications for Computer System Design", Hotchips2017, 2017.

相關閱讀

深度學習的異構加速技術(二):螺獅殼裏作道場
深度學習的異構加速技術(三):互聯網巨頭們「心水」這些 AI 計算平臺
給 AI 換個「大動力當心髒」之通用 CNN 加速設計

此文已由做者受權騰訊雲技術社區發佈,轉載請註明文章出處
原文連接:https://cloud.tencent.com/com...

相關文章
相關標籤/搜索