大模型量化

目录

摘要
本文系统讲解实际生产中大模型量化技术,从最基础的线性量化原理出发,深入剖析两种主流后训练量化算法:GPTQAWQ。并给出 GPTQ 与 AWQ 在实际生产中的选型建议

文章配有完整的数学推导与数值示例,保证看懂!

INT8:用 8 个 bit 表示一个整数
FP16:用 16 个 bit 表示一个浮点数

在训练时,用高精度来存储参数。对梯度计算友好。
70B 模型 FP16 权重:70 × 10⁹ × 2 字节 = 140GB。
部署时,70B 模型 INT4:70 × 10⁹ × 0.5 字节 = 35GB
优点:

  1. 节省显存
  2. 硬件吞吐高,访存量少,使得推理速度高。

量化的核心:将连续值映射到离散值

假设一组 FP16 权重,数值范围在 [-2.5, 2.5],要量化到 INT4( 2 4 = 16 2^{4}=16 24=16 个离散值,有符号 INT4 从 -8 到 7)。
最朴素的做法叫线性量化:

线性量化四个步骤:

缩放因子(步长)

s c a l e = m a x − m i n q max ⁡ − q min ⁡ = 2.5 − ( − 2.5 ) 7 − ( − 8 ) ≈ 0.333 scale=\frac{max-min}{q_{\max}-q_{\min}} =\frac{2.5-(-2.5)}{7-(-8)} \approx0.333 scale=qmaxqminmaxmin=7(8)2.5(2.5)0.333
意思是:整数每变化 1,浮点值大约变化 0.333。
因此原本连续的浮点数会被吸附到附近的离散刻度,例如:
. . . , − 0.666 , − 0.333 , 0 , 0.333 , 0.666 , . . . ..., -0.666,-0.333,0,0.333,0.666,... ...,0.666,0.333,0,0.333,0.666,...

zero_point

zero_point 表示“浮点数 0 对应哪个整数”。
z e r o _ p o i n t = r o u n d ( q min ⁡ − m i n s c a l e ) = r o u n d ( − 8 − − 2.5 0.333 ) = r o u n d ( − 0.5 ) = 0 {zero\_point=round\left(q_{\min}-\frac{min}{scale}\right)} =round\left(-8-\frac{-2.5}{0.333}\right) =round(-0.5) =0 zero_point=round(qminscalemin)=round(80.3332.5)=round(0.5)=0

量化

i n t _ v a l = r o u n d ( f p _ v a l s c a l e ) + z e r o _ p o i n t int\_val=round\left(\frac{fp\_val}{scale}\right)+zero\_point int_val=round(scalefp_val)+zero_point
所以2.5映射到 r o u n d ( 2.5 0.333 ) + 0 = r o u n d ( 7.5 ) = 8 round\left(\frac{2.5}{0.333}\right)+0 =round(7.5) =8 round(0.3332.5)+0=round(7.5)=8
注:
因为 INT4 的范围 [ − 8 , 7 ] [-8,7] [8,7] 本身并不完全对称,因此 x = 2.5 x=2.5 x=2.5 会得到 8,必须裁剪为 7:
c l i p ( 8 , − 8 , 7 ) = 7 clip(8,-8,7)=7 clip(8,8,7)=7
因此工程中对称 INT4 量化常使用 [ − 7 , 7 ] [-7,7] [7,7],空出 − 8 -8 8,并设置:
s c a l e = m a x − m i n q max ⁡ − q min ⁡ = 2.5 − ( − 2.5 ) 7 − ( − 7 ) ≈ 0.3571 scale=\frac{max-min}{q_{\max}-q_{\min}} =\frac{2.5-(-2.5)}{7-(-7)} \approx0.3571 scale=qmaxqminmaxmin=7(7)2.5(2.5)0.3571
这样 − 2.5 -2.5 2.5 2.5 2.5 2.5 都可以映射到 − 7 -7 7 7 7 7

不同算法的差别,在于怎么算 scale 和 zero_point、怎么处理 outlier(异常大的权重值)、怎么补偿量化误差。

GPTQ:基于误差补偿的逐层量化

论文:GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers

核心目标

对于某一线性层 Y = W X Y=WX Y=WX,计算量化权重 W ^ \hat W W^,使输出误差最小:
min ⁡ W ^ ∥ W X − W ^ X ∥ 2 2 \min_{\hat W}\|WX-\hat W X\|_2^2 W^minWXW^X22
其中:

  • W W W:原始浮点权重,形状通常为 out_features × in_features
  • X X X:校准数据经过该层时的输入激活
  • W ^ \hat W W^:量化后的权重

具体流程:

1. 准备数据激活

一小批校准数据(典型 128 条文本,无标签,几万 tokens)。让模型用 FP16 跑一遍校准数据,记录每层的输入激活值。

2. 计算 Hessian 矩阵

用 Hessian 矩阵估计每个权重的「重要性」(敏感度)
对每个线性层计算 H = 2 X X ⊤ H = 2XX^\top H=2XX
它衡量“输入各维度的变化,对该层输出误差有多敏感”。

3. 选择量化顺序

通常按输入激活的重要性来Act-order。
Act-order(Activation order)是 GPTQ 中的“按输入激活重要性决定量化顺序”。
先计算 Hessian 对角线,它表示第 i i i个输入特征在校准数据中有多活跃、该列权重的误差对输出的影响有多大。
importance i ∝ H i i \text{importance}_i \propto H_{ii} importanceiHii
根据 H i i H_{ii} Hii 重排权重的量化顺序。

为什么重排有用:

  • 高激活通道的量化误差影响更大,优先处理。
  • GPTQ 量化一列后,只能把误差补偿到“尚未量化”的列。
  • 因此先处理重要列,能让更多后续浮点列帮助吸收其误差。
  • 不重要列留到后面量化,即使可用于补偿的空间较少,整体影响也通常较小。
4. 逐列量化

处理第 i i i 列权重 w i w_i wi 时,把它映射到低比特整数网格,例如 4-bit:
q i = clip ⁡ ( round ⁡ ( w i − z s ) , 0 , 2 b − 1 ) q_i = \operatorname{clip}\left( \operatorname{round}\left(\frac{w_i-z}{s}\right), 0, 2^b-1 \right) qi=clip(round(swiz),0,2b1)
反量化为:
w ^ i = s q i + z \hat w_i = s q_i + z w^i=sqi+z
当前列量化误差:
e i = w i − w ^ i e_i = w_i-\hat w_i ei=wiw^i
GPTQ 不会直接接受这部分误差,而是把它补偿给尚未量化的列:
W : ,   i : ← W : ,   i : − e i [ H − 1 ] i i [ H − 1 ] i ,   i : W_{:,\,i:} \leftarrow W_{:,\,i:} - \frac{e_i}{[H^{-1}]_{ii}} [H^{-1}]_{i,\,i:} W:,i:W:,i:[H1]iiei[H1]i,i:
一层量化完,进入下一层,重复。

举例解释

设某个线性层只有三个输入特征,只有一个输出:
y = w 1 x 1 + w 2 x 2 + w 3 x 3 y=w_1x_1+w_2x_2+w_3x_3 y=w1x1+w2x2+w3x3
原始权重是:
W = [ 0.63 ,   − 0.74 ,   0.15 ] W=[0.63,\,-0.74,\,0.15] W=[0.63,0.74,0.15]
4-bit 对称量化使用整数
q ∈ [ − 7 , 7 ] q\in[-7,7] q[7,7]

第一步:取校准数据并计算输入激活 X

取 5 条校准样本的该层输入激活:
X = [ 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 ] X= \begin{bmatrix} 1&1&1&0&1\\ 0&1&1&1&0\\ 0&0&1&1&0 \end{bmatrix} X= 100110111011100
即每一列是一条输入:
x ( 1 ) = [ 1 , 0 , 0 ] x ( 2 ) = [ 1 , 1 , 0 ] x ( 3 ) = [ 1 , 1 , 1 ] x ( 4 ) = [ 0 , 1 , 1 ] x ( 5 ) = [ 1 , 0 , 0 ] \begin{aligned} x^{(1)}&=[1,0,0]\\ x^{(2)}&=[1,1,0]\\ x^{(3)}&=[1,1,1]\\ x^{(4)}&=[0,1,1]\\ x^{(5)}&=[1,0,0] \end{aligned} x(1)x(2)x(3)x(4)x(5)=[1,0,0]=[1,1,0]=[1,1,1]=[0,1,1]=[1,0,0]

第二步:计算 H 和 H − 1 H和H^{-1} HH1矩阵

