File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments