Edge AI
Quantization
TensorRT
cuda
deployment
YOLOv7
Nvidia
Jetson
Object Detection
在部署階段的模型加速方案包括:1) 模型壓縮(Model Compression),包括模型剪枝(Model Pruning)、模型量化(Model Quantization)、模型蒸餾(Model Distillation)、低秩因式分解(Low-Rank Factorization)等方法
本文為針對較為主流通用的"模型量化"筆記
模型量化(Model Quantization)的好處:
- 透過降低精度和簡化模型參數,大幅減少模型的體積和計算負擔,並提高模型在特定硬體上的效率。
量化是一種模型尺寸縮減技術,可將模型權重從高精度浮點表示轉換為低精度浮點 (FP) 或整數 (INT) 表示。通過將模型的權重從高精度浮點表示轉換為低精度,模型大小和推理速度可以顯著提高,而不會犧牲太多精度。此外,量化將通過降低內存帶寬需求和提高緩存利用率來提高模型的性能。
模型量化主要透過將浮點數權重和激活函數轉換為定點數表示,在量化過程中,必須將非常高的 FP32 動態範圍壓縮到 INT8 的 255 (\(2^8-1\))個值中,甚至壓縮(編碼)到 INT4 (\(2^4-1\))的 15 個值中
(source:TensorFloat-32 in the A100 GPU Accelerates AI Training, HPC up to 20x)
模型量化後的校準(Calibration)是一種用於解決量化模型中精度損失的過程。在模型量化中,由於將浮點數參數轉換為低位表示,會引入量化誤差,可能導致模型性能下降。
校準的目的是通過調整量化參數來最小化量化誤差,以提高模型的性能和準確性。
轉換過程要讓一個真實的高動態數值分布範圍\([\beta, \alpha]\),映(壓縮)到較小的整數範圍\([-2^{b-1},2^{b-1}-1]\)
以下可以觀察幾個重點:
Affine Quantization是一種非對稱的量化方法,其整數範圍為[-128, 127]。這種方法在TensorRT中常被使用,其中量化後的值的範圍與原始範圍有所差別,但差異並不大
ps : NVdia在推導計算損失的計算量後,建議選擇用計算量較小的Scale Quantization
從對稱量化的公式\(f(x)= s · x\)來看,單純用一個比例因子\(s\)來執行範圍的映射(mapping)
輸入範圍為\(x ∈ [-α, α]\) ,最大 \(α\) 值 (amax) 被校準以最大化精度。校準 \(α\) 後,通過乘/除比例因子 \(s\) 來執行映射(mapping)。
\[s=\frac{2^{b-1}-1}{\alpha} = \frac{127}{\alpha}\]
\[x_{q} = quantize(x, b, s) = clip(round(s · x), −2^{b−1} + 1, 2^{b−1} − 1)\]
α-interval 之外的動態範圍內的所有內容都將被剪裁(outlier clipping),並且它內部的所有內容都將四捨五入(Rounding)到最接近的整數。必須小心選擇這些範圍——大的 \(\alpha\) 會“涵蓋”更多的值,然而,會導致粗略的量化和高量化誤差,因此這些範圍的選擇通常是減裁(clipping)誤差和捨入(rounding )誤差之間的權衡。
校準即是替模型的權重與活化函數選擇分布範圍的過程,在Scale Quantization分布範圍即為\([-α, α]\),下圖中的虛線代表3種用來決定α(clip截斷點)的方法
(source : 2020。INTEGER QUANTIZATION FOR DEEP LEARNING INFERENCE:PRINCIPLES AND EMPIRICAL EVALUATION)
模型量化方法可區分為兩大類:
流程示意圖
(source : 2021。Olivia Weng。Neural Network Quantization for Efficient Inference: A Survey)
PTQ | QAT | |
---|---|---|
定義 | 將已經訓練好的模型 轉換成低精度模型 |
訓練過程中同時考慮模型的 精度和訓練目標,生成低精度模型 |
流程 | 訓練完成後,對模型進行量化 | 訓練過程中,同時訓練 高精度和低精度模型 ,並逐步調整量化因子 |
精度損失 | 低度-中度 | 輕微 |
需求 | 只需要訓練一次,轉換後直接使用 | 需要額外的訓練時間和計算資源 |
應用 範圍 |
可用於靜態環境下的模型部署 | 適用於需要低延遲和低功耗的動態系統 |
在模型訓練的過程中加入量化約束的技術,通過類比推理時間量化來優化模型權重,以提高模型在下游任務上的性能。它在訓練期間使用稱為 Q/DQ (quantize then de-quantize)的「假」量化模組來( "fake" quantization modules)模仿測試或推理階段的行為
QAT 技術可以有效地降低量化後的精度損失,但是訓練過程會變得較為複雜和耗時,因為需要在考慮精度的前提下對模型進行微調和訓練。
(source:Achieving FP32 Accuracy for INT8 Inference Using Quantization Aware Training with NVIDIA TensorRT)
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing