LLM量化:位宽、内存与误差

黎 浩然/ 11 10 月, 2026/ 大语言模型/LARGELANGUAGEMODEL/LLM, 机器学习/MACHINELEARNING, 研究生/POSTGRADUATE, 计算机/COMPUTER/ 0 comments

把LLM权重量化到8位或4位,通常能减少权重存储,但“4位模型”并不表示整个推理过程只用4位。先分清权重、计算和运行内存,再讨论能省多少以及误差从哪里来,会比直接按文件大小选模型可靠。

文章目录
  1. 先算原始权重,别把它当总显存
  2. 整数表示怎样还原近似值
  3. 截断为什么比舍入更值得检查
  4. 存储位宽与计算精度分开看
  5. 部署前用同一组任务比较
  6. 资料来源

先算原始权重,别把它当总显存

假设模型恰有70亿个参数,每个参数都以同一种位宽紧凑保存,不计任何额外信息。原始大小为 参数数 × 位宽 / 8 字节:16位是14 GB,8位是7 GB,4位是3.5 GB。这些是十进制GB,1 GB=10⁹字节。

16-bit: 14 GB

8-bit: 7 GB

4-bit: 3.5 GB

原创权重存储对比:假设70亿参数,采用十进制GB,不含元数据及运行内存。

真实量化文件还要保存缩放因子等信息,部分层也可能保留较高精度。启动服务后,还会出现KV缓存、激活、临时工作区以及框架分配。因此3.5 GB是这个假设下的原始位数据量,不能据此保证某台机器可以完成推理。

可以结合之前的KV cache显存估算,把权重预算和上下文预算分开记录。改变序列长度或并发时,即使权重不变,运行峰值也可能变化。

整数表示怎样还原近似值

用简单的均匀仿射量化说明:q = clamp(round(x/s) + z),还原值为 x̂ = s(q−z)。s为正缩放因子,z为整数零点。PyTorch官方量化张量说明使用缩放与零点描述这种映射;它只是一类量化方式,不能代表所有LLM低位格式。

下面取s=0.02、z=0,整数范围为−128至127。相邻还原值间隔0.02;在没有截断且采用最近舍入时,标量绝对误差不超过0.01。这个界限不包括模型输出质量,也不适用于被范围截断的值。

输入x 整数q 还原值
−1.16 −58 −1.16
−0.213 −11 −0.22
0.371 19 0.38
1.891 95 1.90

截断为什么比舍入更值得检查

同一映射的最大还原值只有127×0.02=2.54。若输入是10,它会被夹到127,误差成为7.46,显然不再受0.01约束。选择范围时,需要在“覆盖极端值”和“给常见值足够分辨率”之间权衡。

以下原创Python教学示例已执行:核对四个非截断值的误差界限,以及越界值的截断结果。没有调用PyTorch、bitsandbytes或真实LLM;Python的round在恰好一半处采用偶数舍入,这些测试值避开了该边界。

import math

def quantize(x, scale=0.02):
    if not math.isfinite(x) or not math.isfinite(scale) or scale <= 0:
        raise ValueError("finite x and a positive finite scale required")
    q = max(-128, min(127, round(x / scale)))
    return q, q * scale

values = [-1.16, -0.213, 0.371, 1.891]
for x in values:
    q, restored = quantize(x)
    assert abs(x - restored) <= 0.01 + 1e-12
    print(x, q, round(restored, 3))
q, restored = quantize(10.0)
assert q == 127 and math.isclose(restored, 2.54)
assert abs(10.0 - restored) > 0.01
print("clipped:", q, restored)

把一个很大的离群值纳入全局范围可能增大步长,使其余值的近似变粗。可用人工小张量先检查这种现象,但不能从几个数推断整模型质量。分组、按通道或保留部分高精度计算,都是需要结合具体方案验证的设计选择。

存储位宽与计算精度分开看

Hugging Face的Transformers v4.50.0文档为4位加载单独提供计算数据类型配置;其8位方案也描述了敏感部分保留更高精度的处理。由此不能把低位存储理解为全部运算都采用同一低位整数。

恢复成浮点格式,也不意味着找回原始数值:整数q对应的是一个近似区间,丢掉的细节没有凭空回来。是否更快还取决于内核、硬件、形状与转换成本,不能仅根据“位宽减半”承诺延迟减半。

部署前用同一组任务比较

建议固定模型、输入与输出长度分布,分别记录量化前后的完成率、任务质量、峰值内存、首token延迟和生成间隔。对数字、代码、格式要求严格的任务,保留具体失败样例;平均分接近也可能掩盖某类错误变多。

训练适配器时,还要区分基础权重的存储方式与LoRA可训练参数。这篇只说明位宽算术与均匀量化误差,没有复现任何量化论文的基准成绩,也没有指定一个适用于所有模型的最优位宽。

English version

资料来源

PyTorch: Introducing Quantized Tensor; Transformers v4.50.0: bitsandbytes.

补发说明:北京时间2026年10月11日实际补发,文章日期保留原计划09:00。固定版本文档用于核对既有技术行为,不作为最新版安装指南。

支持

如果这篇文章对你有帮助,欢迎支持本站。

微信支持二维码,点击查看大图
微信
支付宝支持二维码,点击查看大图
支付宝
Buy Me a Coffee,点击支持本站
Buy Me a Coffee

二维码可点击放大。更多支持方式见支持页面。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*