Arm LLM 生成式AI 邊緣AI 人工智慧 機器學習 深度學習 行動裝置 PTQ QAT 量化 類神經網路

量化加速LLM/生成式AI進入邊緣(2)

量化(Quantization)有助降低類神經網路模型的記憶體體積與延遲,面對將生成式及大型語言模型導入行動裝置的趨勢,量化技術的重要性持續提升。
Arm

量化感知訓練(QAT)

(承前文)QAT將量化作業合併至訓練或微調的過程。該技術模擬推論時間量化(Inference-time Quantization)。模型的權重在正向傳遞過程中,直接以低位元表示進行訓練,代表QAT從訓練一開始,就使用已經完成量化的權重與激活值(8位元而非32位元浮點)來訓練DL模型。這將帶來更好的效能,同時也需要付出額外訓練時間與運算的代價。與訓練結束後把預先訓練好的模型轉換成精度較低的整數格式的PTQ不同,QAT完成之後,需要使用TFLite轉換工具將模型轉換成TFLite格式。

QAT完成後,建議使用同樣的預訓練資料集或該資料集具代表性的版本,對模型進行微調。

QAT跟PTQ一樣都會將模型縮小四倍(32位元/8位元),帶來顯著的模型壓縮效益。此外,在經過額外訓練後,QAT還可以提供更高的精度。就推論效能來說,在CPU後端可以看到1.5~4倍的提升。目前,繪圖處理器(GPU)後端只支援浮點作業;當TFLite在GPU上運行經過量化的模型時,GPU實際上是在執行原始模型的一種浮點解釋,代表權重與偏差在GPU的記憶體中進行了一次反量化。每次推論時,輸入與輸出則再次進行反量化與量化,另外還有其他作業以模擬量化的特性。

據TF與TFLite的回報,QAT對精度的影響相當有限。舉例來說,有關利用工具進行影像分類[2],將MobilenetV1、MobilenetV2與Resnet V1的量化版本與非量化版本相比,精度差異遠遠不到1%。

TFLite中,QAT是tfmot模型優化套件的一部分,因此為必須安裝的項目:

1 ! pip install -q tensorflow

2 ! pip install -q tensorflow-model-optimization

假設我們已經擁有一個具備預訓練權重「pretrained_weights」的預訓練模型。

1 import tensorflow as tf

2 import numpy as np

3 import tensorflow_model_optimization as tfmot

4

5 base_model = setup_model()

6 base_model.load_weights(pretrained_weights)

7 quant_aware_model = tfmot.quantization.keras.quantize_model(base_model)

首先設定模型,接著載入預訓練的權重。下一步將調用Keras API quantize_model函數,該函數利用預設的量化實作來量化一個tf.keras模型。此一量化在訓練時會建立一個模擬量化的模型,透過這種方式,模型學習到的參數不易受到量化損失的影響,同時能模仿量化模型的精度。這個函數不會修改原始基本模型的權重。可以在函數quant_aware_model.summary() function的最末端進行調用,以取得一個顯示模型各層、每一層輸出形狀,以及每一層參數數量的表格。

若使用此處提供的實例在Goolge Colab中運行,將會發現使用QAT後完成量化的模型與基本模型相比,精準度方面可說沒有任何損失。原則上,由於在微調過程中會讓模型根據更多的人工智慧訓練週期(Epoch)進行訓練,經過量化的模型甚至可能將具備更高的精準度。與單一浮點模型相比,可以帶來更佳的精準度。

由於模型在轉換過程中套用更多的優化方式,訓練過程中達成的精度將與轉換完成後模型的精度具有差距,此為QAT實作的已知問題之一。

知識蒸餾(Knowledge Distillation)是QAT的其中一種替代方式。可以將全精度的模型視為老師,而較低精度的模型則是學生。低精度的模型隨後可以進行優化,並產生蒸餾損耗(Distillation Loss)。進行蒸餾時,通常不需要使用到原始資料集。

QAT與PTQ可以和權重剪枝(Pruning)與分群(Clustering)等其他模型優化技術彼此結合。針對這個主題,Arm為TensorFlow的模型優化工具套件做出貢獻。本文針對邊緣裝置介紹了優化機器學習模型的協作技術。這個方式主要的概念在於逐一實施不同的優化,並在部署所需的壓縮與精度之間保持平衡。

解釋過PTQ與QAT兩種最常使用的量化方式後,可以參考圖3的決策樹,以決定不同情況適合使用的量化方式。如圖3所示,進行決策時最好始終從PTQ開始,PTQ是最快速且較簡單的方式,可以幫助決策者快速理解量化對模型的記憶體消耗與效能產生的影響。如果對量化後可達成的精度感到滿意,可以就此打住,直接使用經過量化的模型,不再進行進一步的調整。倘若所達成的精度不敷所需,則可選擇QAT。

圖3 PTQ與QAT的決策樹

在這種情況下,我們需要能夠存取資料集,並取得它所需的足夠運算資源或預算,例如在AWS平台上。完成QAT後,最終的精度仍有可能遠低於原始模型。此時應檢查是否有哪些層對量化特別敏感,在這種情況下,應該嘗試把某些層排除在量化過程之外[3],並觀察排除特定層所產生的影響。倘若精度有所提升,就證明努力的方向是正確的,並且應該對其他可感測層進行試驗。

參考資料

[2] https://www.tensorflow.org/model_optimization/guide/quantization/training

[3] https://www.tensorflow.org/model_optimization/guide/quantization/training_comprehensive_guide

量化加速LLM/生成式AI進入邊緣(1)

量化加速LLM/生成式AI進入邊緣(2)

量化加速LLM/生成式AI進入邊緣(3)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!