量化小实验:压缩数值范围会引入什么误差
把浮点权重保存为低位整数可以减少表示体积,但映射与还原会产生舍入误差。先观察一组数值,比直接讨论模型速度更具体。
问题从哪里出现
把浮点权重保存为低位整数可以减少表示体积,但映射与还原会产生舍入误差。先观察一组数值,比直接讨论模型速度更具体。
理解核心机制
对称量化用最大绝对值确定尺度,将值映射到有限整数区间,再乘尺度还原。下面使用 [-127,127] 区间演示,不声称等同于实际推理引擎。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
values = [-1.0, -0.12, 0.0, 0.37, 1.0]
peak = max(abs(value) for value in values)
scale = peak / 127 if peak else 1.0
quantized = [max(-127, min(127, round(value/scale))) for value in values]
restored = [value * scale for value in quantized]
error = max(abs(a-b) for a, b in zip(values, restored))
assert error <= scale / 2 + 1e-12
print(quantized, restored, error)适用边界与常见误区
真实量化涉及分组、异常值、激活和硬件内核。数值误差小不自动意味着任务质量不变,也不能仅按位宽推断延迟提升。
继续练习
加入一个很大的异常值,观察其余小数的误差,再比较逐组尺度与全局尺度的差别。