自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

搜索語(yǔ)義模型的大規(guī)模量化實(shí)踐

人工智能 算法
經(jīng)過(guò)近幾年的技術(shù)演進(jìn),語(yǔ)義模型在百度搜索場(chǎng)景中被廣泛地應(yīng)用,消耗了大量的GPU資源,模型壓縮技術(shù)也隨之得到大量研究和實(shí)踐。通過(guò)兼顧推理性能、業(yè)務(wù)效果和迭代效率的優(yōu)化目標(biāo),我們成功地將INT8量化技術(shù)大面積地應(yīng)用到了搜索場(chǎng)景中,極大地提高了資源效能。

1、搜索語(yǔ)義模型現(xiàn)狀

ERNIE: Enhanced Representation through Knowledge Integration是百度在2019年4月的時(shí)候,基于BERT模型做的進(jìn)一步優(yōu)化,在中文的NLP任務(wù)上得到了state-of-the-art的結(jié)果。

近年來(lái),ERNIE 1.0/2.0/3.0等語(yǔ)義模型在搜索各個(gè)重點(diǎn)業(yè)務(wù)場(chǎng)景下得到了廣泛應(yīng)用,包括相關(guān)性、排序等多個(gè)子方向,消耗了大量GPU資源。每個(gè)業(yè)務(wù)方向一般由多個(gè)模型組成鏈路來(lái)完成最終計(jì)算,整體搜索業(yè)務(wù)所涉及的模型數(shù)量多、迭代快。目前,線上全流量模型超過(guò)幾百個(gè),月級(jí)迭代近百次。語(yǔ)義模型的大量應(yīng)用對(duì)搜索產(chǎn)生了巨大影響,相關(guān)業(yè)務(wù)指標(biāo)對(duì)模型精度的變化非常敏感??偟膩?lái)說(shuō),在模型壓縮技術(shù)的工程實(shí)踐中,推理性能、業(yè)務(wù)指標(biāo)和迭代效率三者的優(yōu)化目標(biāo)應(yīng)當(dāng)統(tǒng)一考慮:

1、推理性能:采用INT8量化,ERNIE模型的性能加速平均達(dá)25%以上。其主要影響因素包含輸入數(shù)據(jù)量大?。╞atch size、sequence length等)、隱藏節(jié)點(diǎn)數(shù)、非標(biāo)準(zhǔn)網(wǎng)絡(luò)結(jié)構(gòu)與算子融合優(yōu)化。

2、業(yè)務(wù)指標(biāo):以某相關(guān)性場(chǎng)景下的ERNIE模型為例,模型輸出在數(shù)值上的diff率不超過(guò)1%,在離線測(cè)試集上的評(píng)價(jià)指標(biāo)達(dá)到幾乎無(wú)損。

3、迭代效率:離線量化達(dá)小時(shí)級(jí),流水線式快速產(chǎn)出量化模型,不阻塞模型全生命周期的相關(guān)環(huán)節(jié)(如模型多版本迭代、小流量實(shí)驗(yàn)、全量化推全等)。

2、模型量化簡(jiǎn)述

簡(jiǎn)而言之,模型量化就是將高精度存儲(chǔ)(運(yùn)算)轉(zhuǎn)換為低精度存儲(chǔ)(運(yùn)算)的一種模型壓縮技術(shù)。優(yōu)勢(shì)如下:

更少的存儲(chǔ)開銷與帶寬需求:如每層權(quán)重量化后,32位比特壓縮到8比特甚至更低比特,模型占用空間變??;內(nèi)存訪問(wèn)帶寬的壓力自然也會(huì)變小。

更快的計(jì)算速度:?jiǎn)挝粫r(shí)間內(nèi)執(zhí)行整型計(jì)算指令比浮點(diǎn)計(jì)算指令更多;另,英偉達(dá)安培架構(gòu)芯片還有專用INT8 Tensor core。

如果我們從不同的技術(shù)角度來(lái)看待它,那么:

  • 從映射函數(shù)是否是線性,分為線性和非線性。非線性量化計(jì)算較為復(fù)雜,一般主要研究線性量化,其公式如下:Q = clip(round(R/S) + Z),其中R: high precision float number,Q:quantized integer number,s:scale,z:zero point。
  • 從零點(diǎn)對(duì)應(yīng)位置區(qū)分,線性量化又分為對(duì)稱和非對(duì)稱。