H = 2 X X ⊤ = [ 8 4 2 4 6 4 2 4 4 ] H=2XX^\top= \begin{bmatrix} 8&4&2\\ 4&6&4\\ 2&4&4 \end{bmatrix} H=2XX= 842464244
其逆矩阵为:
H − 1 = [ 0.2 − 0.2 0.1 − 0.2 0.7 − 0.6 0.1 − 0.6 0.8 ] H^{-1}= \begin{bmatrix} 0.2&-0.2&0.1\\ -0.2&0.7&-0.6\\ 0.1&-0.6&0.8 \end{bmatrix} H1= 0.20.20.10.20.70.60.10.60.8
GPTQ 实现过程不直接用 H − 1 H^{-1} H1 做补偿,而是会对 H − 1 H^{-1} H1 做 Cholesky 分解。其 Cholesky 上三角矩阵为:
H − 1 = U ⊤ U , U = [ 0.447214 − 0.447214 0.223607 0 0.707107 − 0.707107 0 0 0.5 ] H^{-1}=U^\top U,\quad U= \begin{bmatrix} 0.447214&-0.447214&0.223607\\ 0&0.707107&-0.707107\\ 0&0&0.5 \end{bmatrix} H1=UU,U= 0.447214000.4472140.70710700.2236070.7071070.5

第三步:排序

由于:
diag ⁡ ( H ) = [ 8 , 6 , 4 ] \operatorname{diag}(H)=[8,6,4] diag(H)=[8,6,4]
所以 Act-order 会按 w 1 → w 2 → w 3 w_1 \rightarrow w_2 \rightarrow w_3 w1w2w3 顺序量化:第一个输入特征最重要,第三个最不重要。

第四步:量化

量化 w 1 w_1 w1,补偿 w 2 , w 3 w_2,w_3 w2,w3
现在先量化第一列:
s = max ⁡ ( ∣ 0.63 ∣ , ∣ − 0.74 ∣ , ∣ 0.15 ∣ ) 7 = 0.74 7 = 0.105714 s=\frac{\max(|0.63|,|-0.74|,|0.15|)}{7} =\frac{0.74}{7} =0.105714 s=7max(∣0.63∣,0.74∣,∣0.15∣)=70.74=0.105714
w 1 w_1 w1量化结果:
q 1 = r o u n d ( w 1 s ) = 6 q_1={round}(\frac{w_1}{s})=6 q1=round(sw1)=6
反量化:
w ^ 1 = 6 × 0.105714 = 0.634286 \hat w_1=6\times0.105714=0.634286 w^1=6×0.105714=0.634286
误差:
e 1 = w 1 − w ^ 1 = − 0.004286 e_1=w_1-\hat w_1=-0.004286 e1=w1w^1=0.004286
GPTQ 用 U U U 的第一行补偿后两列:
w 2 = w 2 − e 1 U 12 U 11 = − 0.744286 w_2= w_2-e_1\frac{U_{12}}{U_{11}} =-0.744286 w2=w2e1U11U12=0.744286
w 3 = w 3 − e 1 U 13 U 11 = 0.152143 w_3=w_3-e_1\frac{U_{13}}{U_{11}}=0.152143 w3=w3e1U11U13=0.152143
权重状态

权重状态 y ( x ( 1 ) ) y(x^{(1)}) y(x(1)) y ( x ( 2 ) ) y(x^{(2)}) y(x(2)) y ( x ( 3 ) ) y(x^{(3)}) y(x(3)) y ( x ( 4 ) ) y(x^{(4)}) y(x(4)) y ( x ( 5 ) ) y(x^{(5)}) y(x(5))五条校准样本的误差
原始 [ 0.63 , − 0.74 , 0.15 ] [0.63,-0.74,0.15] [0.63,0.74,0.15]0.63-0.110.04-0.590.63
只量化第一列 [ 0.634286 , − 0.74 , 0.15 ] [0.634286,-0.74,0.15] [0.634286,0.74,0.15]0.634286-0.1057140.044286-0.590.634286 [ 0.004286 , 0.004286 , 0.004286 , 0 , 0.004286 ] [0.004286,0.004286,0.004286,0,0.004286] [0.004286,0.004286,0.004286,0,0.004286]
GPTQ 补偿后 [ 0.634286 , − 0.744286 , 0.152143 ] [0.634286,-0.744286,0.152143] [0.634286,0.744286,0.152143]0.634286-0.110.042143-0.5921430.634286 [ 0.004286 , 0 , 0.002143 , − 0.002143 , 0.004286 ] [0.004286,0,0.002143,-0.002143,0.004286] [0.004286,0,0.002143,0.002143,0.004286]

平方误差和从:
4 × 0.004286 2 ≈ 0.00007347 4\times0.004286^2\approx0.00007347 4×0.00428620.00007347
降为:
2 × 0.004286 2 + 2 × 0.002143 2 ≈ 0.00004592 2\times0.004286^2+ 2\times0.002143^2 \approx0.00004592 2×0.0042862+2×0.00214320.00004592
关键点:
GPTQ 不要求每个权重单独最接近原值,而是要让整个层在真实输入激活上的输出最接近原模型。 H − 1 H^{-1} H1 告诉它“改动后续哪个权重、改多少”,最能抵消当前量化造成的输出偏差。

优缺点

优点:
支持极端低位:能做到 INT3 甚至 INT2,靠的就是误差补偿能消化大部分精度损失
缺点:
量化耗时长:7B 模型量化要几个小时(要算 Hessian、要逐层补偿)
校准数据有依赖:选错校准数据,量化效果会变差

AWQ:激活感知的权重保护

论文:AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration
研究者们观察到一个现象:
模型里大约1%的权重承担了99%的输出贡献,他们把这些权重叫 Salient Weights(重要权重)。如果把这 1% 的权重保护好(保持高精度),其他 99% 激进量化到 INT4,模型效果几乎不掉。

AWQ流程

  1. 找 Salient Weights?
    如果某些输入位置的X特别大,那么对应的权重列就是「重要权重」。
  2. 逐通道缩放
    AWQ 让重要通道的权重在量化前“拉开距离”,使量化整数码能区分它们,而不是把它们舍入成同一个数。
    (这句话不好理解,详看示例2,不必为难脑袋)

示例1

假设一个线性层有 3 个输入通道:
y = w 1 x 1 + w 2 x 2 + w 3 x 3 y=w_1x_1+w_2x_2+w_3x_3 y=w1x1+w2x2+w3x3
校准数据中,激活和权重为:
x = [ 20 ,   1 ,   0.5 ] , w = [ 0.10 ,   0.80 ,   − 1.20 ] x=[20,\ 1,\ 0.5],w=[0.10,\ 0.80,\ -1.20] x=[20, 1, 0.5]w=[0.10, 0.80, 1.20]
原始输出:
y = 0.10 × 20 + 0.80 × 1 + ( − 1.20 ) × 0.5 = 2 + 0.8 − 0.6 = 2.2 y=0.10\times20+0.80\times1+(-1.20)\times0.5 =2+0.8-0.6=2.2 y=0.10×20+0.80×1+(1.20)×0.5=2+0.80.6=2.2
第 1 通道的激活 x 1 = 20 x_1=20 x1=20 最大,因此 w 1 = 0.1 w_1=0.1 w1=0.1 是重要权重。
4-bit 权重量化(整数范围 [ − 7 , 7 ] [-7,7] [7,7])时,三个权重共用一个 scale。最大绝对值是 1.2 1.2 1.2,所以:
缩放因子:
Δ = 1.2 7 ≈ 0.171 \Delta=\frac{1.2}{7}\approx0.171 Δ=71.20.171

线性量化

线性量化后的近似权重:
[ 0.10 ,   0.80 ,   − 1.20 ] → [ 0.171 ,   0.857 ,   − 1.20 ] [0.10,\ 0.80,\ -1.20] \rightarrow [0.171,\ 0.857,\ -1.20] [0.10, 0.80, 1.20][0.171, 0.857, 1.20]
量化后输出:
y ^ = 0.171 × 20 + 0.857 × 1 − 1.20 × 0.5 = 3.42 + 0.857 − 0.6 = 3.677 \hat y=0.171\times20+0.857\times1-1.20\times0.5 =3.42+0.857-0.6=3.677 y^=0.171×20+0.857×11.20×0.5=3.42+0.8570.6=3.677
误差是:
3.677 − 2.2 = 1.477 3.677-2.2=1.477 3.6772.2=1.477
可以看出误差主要来自重要的第 1 通道:
( 0.171 − 0.10 ) × 20 = 1.42 (0.171-0.10)\times20=1.42 (0.1710.10)×20=1.42

