深度學(xué)習(xí)的異構(gòu)加速技術(shù)(一):AI 需要一個(gè)多大的“心臟”?
一、概述:通用=低效
作為通用處理器,CPU (Central Processing Unit) 是計(jì)算機(jī)中不可或缺的計(jì)算核心,結(jié)合指令集,完成日常工作中多種多樣的計(jì)算和處理任務(wù)。然而近年來,CPU在計(jì)算平臺(tái)領(lǐng)域一統(tǒng)天下的步伐走的并不順利,可歸因于兩個(gè)方面,即自身約束和需求轉(zhuǎn)移。
(1)自身約束又包含兩方面,即半導(dǎo)體工藝,和存儲(chǔ)帶寬瓶頸。
一方面,當(dāng)半導(dǎo)體的工藝制程走到7nm后,已逼近物理極限,摩爾定律逐漸失效,導(dǎo)致CPU不再能像以前一樣享受工藝提升帶來的紅利:通過更高的工藝,在相同面積下,增加更多的計(jì)算資源來提升性能,并保持功耗不變。為了追求更高的性能,更低的功耗,來適應(yīng)計(jì)算密集型的發(fā)展趨勢(shì),更多的設(shè)計(jì)通過降低通用性,來提升針對(duì)某一(或某一類)任務(wù)的性能,如GPU和定制ASIC。
另一方面,CPU內(nèi)核的計(jì)算過程需要大量數(shù)據(jù),而片外DDR不僅帶寬有限,還具有較長(zhǎng)的訪問延遲。片上緩存可以一定程度上緩解這一問題,但容量極為有限。Intel通過數(shù)據(jù)預(yù)讀、亂序執(zhí)行、超線程等大量技術(shù),解決帶寬瓶頸,盡可能跑滿CPU,但復(fù)雜的調(diào)度設(shè)計(jì)和緩存占用了大量的CPU硅片面積,使真正用來做運(yùn)算的邏輯,所占面積甚至不到1%[1]。同時(shí),保證程序?qū)χ爱a(chǎn)品兼容性的約束,在一定程度上制約了CPU構(gòu)架的演進(jìn)。
(2)需求轉(zhuǎn)移,主要體現(xiàn)在兩個(gè)逐漸興起的計(jì)算密集型場(chǎng)景,即云端大數(shù)據(jù)計(jì)算和深度學(xué)習(xí)。
尤其在以CNN為代表的深度學(xué)習(xí)領(lǐng)域,準(zhǔn)確率的提升伴隨著模型深度的增加,對(duì)計(jì)算平臺(tái)的性能要求也大幅增長(zhǎng),如圖1所示[2]。相比于CPU面對(duì)的通用多任務(wù)計(jì)算,深度學(xué)習(xí)計(jì)算具有以下特點(diǎn):任務(wù)單一,計(jì)算密度大,較高的數(shù)據(jù)可復(fù)用率。對(duì)計(jì)算構(gòu)架的要求在于大規(guī)模的計(jì)算邏輯和數(shù)據(jù)帶寬,而不在于復(fù)雜的任務(wù)調(diào)度,因此在CPU上并不能跑出較好的性能。
圖1.1 深度學(xué)習(xí)的發(fā)展趨勢(shì):更高精度與更深的模型,伴隨著更高的計(jì)算能力需求。
基于上述原因,CPU構(gòu)架在深度學(xué)習(xí)、大數(shù)據(jù)分析,以及部分嵌入式前端應(yīng)用中并不具備普適性,此時(shí),異構(gòu)計(jì)算開始進(jìn)入人們的視野。本文主要針對(duì)深度學(xué)習(xí)的計(jì)算構(gòu)架進(jìn)行討論。
在討論之前,先上一張經(jīng)典的類比圖:分別以“可編程能力/靈活性”和“開發(fā)難度/定制性/計(jì)算效率/能耗”為橫軸和縱軸,將CPU與當(dāng)前主流異構(gòu)處理器,如GPU、FPGA、專用ASIC等進(jìn)行比較。
圖1.2 計(jì)算平臺(tái)選擇依據(jù)
通過前文分析可知,CPU***限度的靈活性是以犧牲計(jì)算效率為代價(jià)。GPU將應(yīng)用場(chǎng)景縮減為圖形圖像與海量數(shù)據(jù)并行計(jì)算,設(shè)計(jì)了數(shù)千計(jì)算內(nèi)核,有效的提升了硅片上計(jì)算邏輯的比例,但隨之而來的帶寬需求也是相當(dāng)恐怖的。為了解決這一問題,一方面,為了保證通用性,兼容低數(shù)據(jù)復(fù)用的高帶寬場(chǎng)景,GPU內(nèi)部設(shè)計(jì)了大量分布式緩存;另一方面,GPU的顯存始終代表了當(dāng)前可商用化存儲(chǔ)器的***成果。顯存采用的DDR始終領(lǐng)先服務(wù)器內(nèi)存1~2代,并成為業(yè)界首先使用HBM的應(yīng)用。因此,相比于CPU,GPU具備更高的計(jì)算性能和能耗比,但相對(duì)的通用性和帶寬競(jìng)爭(zhēng)使其能耗比依然高于FPGA和ASIC,并且性能依賴于優(yōu)化程度,即計(jì)算模型和數(shù)據(jù)調(diào)度要適配GPU的底層架構(gòu)。
FPGA和ASIC則更傾向于針對(duì)某一特定應(yīng)用。無疑,專用ASIC具有***的計(jì)算效率和***的功耗,但在架構(gòu)、設(shè)計(jì)、仿真、制造、封裝、測(cè)試等各個(gè)環(huán)節(jié)將消耗大量的人力和物力。而在深度學(xué)習(xí)模型不斷涌現(xiàn)的環(huán)境下,當(dāng)尚未出現(xiàn)確定性應(yīng)用時(shí),對(duì)CNN、RNN中的各個(gè)模型分別進(jìn)行構(gòu)架設(shè)計(jì)甚至定制一款獨(dú)立ASIC是一件非常奢侈的事情,因此在AI處理器的設(shè)計(jì)上,大家的做法逐漸一致,設(shè)計(jì)一款在AI領(lǐng)域具備一定通用性的FPGA/ASIC構(gòu)架,稱為領(lǐng)域處理器。使其可以覆蓋深度學(xué)習(xí)中的一類(如常見CNN模型),或多類(如CNN+RNN等)。
二、嵌入式VS云端,不同場(chǎng)景下,AI處理器的兩個(gè)選擇
2.1 AI處理器的發(fā)展和現(xiàn)狀
伴隨著深度學(xué)習(xí)模型的深化和算力需求的提升,從學(xué)術(shù)界興起的AI處理器方案已經(jīng)迅速蔓延到工業(yè)界。目前,各大互聯(lián)網(wǎng)、半導(dǎo)體、初創(chuàng)公司的方案主要分為云端、嵌入式端兩類(或稱為云側(cè)和端側(cè)),可歸納如表1.1所示若感興趣可轉(zhuǎn)到唐杉同學(xué)維護(hù)的列表:https://basicmi.github.io/Deep-Learning-Processor-List/
表1.1 深度學(xué)習(xí)處理器方案列表
圖1.3 AI處理器的發(fā)展和設(shè)計(jì)目標(biāo)
AI處理器的發(fā)展過程如圖1.3所示。在早期,對(duì)AI處理器架構(gòu)的探討源于學(xué)術(shù)界的半導(dǎo)體和體系架構(gòu)領(lǐng)域,此時(shí)模型層數(shù)較少,計(jì)算規(guī)模較小,算力較低,主要針對(duì)場(chǎng)景為嵌入式前端;隨著模型的逐漸加深,對(duì)算力的需求也相應(yīng)增加,導(dǎo)致了帶寬瓶頸,即IO問題(帶寬問題的成因詳見2.2節(jié)),此時(shí)可通過增大片內(nèi)緩存、優(yōu)化調(diào)度模型來增加數(shù)據(jù)復(fù)用率等方式解決;當(dāng)云端的AI處理需求逐漸浮出水面,多用戶、高吞吐、低延遲、高密度部署等對(duì)算力的需求進(jìn)一步提升。計(jì)算單元的劇增使IO瓶頸愈加嚴(yán)重,要解決需要付出較高代價(jià)(如增加DDR接口通道數(shù)量、片內(nèi)緩存容量、多芯片互聯(lián)等),制約了處理器實(shí)際應(yīng)用。此時(shí),片上HBM(High Bandwidth Memory,高帶寬存儲(chǔ)器)的出現(xiàn)使深度學(xué)習(xí)模型完全放到片上成為可能,集成度提升的同時(shí),使帶寬不再受制于芯片引腳的互聯(lián)數(shù)量,從而在一定程度上解決了IO瓶頸,使云端的發(fā)展方向從解決IO帶寬問題,轉(zhuǎn)向解決算力伸縮問題。
到目前為止,以HBM/HMC的應(yīng)用為標(biāo)志,云端高性能深度學(xué)習(xí)處理器的發(fā)展共經(jīng)歷了兩個(gè)階段:
1.***階段,解決IO帶寬問題;
2.第二階段,解決算力伸縮問題。
2.2 帶寬瓶頸
***階段,囊括了初期的AI處理器,以及至今的大部分嵌入式前端的解決方案,包括***代TPU、目前FPGA方案的相關(guān)構(gòu)架、寒武紀(jì)ASIC構(gòu)架,以及90%以上的學(xué)術(shù)界成果。欲達(dá)到更高的性能,一個(gè)有效的方法是大幅度提升計(jì)算核心的并行度,但算力的擴(kuò)張需要匹配相應(yīng)的IO帶寬。例如,圖1.4中的1個(gè)乘加運(yùn)算單元若運(yùn)行在500MHz的頻率下,每秒需要4GB的數(shù)據(jù)讀寫帶寬;一個(gè)典型的云端高性能FPGA(以Xilinx KU115為例)共有5520個(gè)DSP,跑滿性能需要22TB的帶寬;而一條DDR4 DIMM僅能提供19.2GB的帶寬(上述分析并不嚴(yán)謹(jǐn),但不妨礙對(duì)帶寬瓶頸的討論)。因此在***階段,設(shè)計(jì)的核心是,一方面通過共享緩存、數(shù)據(jù)調(diào)用方式的優(yōu)化等方式提升數(shù)據(jù)復(fù)用率,配合片上緩存,減少從片外存儲(chǔ)器的數(shù)據(jù)加載次數(shù)。另一方面通過模型優(yōu)化、低位寬量化、稀疏化等方式簡(jiǎn)化模型和計(jì)算。
圖1.4 一個(gè)乘加單元及其帶寬計(jì)算(累加值通常與輸出共用,故未計(jì)入帶寬)
2.3 算力伸縮
盡管片上分布的大量緩存能提供足夠的計(jì)算帶寬,但由于存儲(chǔ)結(jié)構(gòu)和工藝制約,片上緩存占用了大部分的芯片面積(通常為1/3至2/3),限制了算力提升下緩存容量的同步提升,如圖1.5所示。
圖1.5 芯片中片上緩存的規(guī)模,上圖為Google***代TPU,藍(lán)色部分為緩存區(qū)域,占用芯片面積的37%;下圖為寒武紀(jì)公司的DiaoNao AI ASIC設(shè)計(jì),緩存占面積的66.7%(NBin+NBout+SB)。
而以HBM為代表的存儲(chǔ)器堆疊技術(shù),將原本一維的存儲(chǔ)器布局?jǐn)U展到三維,大幅度提高了片上存儲(chǔ)器的密度,如圖1.6所示,標(biāo)志著高性能AI處理器進(jìn)入第二階段。但HBM的需要較高的工藝而大幅度提升了成本,因此僅出現(xiàn)在互聯(lián)網(wǎng)和半導(dǎo)體巨頭的設(shè)計(jì)中。HBM使片上緩存容量從MB級(jí)別提升到GB級(jí)別,可以將整個(gè)模型放到片上而不再需要從片外DDR中加載;同時(shí),堆疊存儲(chǔ)器提供的帶寬不再受限于芯片IO引腳的制約而得到50倍以上的提升,使帶寬不再是瓶頸。此時(shí),設(shè)計(jì)的核心在于高效的計(jì)算構(gòu)架、可伸縮的計(jì)算規(guī)模、和分布式計(jì)算能力,以應(yīng)對(duì)海量數(shù)據(jù)的訓(xùn)練和計(jì)算中的頻繁交互。
圖1.6 HBM與片內(nèi)垂直堆疊技術(shù)
目前AI構(gòu)架已從百家爭(zhēng)鳴,逐漸走向應(yīng)用。在后續(xù)的篇幅中,將對(duì)這兩個(gè)階段進(jìn)行論述。
原文鏈接:http://suo.im/3NdE0p
作者:kevinxiaoyu
【本文是51CTO專欄作者“騰訊云技術(shù)社區(qū)”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過51CTO聯(lián)系原作者獲取授權(quán)】