圖片圖片

△圖1:對(duì)稱與非對(duì)稱量化

以矩陣乘為例,計(jì)算公式如下:

???????? = ???????????????? = ????????????????

???????? = ????(???? ? ????) ????(???? ? ????) = ???????????????? ? ???????????????? ? ???????????????? + ????????????????

在實(shí)際應(yīng)用中,兩者精度差異不大,對(duì)稱量化在推理上更容易實(shí)現(xiàn)、計(jì)算更快。

  • 從量化粒度上,分為逐層量化、逐組量化和逐通道量化。第一種在推理上最易實(shí)現(xiàn),性能更好,一般應(yīng)用在輸入矩陣。第二和第三種在推理上難實(shí)現(xiàn),但業(yè)務(wù)精度好,一般應(yīng)用在權(quán)重矩陣。
  • 從浮點(diǎn)矩陣中統(tǒng)計(jì)最大值是否截?cái)嗌?,分為飽和量化和非飽和量化。一般?quán)重采用非飽和量化;輸入/輸出矩陣數(shù)據(jù)分布不均勻,采用飽和量化。
  • 從是否參與訓(xùn)練上,分為訓(xùn)練后量化(Post-Traning Quantization,PTQ)和量化感知訓(xùn)練(Quantization Aware Training, QAT)。從實(shí)踐上看,前者性價(jià)比最高,在精度損失可接受范圍內(nèi)能夠快速產(chǎn)出量化后模型,并獲得不錯(cuò)的性能加速;后者需要結(jié)合訓(xùn)練來(lái)看,往往是在PTQ造成精度損失過(guò)大時(shí)采取的進(jìn)一步手段。

圖片圖片

△圖2:PTQ與QAT流程

  • 從是否在推理中動(dòng)態(tài)生成尺度因子,分為在線(動(dòng)態(tài))量化和離線(靜態(tài))量化。在線量化需要在推理過(guò)程中根據(jù)實(shí)際激活計(jì)算量化參數(shù),會(huì)影響推理速度。

3、訓(xùn)練后量化

結(jié)合實(shí)際的應(yīng)用場(chǎng)景,我們率先對(duì)訓(xùn)練后INT8量化技術(shù)進(jìn)行了細(xì)致研究和大規(guī)模實(shí)踐。本文中涉及到的硬件測(cè)試環(huán)境為GPU A10,CUDA 11.2,TensorRT8,工具鏈包括PaddlePaddle、PaddleInference、PaddleSlim等。

3.1 量化損失的精細(xì)化分析

低精度表示空間遠(yuǎn)遠(yuǎn)小于高精度表示空間,無(wú)論采用何種校準(zhǔn)方法和校準(zhǔn)數(shù)據(jù),量化一定會(huì)帶來(lái)不同程度上的數(shù)值誤差。為了盡可能的減小誤差、不影響模型業(yè)務(wù)指標(biāo),那么誤差的來(lái)源和解決方案應(yīng)當(dāng)被全面細(xì)致地探究與分析。比如,哪些算子適合量化,每個(gè)算子量化后帶來(lái)的端到端誤差如何衡量,能否將誤差較大的部分算子不作量化等問(wèn)題。

3.1.1 量化算子的選擇

通常情況下,應(yīng)該優(yōu)先對(duì)計(jì)算密集型算子(如mul、matmul;conv2d、depthwise_conv2d;pooling(pool2d);concat;elementwise_add等)進(jìn)行量化,對(duì)非線性算子(如softmax,tanh,sigmoid,GeLU等)和非計(jì)算密集layer的算子不做量化。

圖片圖片

△圖3:ERNIE模型經(jīng)過(guò)算子融合后的FP16推理耗時(shí)占比情況

在ERNIE模型推理時(shí),利用性能分析工具(nsight等)觀察會(huì)發(fā)現(xiàn),F(xiàn)C(對(duì)應(yīng)paddle中mul)相關(guān)kernel耗時(shí)占比超過(guò)70%,BGEMM(對(duì)應(yīng)paddle中matmul)相關(guān)kernel占比接近10%。因此可以重點(diǎn)從這兩類算子入手進(jìn)行量化,某線上ERNIE模型(輸入數(shù)據(jù)batch size=10,max sequence length=128)的測(cè)試情況如下:

