武瓊
北京冉騰語(yǔ)云科技有限公司 北京 100000
大模型時(shí)代已然到來(lái),我們要擁抱未來(lái),改變世界。但大模型在網(wǎng)絡(luò)受限、計(jì)算資源不足的場(chǎng)景下,不能有效使用,算力低,無(wú)法滿足端側(cè)訓(xùn)練及本地化部署的問(wèn)題亟待解決。大模型加速、輕量化,是大模型能在消費(fèi)級(jí)配置中運(yùn)用的必然之路。
大模型的出現(xiàn),改變了馮諾依曼的傳統(tǒng)計(jì)算機(jī)體系結(jié)構(gòu)。處理器結(jié)構(gòu)、計(jì)算速度、計(jì)算精度等,對(duì)處理器及內(nèi)存提出了分布式存儲(chǔ)計(jì)算的要求,對(duì)體系架構(gòu)下各設(shè)備之間的輸入輸出提出了更高的要求。
大模型出現(xiàn)之前,算法與硬件是可以解耦的,但大模型的出現(xiàn),需要算法強(qiáng)依賴(lài)硬件資源,只有合理使用硬件,對(duì)硬件做到足夠優(yōu)化的基礎(chǔ)上,才能更好地支撐算法的訓(xùn)練和應(yīng)用。
目前在大模型輕量化的研究主要集中在模型量化,剪枝,蒸餾等算法層面,并未從硬件到軟件,從計(jì)算機(jī)體系角度全面貫通的大模型輕量化方法。
本文從計(jì)算機(jī)體系架構(gòu)角度,分析大模型對(duì)計(jì)算機(jī)各組成部分的優(yōu)化技術(shù)和調(diào)整方案,以滿足將大模型在消費(fèi)級(jí)移動(dòng)設(shè)備和小型設(shè)備上進(jìn)行訓(xùn)練和部署的目標(biāo)。
本文主要從計(jì)算機(jī)體系架構(gòu)的7個(gè)方面分析大模型輕量化研究進(jìn)展:①基于大模型的計(jì)算機(jī)體系架構(gòu)的變化;②處理器計(jì)算加速;③顯存加速;④輸入輸出通信傳輸加速;⑤操作系統(tǒng)加速;⑥編譯加速;⑦算法加速。
大模型技術(shù)的出現(xiàn),在計(jì)算機(jī)系統(tǒng)架構(gòu)中,最大變化是處理器,由單CPU模式變革到CPU與GPU聯(lián)合處理模式,這也是大模型得以實(shí)現(xiàn)的關(guān)鍵所在。處理器變化如下圖。
整體架構(gòu)如圖1所示。

圖1 新計(jì)算機(jī)體系架構(gòu)
1.1.1 系統(tǒng)存儲(chǔ)。
(1)L/L2L3:多級(jí)緩存,其位置一般在CPU芯片內(nèi)部。
(2)System DRAM:片外內(nèi)存,內(nèi)存條。
(3)Disk/Buffer:外部存儲(chǔ),如磁盤(pán)或者固態(tài)磁盤(pán)。
1.1.2 GPU設(shè)備存儲(chǔ)。
(1)/L2 cache:多級(jí)緩存,位置在GPU芯片內(nèi)部。
(2)GPUDRAM:通常所指顯存。
(3)GPU設(shè)備存儲(chǔ)包含許多存儲(chǔ)單元。
1.1.3 傳輸通道。
(1)PCIEBUS:PCIE標(biāo)準(zhǔn)的數(shù)據(jù)通道,數(shù)據(jù)是通過(guò)該通道從顯卡到達(dá)主機(jī)。
(2)BUS:總線。計(jì)算機(jī)內(nèi)各個(gè)存儲(chǔ)之間交互數(shù)據(jù)通道。
(3)PCIE-to-PCIE:顯卡之間通過(guò)PCIE直接傳輸數(shù)據(jù)。
(4)NVLINK:顯卡之間的一種專(zhuān)用的數(shù)據(jù)傳輸通道。
所有對(duì)大模型的優(yōu)化、加速、輕量化,都是對(duì)于體系架構(gòu)中更好利用CPU、多級(jí)內(nèi)存、GPU并行計(jì)算速度,GPU顯存更好利用,提升速度等方面的優(yōu)化。
①為了適應(yīng)大模型千億數(shù)據(jù)的并行計(jì)算,處理器由CPU單一架構(gòu),增加了GPU集群;②為了存儲(chǔ)更多的參數(shù),內(nèi)存由過(guò)去的CPU緩存,增加了多級(jí)緩存,最革新的變化為增加了大量的GPU顯存;③處理器內(nèi)部,增加了內(nèi)存到顯存、顯存到顯存的通信傳輸通道。
處理器加速的最大變革是增加了GPU。為了更好地優(yōu)化算法,最大程度節(jié)省硬件資源,需要對(duì)算法進(jìn)行算力評(píng)估。
2.1.1 訓(xùn)練算力。
訓(xùn)練算力 = 訓(xùn)練步數(shù)×每步計(jì)算量×并行度
(1)訓(xùn)練步數(shù):模型訓(xùn)練的迭代次數(shù),確保模型能夠收斂到最優(yōu)解。
(2)每步計(jì)算量:每個(gè)訓(xùn)練步驟需要的計(jì)算量,取決于模型的復(fù)雜度和訓(xùn)練數(shù)據(jù)的大小。
(3)并行度:計(jì)算設(shè)備的并行計(jì)算能力,計(jì)算設(shè)備的并行度越高,計(jì)算速度就越快。
2.1.2 參數(shù)計(jì)算。
其中:
C是訓(xùn)練transformer模型所需的計(jì)算量,單位為總浮點(diǎn)運(yùn)算數(shù)(FLOP);
C=C前向+C后向;
C前向≈ 2PD;
C后向≈ 4PD。
τ是訓(xùn)練集群的實(shí)際總吞吐量:
τ=GPU數(shù)×每GPU的實(shí)際每秒浮點(diǎn)運(yùn)算數(shù)(實(shí)際FLOPs),單位為FLOPs;
T是訓(xùn)練模型所花費(fèi)的時(shí)間,以秒為單位;
P是transformer模型的參數(shù)量;
D是數(shù)據(jù)集大小,表示為數(shù)據(jù)集的總詞元數(shù)。
2.1.3 精度計(jì)算。
精度計(jì)算如圖2所示。

