Skip to content

Commit 7164fca

Browse files
committed
refine
1 parent c064a57 commit 7164fca

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

_posts/2025-12-15-svdquant.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,37 @@ $$
5353

5454
对于步骤 2 来说,我们选择的量化精度实际上是需要根据推理运行的硬件来选择的,例如英伟达 4090 显卡支持 fp8 计算,而 3090 `Tensor Core` 不支持fp8, 推理速度可能和 bf16 差不多。
5555

56+
当然除了权重与激活以外,还有`KV cache`量化,但我是做diffusion model的,完全不熟悉这个,就不写了。
57+
5658
接下来稍微仔细一点地说明为什么需要在意量化粒度与量化精度,以及为什么一个单纯的模型权重可以被量化激活。
5759

58-
### 为什么要在意量化粒度
60+
### 为什么要在意量化粒度?
61+
这个问题其实可以拆分成两个小问题:
62+
1. 为什么量化粒度越小精度越高?
63+
2. 为什么量化的粒度不是越小越好?
64+
65+
#### 为什么量化粒度越小精度越高
66+
虽然我不喜欢讲一个问题前先引入一个新的概念,但还是先介绍一下`outlier`
67+
68+
`outlier`在牛津词典中的解释是 n.异于一般的人或物、远离某主要部分的地方。这里主要取第二个意思,指离群值,也就是权重的数值分布中极端大或极端小的数值,见下图(a)左。
69+
70+
<img src="assets/img/smoothquant.png" alt="smoothquant" />
71+
72+
量化中最重要的参数是`scale`,它决定了量化分辨率(能表示的最小变化)。对于对称量化:
73+
74+
$$
75+
scale = \frac{\max(\vert X \vert)}{Q_{max}}
76+
$$
77+
78+
当存在outlier时,$\max(\vert X \vert)$ 会被拉大,导致所有值的量化分辨率变粗。以per-tensor量化为例,一个`outlier`会影响整个tensor的量化精度。
79+
80+
量化误差可以用均方误差 MSE 表示:
81+
82+
$$
83+
Err = \frac{1}{n}\sum_{i=1}^{n}(X_i - \text{round}\left(\frac{X_i}{scale}\right) \times scale)^2
84+
$$
85+
86+
其中$X_i$是原始权重,$round(\cdot)$ 是四舍五入到量化精度的操作。当$scale$被`outlier`拉大时,$round\left(\frac{X_i}{scale}\right)$ 的分辨率降低,导致量化误差$Err$增大。
87+
88+
因此 scale 越大,Err 越大。当量化粒度较小时,受到 `outlier` 影响的权重越少,量化精度相对粗粒度量化更高。
89+

assets/img/smoothquant.png

157 KB
Loading

0 commit comments

Comments
 (0)