圖片圖片

△圖4:ERNIE模型FP16和INT8推理時(shí)性能加速與離線指標(biāo)對(duì)比

對(duì)于FC,如果按照在推理時(shí)算子融合后網(wǎng)絡(luò)中所處的位進(jìn)行劃分的話,可以人為地分成4類:

  • QKV FC:推理時(shí)Q、K、V位置的3個(gè)FC會(huì)被融合在1個(gè)kernel進(jìn)行計(jì)算,后續(xù)將其作為一個(gè)整體來(lái)看待。
  • multi-head att-FC:經(jīng)過(guò)多頭注意力計(jì)算后的線性算子。
  • FFN FC:FFN中的2個(gè)FC,第1個(gè)FC和激活函數(shù)(如relu)會(huì)融合成1個(gè)kernel,第2個(gè)FC是獨(dú)立的kernel。
  • 業(yè)務(wù)FC(未體現(xiàn)在示意圖中):在主體ERNIE結(jié)構(gòu)后增加若干FC進(jìn)行微調(diào),應(yīng)用于不同的業(yè)務(wù)場(chǎng)景。推理時(shí)可能也會(huì)有算子融合操作。

之所以按照上述方式進(jìn)行劃分:一是劃分粒度更精細(xì),便于觀察和判定量化誤差來(lái)源;二是盡可能與當(dāng)前的推理實(shí)現(xiàn)邏輯保持一致,減少不必要的復(fù)雜改動(dòng)。在算子類別+數(shù)量的多重組合下,更細(xì)粒度的量化,能更好地平衡性能加速和精度。

3.1.2 量化算子的敏感性

某層算子量化不當(dāng)所帶來(lái)的損失會(huì)在層間逐漸傳遞累積,模型層數(shù)越深、寬度越大,損失可能也會(huì)越大。每層內(nèi)算子的量化誤差對(duì)端到端指標(biāo)的影響也是不一樣的。在實(shí)踐中,不同業(yè)務(wù)場(chǎng)景或者不同模型版本之間,量化后的業(yè)務(wù)指標(biāo)損失不同,不一定都能在可接受范圍內(nèi)。這種情況下,最直接的方法是找出造成損失較大的算子,并將其跳過(guò)不做量化。被量化的算子減少,損失也會(huì)隨之降低。一個(gè)12層ERNIE模型結(jié)構(gòu)中至少有12*6個(gè)FC算子,絕大部分按INT8計(jì)算,只有幾個(gè)仍按FP16計(jì)算,其性能加速變化不會(huì)大,模型指標(biāo)損失卻能更小。通過(guò)遍歷每個(gè)FC算子對(duì)模型指標(biāo)的敏感性大小,就能判定哪些FC可以不做量化。

圖片圖片

△圖5:量化算子的敏感性分析方法

其中,打skip quant標(biāo)記的粒度與上一節(jié)中提到的FC劃分方法保持一致,比如QKV內(nèi)3個(gè)FC全量化或全不量化。EMD距離是指量化前后在某個(gè)小數(shù)據(jù)集上的輸出值之間的分布距離,距離越小則被認(rèn)為敏感性越強(qiáng)。

案例1:線上某ERNIE模型經(jīng)過(guò)多次微調(diào)迭代后,全FC量化后的離線評(píng)價(jià)指標(biāo)下降了約1.4%。利用敏感性分析方法后,跳過(guò)前8個(gè)敏感FC后,量化模型的離線評(píng)價(jià)指標(biāo)損失已經(jīng)很小,性能加速仍有30%以上。

圖片圖片

△圖6:全FC量化與跳過(guò)4個(gè)FC不作量化時(shí)的推理加速與離線指標(biāo)對(duì)比

案例2:線上某ERNIE模型,全FC量化后的離線評(píng)價(jià)指標(biāo)下降了2%左右。只跳過(guò)前1個(gè)敏感FC后,就很好地拉回了離線評(píng)價(jià)指標(biāo)。

圖片圖片

△圖7:全FC量化與跳過(guò)1個(gè)FC不做量化時(shí)的推理加速與離線指標(biāo)對(duì)比

