图解 · 运行过程 · 工程取舍

量化:省存储,也引入近似

动态图解约 1 千字1 组分步图解

为什么“4bit”不等于所有模型内存都缩到八分之一?

动态图解 · O02

量化:省存储,也引入近似

为什么“4bit”不等于所有模型内存都缩到八分之一?

像把精细刻度换成较粗刻度:需要的存储位数减少,但有些原值只能落到相邻刻度,还有些会超出可表示范围。尺度、分组信息、未量化层、激活与缓存仍占空间,因此不能只数权重整数的位数就当作运行总内存。

尺度scale一个整数刻度对应多大的实数间隔。
舍入取邻近可表示值。
裁剪把超范围值截到边界,通常产生更大的误差。

输入与适用条件:固定权重[0.26,−0.14,0.36,0.91],尺度0.1,有符号范围[−8,7]。只是均匀量化小例,不等于NF4或所有实际4bit格式。

1 / 4 · 原来的四个浮点数

第1步,共4步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

量化:省存储,也引入近似:原来的四个浮点数原权重0.26-0.140.360.91量化改的是数字的表示精度,不是把Token ID变成Embedding。先把要近似的对象与范围写清。

量化改的是数字的表示精度,不是把Token ID变成Embedding。先把要近似的对象与范围写清。

[[0.26, -0.14, 0.36, 0.91]]

q=clip(round(x/0.1),−8,7);x近似=0.1q

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

逐步说明与计算记录

以下解释全部展开,与播放器使用同一份数据;不是另换输入的第二个算例。

1.原来的四个浮点数

量化改的是数字的表示精度,不是把Token ID变成Embedding。先把要近似的对象与范围写清。

[[0.26, -0.14, 0.36, 0.91]]

q=clip(round(x/0.1),−8,7);x近似=0.1q

2.除以尺度并取最近整数

本例尺度0.1,先除以0.1,再取最近整数,得到[3,−1,4,9]。这一步已经有舍入误差。

[[3, -1, 4, 9]]

q=clip(round(x/0.1),−8,7);x近似=0.1q

3.4bit有符号范围不够

教学4bit有符号整数取值−8到7。9超出范围,只能裁剪到7;大值误差可能远高于普通舍入误差。

[[3, -1, 4, 7]]

q=clip(round(x/0.1),−8,7);x近似=0.1q

4.近似还原,检查误差

乘回尺度0.1,得到[0.3,−0.1,0.4,0.7]。最后一项相对原0.91差−0.21,展示了溢出范围的风险。

[[0.30000000000000004, -0.1, 0.4, 0.7000000000000001], [0.040000000000000036, 0.04000000000000001, 0.040000000000000036, -0.20999999999999996]]

q=clip(round(x/0.1),−8,7);x近似=0.1q

为什么需要

减少权重或KV等对象的存储与搬运压力。

怎样实现

选清量化对象和格式,校准范围,使用匹配内核,逐层或任务级验证。

可能的代价与误解

误差、异常值、反量化开销、缺少高效内核,都可能削弱质量或速度收益。

如何判断是否做对

对比原值与还原值;更重要的是比较真实任务表现与实测峰值内存。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。