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