搜索語義模型的大規(guī)模量化實踐
1、搜索語義模型現(xiàn)狀
ERNIE: Enhanced Representation through Knowledge Integration是百度在2019年4月的時候,基于BERT模型做的進一步優(yōu)化,在中文的NLP任務上得到了state-of-the-art的結果。
近年來,ERNIE 1.0/2.0/3.0等語義模型在搜索各個重點業(yè)務場景下得到了廣泛應用,包括相關性、排序等多個子方向,消耗了大量GPU資源。每個業(yè)務方向一般由多個模型組成鏈路來完成最終計算,整體搜索業(yè)務所涉及的模型數(shù)量多、迭代快。目前,線上全流量模型超過幾百個,月級迭代近百次。語義模型的大量應用對搜索產(chǎn)生了巨大影響,相關業(yè)務指標對模型精度的變化非常敏感??偟膩碚f,在模型壓縮技術的工程實踐中,推理性能、業(yè)務指標和迭代效率三者的優(yōu)化目標應當統(tǒng)一考慮:
1、推理性能:采用INT8量化,ERNIE模型的性能加速平均達25%以上。其主要影響因素包含輸入數(shù)據(jù)量大?。╞atch size、sequence length等)、隱藏節(jié)點數(shù)、非標準網(wǎng)絡結構與算子融合優(yōu)化。
2、業(yè)務指標:以某相關性場景下的ERNIE模型為例,模型輸出在數(shù)值上的diff率不超過1%,在離線測試集上的評價指標達到幾乎無損。
3、迭代效率:離線量化達小時級,流水線式快速產(chǎn)出量化模型,不阻塞模型全生命周期的相關環(huán)節(jié)(如模型多版本迭代、小流量實驗、全量化推全等)。
2、模型量化簡述
簡而言之,模型量化就是將高精度存儲(運算)轉換為低精度存儲(運算)的一種模型壓縮技術。優(yōu)勢如下:
更少的存儲開銷與帶寬需求:如每層權重量化后,32位比特壓縮到8比特甚至更低比特,模型占用空間變?。粌?nèi)存訪問帶寬的壓力自然也會變小。
更快的計算速度:單位時間內(nèi)執(zhí)行整型計算指令比浮點計算指令更多;另,英偉達安培架構芯片還有專用INT8 Tensor core。
如果我們從不同的技術角度來看待它,那么:
- 從映射函數(shù)是否是線性,分為線性和非線性。非線性量化計算較為復雜,一般主要研究線性量化,其公式如下:Q = clip(round(R/S) + Z),其中R: high precision float number,Q:quantized integer number,s:scale,z:zero point。
- 從零點對應位置區(qū)分,線性量化又分為對稱和非對稱。
圖片
△圖1:對稱與非對稱量化
以矩陣乘為例,計算公式如下:
???????? = ???????????????? = ????????????????
???????? = ????(???? ? ????) ????(???? ? ????) = ???????????????? ? ???????????????? ? ???????????????? + ????????????????
在實際應用中,兩者精度差異不大,對稱量化在推理上更容易實現(xiàn)、計算更快。
- 從量化粒度上,分為逐層量化、逐組量化和逐通道量化。第一種在推理上最易實現(xiàn),性能更好,一般應用在輸入矩陣。第二和第三種在推理上難實現(xiàn),但業(yè)務精度好,一般應用在權重矩陣。
- 從浮點矩陣中統(tǒng)計最大值是否截斷上,分為飽和量化和非飽和量化。一般權重采用非飽和量化;輸入/輸出矩陣數(shù)據(jù)分布不均勻,采用飽和量化。
- 從是否參與訓練上,分為訓練后量化(Post-Traning Quantization,PTQ)和量化感知訓練(Quantization Aware Training, QAT)。從實踐上看,前者性價比最高,在精度損失可接受范圍內(nèi)能夠快速產(chǎn)出量化后模型,并獲得不錯的性能加速;后者需要結合訓練來看,往往是在PTQ造成精度損失過大時采取的進一步手段。
圖片
△圖2:PTQ與QAT流程
- 從是否在推理中動態(tài)生成尺度因子,分為在線(動態(tài))量化和離線(靜態(tài))量化。在線量化需要在推理過程中根據(jù)實際激活計算量化參數(shù),會影響推理速度。
3、訓練后量化
結合實際的應用場景,我們率先對訓練后INT8量化技術進行了細致研究和大規(guī)模實踐。本文中涉及到的硬件測試環(huán)境為GPU A10,CUDA 11.2,TensorRT8,工具鏈包括PaddlePaddle、PaddleInference、PaddleSlim等。
3.1 量化損失的精細化分析
低精度表示空間遠遠小于高精度表示空間,無論采用何種校準方法和校準數(shù)據(jù),量化一定會帶來不同程度上的數(shù)值誤差。為了盡可能的減小誤差、不影響模型業(yè)務指標,那么誤差的來源和解決方案應當被全面細致地探究與分析。比如,哪些算子適合量化,每個算子量化后帶來的端到端誤差如何衡量,能否將誤差較大的部分算子不作量化等問題。
3.1.1 量化算子的選擇
通常情況下,應該優(yōu)先對計算密集型算子(如mul、matmul;conv2d、depthwise_conv2d;pooling(pool2d);concat;elementwise_add等)進行量化,對非線性算子(如softmax,tanh,sigmoid,GeLU等)和非計算密集layer的算子不做量化。
圖片
△圖3:ERNIE模型經(jīng)過算子融合后的FP16推理耗時占比情況
在ERNIE模型推理時,利用性能分析工具(nsight等)觀察會發(fā)現(xiàn),F(xiàn)C(對應paddle中mul)相關kernel耗時占比超過70%,BGEMM(對應paddle中matmul)相關kernel占比接近10%。因此可以重點從這兩類算子入手進行量化,某線上ERNIE模型(輸入數(shù)據(jù)batch size=10,max sequence length=128)的測試情況如下:
圖片
△圖4:ERNIE模型FP16和INT8推理時性能加速與離線指標對比
對于FC,如果按照在推理時算子融合后網(wǎng)絡中所處的位進行劃分的話,可以人為地分成4類:
- QKV FC:推理時Q、K、V位置的3個FC會被融合在1個kernel進行計算,后續(xù)將其作為一個整體來看待。
- multi-head att-FC:經(jīng)過多頭注意力計算后的線性算子。
- FFN FC:FFN中的2個FC,第1個FC和激活函數(shù)(如relu)會融合成1個kernel,第2個FC是獨立的kernel。
- 業(yè)務FC(未體現(xiàn)在示意圖中):在主體ERNIE結構后增加若干FC進行微調(diào),應用于不同的業(yè)務場景。推理時可能也會有算子融合操作。
之所以按照上述方式進行劃分:一是劃分粒度更精細,便于觀察和判定量化誤差來源;二是盡可能與當前的推理實現(xiàn)邏輯保持一致,減少不必要的復雜改動。在算子類別+數(shù)量的多重組合下,更細粒度的量化,能更好地平衡性能加速和精度。
3.1.2 量化算子的敏感性
某層算子量化不當所帶來的損失會在層間逐漸傳遞累積,模型層數(shù)越深、寬度越大,損失可能也會越大。每層內(nèi)算子的量化誤差對端到端指標的影響也是不一樣的。在實踐中,不同業(yè)務場景或者不同模型版本之間,量化后的業(yè)務指標損失不同,不一定都能在可接受范圍內(nèi)。這種情況下,最直接的方法是找出造成損失較大的算子,并將其跳過不做量化。被量化的算子減少,損失也會隨之降低。一個12層ERNIE模型結構中至少有12*6個FC算子,絕大部分按INT8計算,只有幾個仍按FP16計算,其性能加速變化不會大,模型指標損失卻能更小。通過遍歷每個FC算子對模型指標的敏感性大小,就能判定哪些FC可以不做量化。
圖片
△圖5:量化算子的敏感性分析方法
其中,打skip quant標記的粒度與上一節(jié)中提到的FC劃分方法保持一致,比如QKV內(nèi)3個FC全量化或全不量化。EMD距離是指量化前后在某個小數(shù)據(jù)集上的輸出值之間的分布距離,距離越小則被認為敏感性越強。
案例1:線上某ERNIE模型經(jīng)過多次微調(diào)迭代后,全FC量化后的離線評價指標下降了約1.4%。利用敏感性分析方法后,跳過前8個敏感FC后,量化模型的離線評價指標損失已經(jīng)很小,性能加速仍有30%以上。
圖片
△圖6:全FC量化與跳過4個FC不作量化時的推理加速與離線指標對比
案例2:線上某ERNIE模型,全FC量化后的離線評價指標下降了2%左右。只跳過前1個敏感FC后,就很好地拉回了離線評價指標。
圖片
△圖7:全FC量化與跳過1個FC不做量化時的推理加速與離線指標對比
通過這個方法,我們能很好地兼顧性能加速和模型精度。經(jīng)過大量實驗后發(fā)現(xiàn),F(xiàn)FN內(nèi)FC往往更加敏感,對業(yè)務指標的影響更大。
3.1.3 數(shù)值統(tǒng)計分析
量化過程本質(zhì)上是尋找合適的映射函數(shù),讓量化前后的輸入/出矩陣或權重矩陣更加擬合。溯源分析,輸入/出矩陣和權重矩陣分布情況從根本上決定了量化效果的好壞。對于量化效果極差的模型,一般會對相關矩陣再進行可視化地數(shù)值統(tǒng)計分析,這樣我們能夠發(fā)現(xiàn)是否存在大量異常點,校準算法是否適用等,進而倒推出更優(yōu)的解決方法。
圖片
△圖8:ERNIE模型某FC權重數(shù)值分布的直方圖統(tǒng)計
3.2 校準數(shù)據(jù)增強
校準數(shù)據(jù)的優(yōu)劣是決定量化損失大小的重要因素之一。
在搜索某資訊業(yè)務場景中,使用了多頭輸出(一個輸出打分對應一個子任務)的ERNIE模型,如下:
圖片
△圖9:多頭輸出的模型結構示意圖
針對這個模型進行量化時,采用了訓練時部分數(shù)據(jù)作為校準集,結果發(fā)現(xiàn)子任務二的離線效果變得很差。通過分析模型訓練微調(diào)的過程后,將子任務一和子任務二的訓練數(shù)據(jù)進行等比例混合隨機后再作為校準集,量化后的離線效果均得到了滿足。
圖片
△圖10:數(shù)據(jù)增強前,子任務一和子任務二在測試集上的打分分布情況
圖片
△圖11:數(shù)據(jù)增強后,子任務一和子任務二在測試集上的打分分布情況
校準數(shù)據(jù)是從訓練/測試數(shù)據(jù)中抽取的一個小集合,應當盡可能地保持數(shù)據(jù)分布的一致性。有些模型的離線測試集并不完善,離線指標不能很好的反應量化損失,也可能會出現(xiàn)離線效果與在線實驗評價不一致的情況,此時可以將在線數(shù)據(jù)混入離線數(shù)據(jù)共同作為校準數(shù)據(jù)。另外,模型迭代通常是在解決bad case,校準數(shù)據(jù)中也應當注意bad case的比例。
3.3 超參自動尋優(yōu)
量化包括不同的校準算法(正在使用avg、abs_max、mse、KL、hist等)、校準數(shù)據(jù)量大小(batch size/num)、是否開啟偏置校準等超參,不同模型采用一組相同的量化參數(shù),其損失變化也不同,因此超參自動尋優(yōu)是必不可少的。一方面,通過自動化可以提高迭代效率;另一方面,更大的搜索空間能夠獲得比人工調(diào)參更優(yōu)的量化后模型。
圖片
△圖12:超參自動尋優(yōu)方法
具體實現(xiàn)步驟:
- 選擇初始若干組參數(shù)產(chǎn)出量化后模型,推理計算量化前后模型在校準集上的輸出值之間的分布距離(earth mover's distance,EMD)
- 根據(jù)超參和分布距離,構建隨機樹
- 隨機采樣若干組不同的參數(shù)組合,依次插入隨機樹內(nèi)進行推理并計算相關距離
- 按照上一個步驟中分布距離最短的若干組參數(shù)進行實際量化
- 從第一步再循環(huán)執(zhí)行,直到分布距離收斂
相比于人工調(diào)優(yōu),這種方法能夠更快地搜尋到更優(yōu)的量化后模型。比如:
圖片
△圖13:超參自動尋優(yōu)實踐案例
實際上,同類型業(yè)務場景下,模型結構不會有很大變動,多次微調(diào)迭代后,超參自動尋優(yōu)的參數(shù)往往會被鎖定在一個小范圍內(nèi)。因此,我們會以類漏斗形式進行量化模型尋優(yōu),即優(yōu)先在事先圈定的小范圍參數(shù)內(nèi)遍歷量化,損失不滿足要求后再進行大范圍的搜索。
3.4 效果評估
搜索業(yè)務場景多種多樣,離線評價方式各異。如果考慮量化方案的通用性和多維度評估能力,建設獨立量化損失評價指標是必要的。類似于EMD的距離度量,打分分桶分布等方法可以作為輔助性指標來使用。
△圖14:一組模型量化前后在測試集上打分/輸出的數(shù)值diff情況
4、量化感知訓練
相對于訓練后量化,量化感知訓練的模型精度更好,但流程較為復雜。一般情況下,量化感知訓練作為改善訓練后量化損失的進階技術手段。
4.1 無侵入式量化訓練
為了降低量化訓練難度,實際上我們會采用無侵入式方法,即推理模型+訓練數(shù)據(jù)。首先,對推理模型進行梯度恢復,轉換成參數(shù)可訓練的網(wǎng)絡,并插入fake quant op再轉換成量化后網(wǎng)絡;然后使用量化推理模型對量化后網(wǎng)絡進行塊量化損失監(jiān)督,進而降低量化損失。
4.2 全算子量化
因為精度問題,訓練后量化中一般只對部分算子做量化。進一步提升推理性能,對全算子量化的話,需要和量化感知訓練結合起來。全算子量化是除了mul或者matmul算子進行量化外,又增加了layer norm相關算子和中間傳參過程。
圖片
△全算子與部分算子INT8量化的模型網(wǎng)絡示意圖
全算子量化在中文場景下表現(xiàn)出一些特異性:
- 量化后激活分布異常值多,推理端量化累計誤差變大。
- QKV的輸出激活scale值較大,推理端中間層輸出為0,導致精度錯誤。
經(jīng)過摸索,可行的解決方案如下:
- 先進行訓練后量化,采用直方圖校準方式,將激活scale值限制在某個較小范圍內(nèi)。
- 固定離線量化產(chǎn)出的激活scale值,再進行權重逐通道的量化訓練。
在搜索相關性某ERNIE模型上,輸入數(shù)據(jù)batch size=20,max sequence length=128時,具體實驗情況如下:
圖片
△圖16:全算子INT8量化的性能加速與離線評價實驗結果
4.3 SmoothQuant
SmoothQuant是無訓練、保持精度和通用的訓練后量化方案,試圖解決大模型(>6.7B)量化問題。簡單來說,基于權重易量化、激活不易量化的事實,通過離線的數(shù)學等價變換將激活的難度遷移到權重上,將激活和權重都變得較容易量化。
圖片
△17:SmoothQuant核心原理 [1]
在某些量化損失較大的小模型上,我們采用量化感知訓練+SmoothQuant進行了相關實驗,也能有不錯的表現(xiàn)。比如:
圖片
△圖18:SmoothQuant實驗結果
5、展望
目前INT8量化技術已經(jīng)在線上大規(guī)模應用,使整體GPU資源利用效率得到了極大提升,也支撐了更多更復雜模型的演進。
通過總結大量實踐經(jīng)驗和技術調(diào)研,更低比特量化(如INT4)、INT8量化+Token剪枝多壓縮手段融合等正在實驗和落地中。
因為線上業(yè)務子方向眾多,模型多&迭代快,將實踐經(jīng)驗抽象出通用方案勢在必行,建設平臺化、流水線式管理模型整個生命周期能夠大幅度提高效率。同時,也可以將通用方法論應用到其他模型壓縮技術的工程應用上。
近期,大模型相關技術方向的研究相當火熱,模型壓縮也是熱點之一。初步調(diào)研后,在小模型上有效的技術手段有一部分是可以直接平遷到大模型上的,有一些則需要改進。比如,大模型訓練相當復雜,量化感知訓練看起來不是那么經(jīng)濟。根據(jù)相關業(yè)界動態(tài),PTQ-Weight Only,LLM.int8(),SmoothQuant等技術正在被研究和使用。
END
參考資料:[1]https://arxiv.org/pdf/2211.10438.pdf