AWQ

AWQ 发现第 1 通道重要,于是设缩放系数(s 是用一小批校准数据统计出来的):
s = [ 4 ,   1 ,   1 ] s=[4,\ 1,\ 1] s=[4, 1, 1]
把权重按通道放大,同时把激活反向缩小:
w ′ = [ 0.10 × 4 ,   0.80 ,   − 1.20 ] = [ 0.40 ,   0.80 ,   − 1.20 ] w'=[0.10\times4,\ 0.80,\ -1.20]=[0.40,\ 0.80,\ -1.20] w=[0.10×4, 0.80, 1.20]=[0.40, 0.80, 1.20]
x ′ = [ 20 / 4 ,   1 ,   0.5 ] = [ 5 ,   1 ,   0.5 ] x'=[20/4,\ 1,\ 0.5]=[5,\ 1,\ 0.5] x=[20/4, 1, 0.5]=[5, 1, 0.5]
关键等式:
w 1 x 1 = ( 4 w 1 ) ( x 1 / 4 ) w_1x_1=(4w_1)(x_1/4) w1x1=(4w1)(x1/4)
仍然用步长 Δ ≈ 0.171 \Delta\approx0.171 Δ0.171量化新权重:
[ 0.40 ,   0.80 ,   − 1.20 ] → [ 0.343 ,   0.857 ,   − 1.20 ] [0.40,\ 0.80,\ -1.20] \rightarrow [0.343,\ 0.857,\ -1.20] [0.40, 0.80, 1.20][0.343, 0.857, 1.20]
量化后的输出:
y ^ AWQ = 0.343 × 5 + 0.857 × 1 − 1.20 × 0.5 = 1.715 + 0.857 − 0.6 = 1.972 \hat y_{\text{AWQ}} =0.343\times5+0.857\times1-1.20\times0.5 =1.715+0.857-0.6 =1.972 y^AWQ=0.343×5+0.857×11.20×0.5=1.715+0.8570.6=1.972
误差减小为:
1.972 − 2.2 = − 0.228 1.972-2.2=-0.228 1.9722.2=0.228

示例 2:

设线性层有 2 个输入通道、3 个输出:
y = W x y=Wx y=Wx
权重矩阵为:
W = [ 0.06 0.90 0.10 − 0.80 0.14 1.00 ] W= \begin{bmatrix} 0.06 & 0.90\\ 0.10 & -0.80\\ 0.14 & 1.00 \end{bmatrix} W= 0.060.100.140.900.801.00
其中第一列是“通道 1”的三个权重。
校准数据表明第 1 通道激活经常很大。假设某次推理:
x = [ 10 1 ] x= \begin{bmatrix} 10\\ 1 \end{bmatrix} x=[101]
浮点输出:
y = W x = [ 0.06 × 10 + 0.90 × 1 0.10 × 10 − 0.80 × 1 0.14 × 10 + 1.00 × 1 ] = [ 1.50 0.20 2.40 ] y=Wx= \begin{bmatrix} 0.06\times10+0.90\times1\\ 0.10\times10-0.80\times1\\ 0.14\times10+1.00\times1 \end{bmatrix} = \begin{bmatrix} 1.50\\ 0.20\\ 2.40 \end{bmatrix} y=Wx= 0.06×10+0.90×10.10×100.80×10.14×10+1.00×1 = 1.500.202.40

线性量化

Δ = 1.00 7 ≈ 0.143 \Delta=\frac{1.00}{7}\approx0.143 Δ=71.000.143
q = round ⁡ ( w / Δ ) , w ^ = q Δ q=\operatorname{round}(w/\Delta),\qquad \hat w=q\Delta q=round(w),w^=qΔ

原权重整数码 q q q反量化后 w ^ \hat{w} w^
0.0600
0.110.143
0.1410.143

所以原本不同的三个值,量化完后两个完全失去区别。这就是“挤在很窄的整数范围里”。
量化后的完整矩阵近似为:
W ^ = [ 0 0.857 0.143 − 0.857 0.143 1.00 ] \hat W= \begin{bmatrix} 0 & 0.857\\ 0.143 & -0.857\\ 0.143 & 1.00 \end{bmatrix} W^= 00.1430.1430.8570.8571.00
输出变成:
y 1 = W ^ x = [ 0.857 0.571 2.429 ] y_1=\hat W x= \begin{bmatrix} 0.857\\ 0.571\\ 2.429 \end{bmatrix} y1=W^x= 0.8570.5712.429

WQ:放大重要通道

AWQ 判定第 1 通道重要,取缩放系数:
s 1 = 4 s_1=4 s1=4
把权重按通道放大:
W ′ = W ⋅ [ 4 0 0 1 ] = [ 0.24 0.90 0.40 − 0.80 0.56 1.00 ] W' = W\cdot \begin{bmatrix} 4&0\\ 0&1 \end{bmatrix} = \begin{bmatrix} 0.24 & 0.90\\ 0.40 & -0.80\\ 0.56 & 1.00 \end{bmatrix} W=W[4001]= 0.240.400.560.900.801.00
同时,运行时输入激活按通道反向缩放:
x ′ = [ 10 / 4 1 ] = [ 2.5 1 ] x'= \begin{bmatrix} 10/4\\ 1 \end{bmatrix} = \begin{bmatrix} 2.5\\ 1 \end{bmatrix} x=[10/41]=[2.51]
在量化前,结果严格不变。
量化新权重,仍然用步长 Δ ≈ 0.143 \Delta\approx0.143 Δ0.143。现在重要通道的三个权重是:

缩放后权重整数码 q q q反量化后 w ^ \hat{w} w^
0.2420.286
0.430.429
0.5640.571

这就是“占据更宽的整数范围”的准确含义:

  • 缩放前,三个权重挤在 0、1 两个码上;
  • 缩放后,它们分布在 2、3、4 三个码上;
  • 整数码能分辨它们原本的大小关系和差异。

量化后的 AWQ 权重为:
W ^ ′ = [ 0.286 0.857 0.429 − 0.857 0.571 1.00 ] \hat W'= \begin{bmatrix} 0.286 & 0.857\\ 0.429 & -0.857\\ 0.571 & 1.00 \end{bmatrix} W^= 0.2860.4290.5710.8570.8571.00
实际推理计算:
y 2 = W ^ ′ x ′ = [ 1.571 0.214 2.429 ] y_2=\hat W'x' = \begin{bmatrix} 1.571\\ 0.214\\ 2.429 \end{bmatrix} y2=W^x= 1.5710.2142.429
可以看出 y 2 y_2 y2 y y y 的误差比 y 1 y_1 y1 y y y 小。

部署阶段

符号会不会存在哪里用
q q q4-bit 打包后的整数权重,是主要存储内容
Δ \Delta Δ每个量化组的 scale,用于恢复该组权重的实际大小
w ^ \hat{w} w^通常不会它只是由 q q q Δ \Delta Δ 反量化后得到的概念权重
s s s可能会,也可能被融合掉用于对运行时激活做 x ′ = x / s x'=x/s x=x/s,保持模型功能不变

通道缩放的两种部署方式

  1. 显式保留
    保存一个每通道的向量 s s s,推理时计算:
    y = ( q Δ ) ( x / s ) y=(q\Delta)(x/s) y=(qΔ)(x/s)
  2. 融合掉(常见)
    如果该 Linear 前面是 LayerNorm 或另一个 Linear,可以预先把 1 / s 1/s 1/s 合并进前一算子的参数。例如将前一层的输出缩放参数除以 s s s

AWQ 优缺点

优点:

  1. 效果稳:在 INT4 量化下,AWQ 的精度损失比 GPTQ 略好(约 0.5-1% 的差距)
  2. 量化耗时短:不用算 Hessian,量化一个 7B 模型只要几十分钟

缺点:

  1. 极端低位(INT3)效果不如 GPTQ:GPTQ 的误差补偿在极端位数下更稳
  2. 需要校准数据:和GPTQ一样,量化前要跑一批校准

GPTQ 和 AWQ 在实际生产中怎么选

生产部署先看部署引擎和 GPU kernel 支持,再看精度和成本。部署量化模型前必须在自己的业务场景下做评测。

场景更常见的选择原因
vLLM / SGLang 等已有成熟 AWQ 路径AWQ转换、加载、kernel 和模型生态通常更顺滑
需要快速量化很多模型版本AWQ校准和搜索相对轻,批量流水线成本低
社区已有的 GPTQ 模型GPTQ不必为了算法名称重新量化或转换
模型极敏感、INT4 精度是第一优先级两者都测取决于模型、group size、校准集与任务

更多推荐