今天小編分享的科學經驗:十億參數,一鍵瘦身!「模型減重」神器讓大模型狂掉3/4,歡迎閱讀。
本文介紹了可提升大語言模型的訓練後量化表現的增強型 SmoothQuant 技術,說明了這項技術的用法,并證明了其在準确率方面的優勢。此方法已整合至英特爾 ® Neural Compressor [ 1 ] 中。
英特爾 ® Neural Compressor 是一個包含量化、剪枝(稀疏性)、蒸餾(知識提煉)和神經架構搜索等多種常用模型壓縮技術的開源 Python 庫。
目前,諸如 TensorFlow、英特爾 ® Extension for TensorFlow [ 2 ] 、PyTorch、英特爾 ® Extension for PyTorch [ 3 ] 、ONNX Runtime 和 MXNet 等主流框架,都能與之兼容。
英特爾 ® Neural Compressor 已經支持多款英特爾 ® 架構的硬體,比如英特爾 ® 至強 ® 可擴展處理器 [ 4 ] 、英特爾 ® 至強 ® CPU Max 系列 [ 5 ] 、英特爾 ® 數據中心 GPU Flex 系列 [ 6 ] 和英特爾 ® 數據中心 GPU Max 系列 [ 7 ] 。本文涉及的實驗基于第四代英特 ® 至強 ® 可擴展處理器 [ 8 ] 進行。
大語言模型
大語言模型 ( Large Language Model, LLM ) 需基于海量數據集進行訓練,可能擁有數十億權重參數。
其先進的網絡結構和龐大的參數量,使它們能夠很好地應對自然語言本身的復雜性。
完成訓練後的大語言模型,可針對各種下遊的自然語言處理 ( NLP ) 和自然語言生成 ( NLG ) 任務進行調優,讓其更适合對話式聊天機器人(如 ChatGPT)、機器翻譯、文本分類、欺詐檢測和情感分析等任務場景。
大語言模型部署面臨的挑戰
大語言模型在執行自然語言處理和自然語言生成任務方面表現出色,但其訓練和部署頗為復雜,主要面臨以下挑戰:
AI 與内存牆瓶頸問題 [ 9 ] :算力每兩年提高 3.1 倍,内存帶寬卻只提高 1.4 倍;
網絡帶寬挑戰:訓練大語言模型需要采用分布式系統,這對網絡帶寬提出了較高要求;
系統資源有限:訓練後的模型往往會部署在算力和内存資源均有限的系統上。
因此,采用訓練後量化的方法來為大語言模型瘦身,對于實現低時延推理至關重要。
大語言模型的量化
量化是一種常見的壓縮操作,可以減少模型占用的内存空間,提高推理性能。
采用量化方法可以降低大語言模型部署的難度。具體來說,量化是将浮點矩陣轉換為整數矩陣:
其中 X_fp32、S 和 Z 分别為輸入矩陣、比例因子和整數零點。
有關每通道 ( per-channel ) 量化策略雖然可能會減少量化損失,但不能用于激活值量化的原因,請參看 SmoothQuant 相關文檔 [ 10 ] 。
不過,激活值量化誤差損失卻是導致模型量化準确率下降的重要因素。
為此,人們提出了很多方法來降低激活值量化損失,例如:SPIQ [ 11 ] 、Outlier Suppression [ 12 ] 和 SmoothQuant [ 13 ] 。
這三種方法思路相似,即把激活值量化的難度轉移到權重量化上,只是三者在轉移難度的多少上有所不同。
增強型 SmoothQuant
SmoothQuant 引入了一個超參數 α 作為平滑因子來計算每個通道的量化比例因子,并平衡激活值和權重的量化難度。
其中 j 是輸入通道索引。
對于 OPT 和 BLOOM 等大多數模型來說,α =0.5 是一個能夠較好實現權重和激活值量化難度分割的平衡值。模型的激活異常值越大,就越需要使用更大的 α 值來将更多的量化難度轉移到權重上。
原始的 SmoothQuant 旨在通過針對整個模型使用一個固定值 α 來分割權重和激活值的量化難度。
然而,由于激活異常值的分布不僅在不同模型之間存在差異,而且在同一模型的不同層之間也不盡相同。
因此,本文推薦使用英特爾 ® Neural Compressor 的自動調優能力,逐層獲取最佳 α 值。
相關方法包括以下五個主要步驟(偽代碼如下所示):
通過特殊的回調函數 register_forward_hook 捕獲 ( hook ) 模型各層的輸入和輸出值。
根據用戶定義的 α 範圍和步長生成一個 α 值列表。
根據給定的 α 值重新計算平滑因子并調整參數(權重值和激活值)。
對權重執行每通道量化與反量化 ( quantization_dequantization ) ,對輸入值執行每張量 ( per-tensor ) 量化與反量化,以預測與給定 α 值對應的每層輸出值。
計算相對實際輸出值的均方損失,将調整後的參數恢復回來,并保存每層的最佳 α 值。
本文提出的方法支持用多個标準(如最小值、最大值和平均值)來确定 Transformer 塊的輸入層歸一化 ( LayerNorm ) 操作的 α 值。
實驗發現,将 α 範圍設為 [ 0.3, 0.7 ] ,步長設為 0.05,對大多數模型來說都能達到很好的平衡。
這一方法有兩個顯著特點:一是全自動化,二是比原始方法支持的融合模式多。
下圖提供了在 BLOOM-1b7 模型上執行 SmoothQuant α 值自動調優的樣例代碼:
△啟用增強型 SmoothQuant 的樣例代碼
用戶只需傳遞一個模型名稱 ( model_name ) 和一個數據加載器。值得注意的是,模型分析主要依靠的是 Torch JIT。用戶可以在加載 Hugging Face [ 15 ] 模型時将 torchscript 設定為 True,或将 return_dict 設定為 False。
更多信息請參閱英特爾 ® Neural Compressor 文檔 [ 15 ] 。
結果
本文提出的增強型 SmoothQuant 的主要優勢在于提高了準确率。
經過對多種主流大語言模型的評估,具備自動調優能力的 INT8 SmoothQuant 最後一個詞元 ( last-token ) 的預測準确率要高于原始 INT8 SmoothQuant 和 FP32 基線方法。詳見下圖:
△FP32 基線方法、INT8(啟用和不啟用 SmoothQuant)以及 INT8(啟用本文提出的增強型 SmoothQuant)的準确率對比
從上圖可以看出,在 OPT-1.3b 和 BLOOM-1b7 模型上,本文提出的增強型 SmoothQuant 的準确率比默認的 SmoothQuant 分别高 5.4% 和 1.6%。
量化後的模型也縮小到 FP32 模型的四分之一,大大減少了内存占用空間,從而有效地提升大模型在英特爾 ® 平台上的推理性能。
更全面的結果請見 GitHub 存儲庫 [ 16 ] 。同時,也歡迎您創建拉取請求或就 GitHub 問題 [ 17 ] 發表評論。期待聽到您的反饋意見和建議。
了解更多内容,請點擊文末【閱讀原文】。
作者:
英特爾公司人工智能資深架構師沈海豪、英特爾公司人工智能資深軟體工程師程文華、英特爾公司人工智能軟體工程師陸崟彤、何欣、郭恒、王暢、王夢妮,他們都在從事模型量化及壓縮的研究與優化工作。
參考鏈接:
[ 1 ] 英特爾 ® Neural Compressor:
https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/neural-compressor.html
[ 2 ] 英特爾 ® Extension for TensorFlow:
https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/optimization-for-tensorflow.html
[ 3 ] 英特爾 ® Extension for PyTorch:
https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/optimization-for-pytorch.html
[ 4 ] 英特爾 ® 至強 ® 可擴展處理器 :
https://www.intel.cn/content/www/cn/zh/products/details/processors/xeon/scalable.html
[ 5 ] 英特爾 ® 至強 ® CPU Max 系列 :
https://www.intel.cn/content/www/cn/zh/products/details/processors/xeon/max-series.html
[ 6 ] 英特爾 ® 數據中心 GPU Flex 系列 :
https://www.intel.cn/content/www/cn/zh/products/details/discrete-gpus/data-center-gpu/flex-series.html
[ 7 ] 英特爾 ® 數據中心 GPU Max 系列 :
https://www.intel.cn/content/www/cn/zh/products/details/discrete-gpus/data-center-gpu/max-series.html
[ 8 ] 第四代英特 ® 至強 ® 可擴展處理器 :
https://www.intel.cn/content/www/cn/zh/events/accelerate-with-xeon.html
[ 9 ] AI 與内存牆 :
https://medium.com/riselab/ai-and-memory-wall-2cb4265cb0b8
[ 10 ] SmoothQuant 相關文檔 :
https://github.com/intel/neural-compressor/blob/master/docs/source/smooth_quant.md
[ 11 ] SPIQ:
https://arxiv.org/abs/2203.14642
[ 12 ] Outlier Suppression:
https://arxiv.org/abs/2209.13325
[ 13 ] SmoothQuant:
https://arxiv.org/abs/2211.10438
[ 14 ] Hugging Face 模型 :
https://huggingface.co/models
[ 15 ] 英特爾 ® Neural Compressor 文檔 :
[ 16 ] GitHub 存儲庫 :
[ 17 ] GitHub 問題 :
https://github.com/intel/neural-compressor/issues
* 本文系量子位獲授權刊載,觀點僅為作者所有。
— 完 —
量子位 QbitAI
վ ' ᴗ ' ի 追蹤 AI 技術和產品新動态
一鍵三連「分享」、「點贊」和「在看」
科技前沿進展日日相見 ~
>