通過(guò)這個(gè)方法,我們能很好地兼顧性能加速和模型精度。經(jīng)過(guò)大量實(shí)驗(yàn)后發(fā)現(xiàn),F(xiàn)FN內(nèi)FC往往更加敏感,對(duì)業(yè)務(wù)指標(biāo)的影響更大。

3.1.3 數(shù)值統(tǒng)計(jì)分析

量化過(guò)程本質(zhì)上是尋找合適的映射函數(shù),讓量化前后的輸入/出矩陣或權(quán)重矩陣更加擬合。溯源分析,輸入/出矩陣和權(quán)重矩陣分布情況從根本上決定了量化效果的好壞。對(duì)于量化效果極差的模型,一般會(huì)對(duì)相關(guān)矩陣再進(jìn)行可視化地?cái)?shù)值統(tǒng)計(jì)分析,這樣我們能夠發(fā)現(xiàn)是否存在大量異常點(diǎn),校準(zhǔn)算法是否適用等,進(jìn)而倒推出更優(yōu)的解決方法。

圖片圖片

△圖8:ERNIE模型某FC權(quán)重?cái)?shù)值分布的直方圖統(tǒng)計(jì)

3.2 校準(zhǔn)數(shù)據(jù)增強(qiáng)

校準(zhǔn)數(shù)據(jù)的優(yōu)劣是決定量化損失大小的重要因素之一。

在搜索某資訊業(yè)務(wù)場(chǎng)景中,使用了多頭輸出(一個(gè)輸出打分對(duì)應(yīng)一個(gè)子任務(wù))的ERNIE模型,如下:

圖片圖片

△圖9:多頭輸出的模型結(jié)構(gòu)示意圖

針對(duì)這個(gè)模型進(jìn)行量化時(shí),采用了訓(xùn)練時(shí)部分?jǐn)?shù)據(jù)作為校準(zhǔn)集,結(jié)果發(fā)現(xiàn)子任務(wù)二的離線效果變得很差。通過(guò)分析模型訓(xùn)練微調(diào)的過(guò)程后,將子任務(wù)一和子任務(wù)二的訓(xùn)練數(shù)據(jù)進(jìn)行等比例混合隨機(jī)后再作為校準(zhǔn)集,量化后的離線效果均得到了滿足。

圖片圖片

△圖10:數(shù)據(jù)增強(qiáng)前,子任務(wù)一和子任務(wù)二在測(cè)試集上的打分分布情況

圖片圖片

△圖11:數(shù)據(jù)增強(qiáng)后,子任務(wù)一和子任務(wù)二在測(cè)試集上的打分分布情況

校準(zhǔn)數(shù)據(jù)是從訓(xùn)練/測(cè)試數(shù)據(jù)中抽取的一個(gè)小集合,應(yīng)當(dāng)盡可能地保持?jǐn)?shù)據(jù)分布的一致性。有些模型的離線測(cè)試集并不完善,離線指標(biāo)不能很好的反應(yīng)量化損失,也可能會(huì)出現(xiàn)離線效果與在線實(shí)驗(yàn)評(píng)價(jià)不一致的情況,此時(shí)可以將在線數(shù)據(jù)混入離線數(shù)據(jù)共同作為校準(zhǔn)數(shù)據(jù)。另外,模型迭代通常是在解決bad case,校準(zhǔn)數(shù)據(jù)中也應(yīng)當(dāng)注意bad case的比例。

3.3 超參自動(dòng)尋優(yōu)

量化包括不同的校準(zhǔn)算法(正在使用avg、abs_max、mse、KL、hist等)、校準(zhǔn)數(shù)據(jù)量大小(batch size/num)、是否開啟偏置校準(zhǔn)等超參,不同模型采用一組相同的量化參數(shù),其損失變化也不同,因此超參自動(dòng)尋優(yōu)是必不可少的。一方面,通過(guò)自動(dòng)化可以提高迭代效率;另一方面,更大的搜索空間能夠獲得比人工調(diào)參更優(yōu)的量化后模型。

圖片圖片

△圖12:超參自動(dòng)尋優(yōu)方法