圖2 精度計(jì)算結(jié)構(gòu)
GPU集群能夠支持萬(wàn)級(jí)卡的高速互聯(lián),支持各種異構(gòu)計(jì)算,包括CPU、GPU等算力的高速互聯(lián)。
GPU集群支持模型并行、數(shù)據(jù)并行、流水線并行、張量并行,大大提高計(jì)算速度。
大模型環(huán)境下,存儲(chǔ)加速考慮最多的是GPU顯存加速。
GPU的高性能已成為業(yè)界共識(shí),但單個(gè)GPU的顯存大小卻增長(zhǎng)緩慢,顯存能力成為大模型訓(xùn)練的主要瓶頸,大模型的加速目標(biāo)主要集中在對(duì)顯存的優(yōu)化與加速。首先要明確消耗顯存的來(lái)源。
①數(shù)據(jù)顯存:輸入數(shù)據(jù)和神經(jīng)網(wǎng)絡(luò)每層輸出的激活值大小受batchsize及上下文長(zhǎng)度影響;②模型顯存:權(quán)重參數(shù)、梯度參數(shù)、優(yōu)化器狀態(tài)等都直接影響顯存的性能;③臨時(shí)顯存:GPUkernel計(jì)算時(shí)用到的臨時(shí)內(nèi)存和其他緩存等。④精度計(jì)算。
①Batch size:減少每次傳入模型的樣本數(shù)量。較小的batchsize可以減少顯存的使用,但也會(huì)降低模型的訓(xùn)練效果,batchsize選擇要權(quán)衡顯存的限制和模型的性能要求;②減少模型的參數(shù)量:也就是減少模型的復(fù)雜度,減少模型的隱藏層、每層神經(jīng)元數(shù)量,但會(huì)導(dǎo)致模型的表示能力下降,影響模型性能,要選擇適當(dāng)?shù)膮?shù)量,達(dá)到兩者平衡后的最佳效果。③梯度累積技術(shù):將梯度計(jì)算結(jié)果存儲(chǔ)在顯存中,以便在計(jì)算下一批樣本時(shí)重復(fù)使用;④壓縮模型參數(shù):利用GPU集群,使用分布式存儲(chǔ)計(jì)算推理技術(shù),將模型的計(jì)算分布到多個(gè)設(shè)備上,以減少單個(gè)設(shè)備的顯存需求;⑤模型并行:將模型的參數(shù)、梯度、優(yōu)化器狀態(tài)以模型并行的方式切分到所有的GPU,利用ZeRO-Cache框架把內(nèi)存作為二級(jí)存儲(chǔ)offload卸載參數(shù)、梯度、優(yōu)化器狀態(tài)到CPU內(nèi)存;⑥數(shù)據(jù)并行:在各個(gè)GPU上都拷貝一份完整模型,各自有一份數(shù)據(jù),算一份梯度,最后對(duì)梯度進(jìn)行累加來(lái)更新整體模型;⑦流水線并行:當(dāng)模型太大,一塊GPU放不下時(shí),流水線并行將模型的不同層放到不同的GPU上,通過(guò)切分mini-batch實(shí)現(xiàn)對(duì)訓(xùn)練數(shù)據(jù)的流水線處理,提示GPU計(jì)算通信比,通過(guò)re-materialization機(jī)制降低顯存消耗;⑧內(nèi)存架構(gòu)優(yōu)化:可以采用參數(shù)服務(wù)器集中式和去中心化兩種方式。
大模型的基礎(chǔ)設(shè)施需要高性能智能計(jì)算,在萬(wàn)卡規(guī)模的網(wǎng)絡(luò)架構(gòu)中,要保證網(wǎng)絡(luò)的擴(kuò)展性,沒(méi)有擁塞,是非常困難的。大模型體系架構(gòu)的通信特點(diǎn)是,有很多集合的通信操作,集合通信可以分解為同號(hào)卡之間的集合通信,在同號(hào)卡之間構(gòu)建高速的通信通道,提升整個(gè)網(wǎng)絡(luò)的吞吐量。
大模型架構(gòu)體系的輸入輸出通信模式,也對(duì)大模型性能有很大的影響,大模型通信優(yōu)化方向:①改善網(wǎng)絡(luò)硬件資源,從物理上直接提升帶寬,降低延遲,但成本高,需要新設(shè)備及使用維護(hù)開(kāi)銷(xiāo);②采用AllReduce集合通信,減少帶寬聚合,但不利于集中管理;③增加并行度,通過(guò)重疊計(jì)算與通信減少通信獨(dú)立時(shí)間,但實(shí)現(xiàn)設(shè)計(jì)深度學(xué)習(xí)框架,修改困難;④改善同步通信算法,通過(guò)選取更合適的算法來(lái)減少通信時(shí)間,但不同環(huán)境下算法選擇不固定;⑤使用張量融合技術(shù),減少小通信包的通信時(shí)間占比,有額外的計(jì)算開(kāi)銷(xiāo),會(huì)造成異步;⑥使用異步通信算法,減小由于計(jì)算時(shí)間差導(dǎo)致的節(jié)點(diǎn)等待,但只支持PS結(jié)構(gòu),另外會(huì)造成渾濁梯度影響訓(xùn)練精度;⑦量化壓縮及稀疏化壓縮,大幅度降低通信量,造成數(shù)量信息丟失,影響訓(xùn)練精度;⑧與拓?fù)湎嚓P(guān)的網(wǎng)絡(luò)優(yōu)化,充分利用拓?fù)鋷挘薅☉?yīng)用范圍,系統(tǒng),算法實(shí)現(xiàn)難;⑨專(zhuān)用系統(tǒng)設(shè)計(jì),減少帶寬聚合,減少節(jié)點(diǎn)計(jì)算量,但硬件成本高;⑩減少通信占比,調(diào)整神經(jīng)網(wǎng)絡(luò)來(lái)降低同步參數(shù)量,但在多數(shù)環(huán)境下性能因素并非調(diào)整神經(jīng)網(wǎng)絡(luò)的主導(dǎo)因素。
大模型在內(nèi)存的分布式存儲(chǔ)與并行計(jì)算,對(duì)計(jì)算機(jī)系統(tǒng)管理提出了更高的要求,越來(lái)越多的操作系統(tǒng)管理工作放在GPU中,以及與GPU相關(guān)的CUDE中,未來(lái)大模型會(huì)是操作系統(tǒng)中的一部分。
大模型需要在更多不同操作系統(tǒng)的端側(cè)設(shè)備,如手機(jī)、汽車(chē)、智能家電等點(diǎn)在設(shè)備、VR可穿戴設(shè)備等終端設(shè)備運(yùn)行,需要有更高效的操作系統(tǒng)在硬件與軟件之間找到平衡。
①減少卷積核大小,將大卷積分解成一系列小的卷積核的操作組合,將少attention點(diǎn)積操作;②減少通道數(shù);③加強(qiáng)神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索:更少的乘法操作,更快的速度;④損失函數(shù)優(yōu)化。
對(duì)矩陣計(jì)算進(jìn)行優(yōu)化,提高計(jì)算效率和節(jié)省存儲(chǔ)空間。
6.2.1 分塊矩陣乘法:將矩陣劃分成小矩陣的塊,通過(guò)重新組合計(jì)算順序來(lái)減少計(jì)算量。可以利用矩陣的局部性,將少內(nèi)存訪問(wèn)次數(shù),提高計(jì)算效率。
6.2.2 并行計(jì)算的矩陣乘法優(yōu)化:將大矩陣分解成多個(gè)子矩陣,分配給不同的處理器進(jìn)行并行計(jì)算,加快計(jì)算速度。
6.2.3 矩陣轉(zhuǎn)置優(yōu)化:交換矩陣的行和列,需要使用額外的存儲(chǔ)空間,時(shí)間復(fù)雜度高。
6.2.4 矩陣分解優(yōu)化:將一個(gè)矩陣分解成多個(gè)子矩陣,常用的矩陣分解方法LU分解、QR分解、奇異值分解。
大模型網(wǎng)絡(luò)結(jié)構(gòu)中,有大量的冗余參數(shù),在推理過(guò)程中,僅有少部分的權(quán)值與有效計(jì)算,并對(duì)推理結(jié)果產(chǎn)生主要影響。剪枝方法通過(guò)把網(wǎng)絡(luò)結(jié)構(gòu)中冗余的權(quán)值、節(jié)點(diǎn)或?qū)尤サ簦瑴p少網(wǎng)絡(luò)的規(guī)模,降低復(fù)雜度。
6.3.1 剪枝原理:訓(xùn)練一個(gè)性能較好的原始模型,參數(shù)巨大,推理速度慢。判斷原模型中參數(shù)的重要程度,去除重要程度較低的參數(shù),在訓(xùn)練集上微調(diào),盡量避免由于網(wǎng)絡(luò)結(jié)構(gòu)變化而出現(xiàn)的性能下降,判斷模型大小、推理速度、效果等是否滿足要求,不滿足繼續(xù)剪枝。
6.3.2 非結(jié)構(gòu)化剪枝:權(quán)重剪枝,神經(jīng)元剪枝。
6.3.3 結(jié)構(gòu)化剪枝:卷積剪枝,跨多層剪枝。
6.3.4 Channel-wise: 通道剪枝[2]。
6.3.5 Stripe-wise pruning:[3]。
大模型中計(jì)算量非常大,需要GPU等專(zhuān)用的計(jì)算pintail才能實(shí)現(xiàn)實(shí)時(shí)運(yùn)算,這對(duì)于端上產(chǎn)品是不可接受的,模型量化就是減少計(jì)算量的方法。量化,對(duì)模型網(wǎng)絡(luò)的權(quán)值,激活值等從高精度轉(zhuǎn)化成低精度的操作過(guò)程,模型量化優(yōu)勢(shì)如下。
6.4.1 量化方法。①聚類(lèi)量化[4];②對(duì)數(shù)量化;③二值量化;④對(duì)稱(chēng)量化;⑤非對(duì)稱(chēng)量化;⑥訓(xùn)練后量化和訓(xùn)練感知量化。
6.4.2 量化步驟。①選擇合適的量化方法,確定選用的對(duì)稱(chēng)量化或非對(duì)稱(chēng)量化;②統(tǒng)計(jì)輸輸入數(shù)據(jù)的數(shù)值區(qū)間;③根據(jù)量化方法,輸入?yún)^(qū)間,計(jì)算量化參數(shù),零點(diǎn)值,縮放系數(shù);④根據(jù)轉(zhuǎn)換公式,對(duì)輸入的float32精度的數(shù)據(jù)轉(zhuǎn)換為int8精度數(shù)據(jù);⑤驗(yàn)證量化后的模型效果。
大模型結(jié)構(gòu)復(fù)雜,但有良好的性能和泛化能力,小模型網(wǎng)絡(luò)規(guī)模小,表達(dá)能力有限,利用大模型學(xué)習(xí)到的知識(shí)去指導(dǎo)小模型訓(xùn)練,使得小模型具有與大模型相當(dāng)?shù)男阅埽箙?shù)量大福降低,可實(shí)現(xiàn)大模型輕量化。
6.5.1 知識(shí)蒸餾一般流程。
知識(shí)蒸餾如圖3所示。

圖3 知識(shí)蒸餾一般流程
6.5.2 知識(shí)蒸餾方法。①利用蒸餾損失函數(shù)刻畫(huà)的教師神經(jīng)網(wǎng)絡(luò)中的知識(shí)在蒸餾過(guò)程中的丟失程度;②多教師知識(shí)蒸餾;③融合圖神經(jīng)網(wǎng)絡(luò)的知識(shí)蒸餾;④結(jié)合多模態(tài)的知識(shí)蒸餾。
編譯器是連接算法和體系結(jié)構(gòu)的部分,是解決訓(xùn)練環(huán)境與部署環(huán)境不一致的直接方法。一般通過(guò)大模型特有的深度學(xué)習(xí)訓(xùn)練框架,作為訓(xùn)練環(huán)境和部署環(huán)境的中間層,在中間層表示做系列標(biāo)準(zhǔn)的流圖優(yōu)化操作(loop調(diào)度,算子融合等),最后在按需求生成各自目標(biāo)平臺(tái)的機(jī)器碼。常用的大模型編譯器:①TVM:實(shí)現(xiàn)算子代碼的自動(dòng)生成;②TensorflowXLA:是一種優(yōu)化TensorFlow計(jì)算的編譯器,可以提高服務(wù)器的移動(dòng)平臺(tái)的速度,改進(jìn)內(nèi)存使用、提升便攜性和可移植性;③PytorchGlow:Glow是一個(gè)機(jī)器學(xué)習(xí)編譯器和執(zhí)行引擎,可以面向多種硬件;④DeepSpeed:微軟開(kāi)源的一個(gè)LLM模型訓(xùn)練推理加速工具,并在此編譯框架下復(fù)現(xiàn)了instructGPT論文工作,可以將速度提升15倍以上。DeepSpeed提供了GPU加速、模型壓縮、ZeRO優(yōu)化、自動(dòng)混合精度、算力預(yù)測(cè)等功能,支持多種編程語(yǔ)言和編譯框架,如Python、PyTorch、TensorFlow、JAX等編譯器。
全文從計(jì)算機(jī)體系架構(gòu)角度,從底層硬件到上層軟件,對(duì)目前存在的LLM大模型加速方進(jìn)行總結(jié)分析,建立了一種全視角LLM大模型加速的思路,有利于下一步通過(guò)計(jì)算機(jī)體系架構(gòu)整體研究LLM大模型加速。