具體實(shí)現(xiàn)步驟:

  • 選擇初始若干組參數(shù)產(chǎn)出量化后模型,推理計(jì)算量化前后模型在校準(zhǔn)集上的輸出值之間的分布距離(earth mover's distance,EMD)
  • 根據(jù)超參和分布距離,構(gòu)建隨機(jī)樹
  • 隨機(jī)采樣若干組不同的參數(shù)組合,依次插入隨機(jī)樹內(nèi)進(jìn)行推理并計(jì)算相關(guān)距離
  • 按照上一個(gè)步驟中分布距離最短的若干組參數(shù)進(jìn)行實(shí)際量化
  • 從第一步再循環(huán)執(zhí)行,直到分布距離收斂

相比于人工調(diào)優(yōu),這種方法能夠更快地搜尋到更優(yōu)的量化后模型。比如:

圖片圖片

△圖13:超參自動(dòng)尋優(yōu)實(shí)踐案例

實(shí)際上,同類型業(yè)務(wù)場(chǎng)景下,模型結(jié)構(gòu)不會(huì)有很大變動(dòng),多次微調(diào)迭代后,超參自動(dòng)尋優(yōu)的參數(shù)往往會(huì)被鎖定在一個(gè)小范圍內(nèi)。因此,我們會(huì)以類漏斗形式進(jìn)行量化模型尋優(yōu),即優(yōu)先在事先圈定的小范圍參數(shù)內(nèi)遍歷量化,損失不滿足要求后再進(jìn)行大范圍的搜索。

3.4 效果評(píng)估

搜索業(yè)務(wù)場(chǎng)景多種多樣,離線評(píng)價(jià)方式各異。如果考慮量化方案的通用性和多維度評(píng)估能力,建設(shè)獨(dú)立量化損失評(píng)價(jià)指標(biāo)是必要的。類似于EMD的距離度量,打分分桶分布等方法可以作為輔助性指標(biāo)來(lái)使用。

圖片

△圖14:一組模型量化前后在測(cè)試集上打分/輸出的數(shù)值diff情況


4、量化感知訓(xùn)練

相對(duì)于訓(xùn)練后量化,量化感知訓(xùn)練的模型精度更好,但流程較為復(fù)雜。一般情況下,量化感知訓(xùn)練作為改善訓(xùn)練后量化損失的進(jìn)階技術(shù)手段。

4.1 無(wú)侵入式量化訓(xùn)練

為了降低量化訓(xùn)練難度,實(shí)際上我們會(huì)采用無(wú)侵入式方法,即推理模型+訓(xùn)練數(shù)據(jù)。首先,對(duì)推理模型進(jìn)行梯度恢復(fù),轉(zhuǎn)換成參數(shù)可訓(xùn)練的網(wǎng)絡(luò),并插入fake quant op再轉(zhuǎn)換成量化后網(wǎng)絡(luò);然后使用量化推理模型對(duì)量化后網(wǎng)絡(luò)進(jìn)行塊量化損失監(jiān)督,進(jìn)而降低量化損失。

4.2 全算子量化

因?yàn)榫葐?wèn)題,訓(xùn)練后量化中一般只對(duì)部分算子做量化。進(jìn)一步提升推理性能,對(duì)全算子量化的話,需要和量化感知訓(xùn)練結(jié)合起來(lái)。全算子量化是除了mul或者matmul算子進(jìn)行量化外,又增加了layer norm相關(guān)算子和中間傳參過(guò)程。

圖片圖片

△全算子與部分算子INT8量化的模型網(wǎng)絡(luò)示意圖

全算子量化在中文場(chǎng)景下表現(xiàn)出一些特異性:

  • 量化后激活分布異常值多,推理端量化累計(jì)誤差變大。
  • QKV的輸出激活scale值較大,推理端中間層輸出為0,導(dǎo)致精度錯(cuò)誤。

經(jīng)過(guò)摸索,可行的解決方案如下:

  • 先進(jìn)行訓(xùn)練后量化,采用直方圖校準(zhǔn)方式,將激活scale值限制在某個(gè)較小范圍內(nèi)。
  • 固定離線量化產(chǎn)出的激活scale值,再進(jìn)行權(quán)重逐通道的量化訓(xùn)練。

在搜索相關(guān)性某ERNIE模型上,輸入數(shù)據(jù)batch size=20,max sequence length=128時(shí),具體實(shí)驗(yàn)情況如下:

圖片圖片

△圖16:全算子INT8量化的性能加速與離線評(píng)價(jià)實(shí)驗(yàn)結(jié)果

4.3 SmoothQuant

SmoothQuant是無(wú)訓(xùn)練、保持精度和通用的訓(xùn)練后量化方案,試圖解決大模型(>6.7B)量化問(wèn)題。簡(jiǎn)單來(lái)說(shuō),基于權(quán)重易量化、激活不易量化的事實(shí),通過(guò)離線的數(shù)學(xué)等價(jià)變換將激活的難度遷移到權(quán)重上,將激活和權(quán)重都變得較容易量化。

圖片圖片

△17:SmoothQuant核心原理 [1]

在某些量化損失較大的小模型上,我們采用量化感知訓(xùn)練+SmoothQuant進(jìn)行了相關(guān)實(shí)驗(yàn),也能有不錯(cuò)的表現(xiàn)。比如:

圖片圖片

△圖18:SmoothQuant實(shí)驗(yàn)結(jié)果


5、展望

目前INT8量化技術(shù)已經(jīng)在線上大規(guī)模應(yīng)用,使整體GPU資源利用效率得到了極大提升,也支撐了更多更復(fù)雜模型的演進(jìn)。

通過(guò)總結(jié)大量實(shí)踐經(jīng)驗(yàn)和技術(shù)調(diào)研,更低比特量化(如INT4)、INT8量化+Token剪枝多壓縮手段融合等正在實(shí)驗(yàn)和落地中。

因?yàn)榫€上業(yè)務(wù)子方向眾多,模型多&迭代快,將實(shí)踐經(jīng)驗(yàn)抽象出通用方案勢(shì)在必行,建設(shè)平臺(tái)化、流水線式管理模型整個(gè)生命周期能夠大幅度提高效率。同時(shí),也可以將通用方法論應(yīng)用到其他模型壓縮技術(shù)的工程應(yīng)用上。

近期,大模型相關(guān)技術(shù)方向的研究相當(dāng)火熱,模型壓縮也是熱點(diǎn)之一。初步調(diào)研后,在小模型上有效的技術(shù)手段有一部分是可以直接平遷到大模型上的,有一些則需要改進(jìn)。比如,大模型訓(xùn)練相當(dāng)復(fù)雜,量化感知訓(xùn)練看起來(lái)不是那么經(jīng)濟(jì)。根據(jù)相關(guān)業(yè)界動(dòng)態(tài),PTQ-Weight Only,LLM.int8(),SmoothQuant等技術(shù)正在被研究和使用。

 END

參考資料:[1]https://arxiv.org/pdf/2211.10438.pdf

責(zé)任編輯:武曉燕 來(lái)源: 百度Geek說(shuō)
相關(guān)推薦

2022-07-07 11:00:09

美團(tuán)模型實(shí)踐

2023-07-10 07:42:38

2021-04-22 13:38:21

前端開發(fā)技術(shù)

2013-03-22 14:44:52

大規(guī)模分布式系統(tǒng)飛天開放平臺(tái)

2023-01-03 16:54:27

字節(jié)跳動(dòng)深度學(xué)習(xí)

2023-05-26 08:39:44

深度學(xué)習(xí)Alluxio

2020-06-10 10:00:53

Serverless數(shù)據(jù)處理函數(shù)

2025-03-06 10:33:04

2016-01-12 14:59:40

分布式存儲(chǔ)分布式存儲(chǔ)架構(gòu)

2023-04-04 07:32:35

TorchRec模型訓(xùn)練

2024-01-10 18:49:47

2024-09-26 10:41:31

2017-01-11 15:54:53

SDN網(wǎng)絡(luò)數(shù)據(jù)中心中國(guó)移動(dòng)

2025-02-18 09:48:58

2021-09-06 11:15:05

數(shù)據(jù)治理字節(jié)跳動(dòng)埋點(diǎn)

2022-03-15 18:33:34

URL重構(gòu)Dubbo3.0

2016-04-15 00:43:13

2023-07-31 10:21:56

數(shù)據(jù)中心運(yùn)營(yíng)商

2024-06-18 09:43:26

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)