跳到主内容

量化是怎么取整的?从 16 位到 4 位的压缩

2026-10-18 发布 来源:我告诉你AI导航 阅读

同一个大模型,16 位精度存放要占几十 GB,压到 4 位后只剩零头,中间发生的事就是量化取整:把连续变化的权重数值,四舍五入到一张稀疏的刻度表上。它是大模型从数据中心走进普通设备的关键一步。理解它,你就明白压缩后的模型为什么基本可...

同一个大模型,16 位精度存放要占几十 GB,压到 4 位后只剩零头,中间发生的事就是量化取整:把连续变化的权重数值,四舍五入到一张稀疏的刻度表上。它是大模型从数据中心走进普通设备的关键一步。理解它,你就明白压缩后的模型为什么基本可用,又偶尔在特定任务上掉链子。

先定刻度,再谈取整

4 位整数只有 16 个刻度,装不下 16 位浮点数那片连续区间,所以第一步是划范围。进来的是一组权重数值,发生的事:统计最大最小值,算出缩放系数,把整片区间映射到 0 到 15 的刻度上。出去的是两样东西:缩放系数本身,以及每个权重取整后的整数编号。

步骤做什么产物
划范围统计一组权重的最大最小值缩放系数
映射刻度把区间映射到 0 到 15 的整数网格每个权重的整数编号
反量化整数编号乘回缩放系数近似还原的原值

类比是用厘米尺量身高,量不出毫米。回到机制:尺子刻度对应整数网格,读数对应反量化——使用时把整数编号乘回缩放系数,近似还原原值。刻度间距由缩放系数决定,这是类比之外要记住的真实部分。

分组缩放:误差怎么被驯服

整层共用一个缩放系数太粗,数值分布可能两头极端。通行做法是分组:每 32 或 64 个相邻权重一组,各组单独统计范围、单独定缩放系数。组越小,刻度越贴合本地分布,取整误差越小,代价是系数本身占的存储变多。

可带走的判断:看到量化版本标注 g32、g64,它控制的就是分组粗细。同一位宽下分组更细的版本误差更小、文件略大。四舍五入是无偏的,误差不去别处,摊在每个数值的末位上。

算力换存储:用时再还原

量化省的是存储和搬运带宽,计算时仍要把整数编号乘回缩放系数、近似还原后参与运算。这是拿一点计算换大量存储的交换:显存省下一大截,计算链路只多几步乘法。对显存紧张而算力相对宽裕的设备,这笔交换很划算。

所以同一份 4 位模型在不同设备上体验不同:带宽受限的设备提速明显,计算本就吃紧的设备收益有限。选部署方案前,先弄清瓶颈在哪一侧。在 ModelScope 上,同一模型常挂出多个量化版本,DeepSeek、Kimi 这类助手能在普通设备流畅响应,低比特压缩是幕后功臣之一。

敏感层为什么不压到 4 位

统一压到 4 位并不划算:少数层对误差特别敏感,压狠了回答质量明显滑坡。通行做法是混合精度,大头压到低位,敏感层保留 8 位甚至 16 位。哪些层敏感、范围定多宽,由 校准数据 的统计结果决定。混合专家模型里的路由矩阵通常也更受保护,门控机制见 MoE 路由。

嵌入层同样会被取整,而它的尺寸由词表决定——词表怎么训练出来,见 分词器的词表 的拆解。

位宽对照表

  • 16 位:训练与高精度部署,文件最大
  • 8 位:接近无损,体积约减半
  • 4 位:端侧与本地部署主流,质量略降
  • 2 位:激进压缩,多数任务明显掉点

挑量化版本时,先看位宽与分组,再看敏感层是否被保护,最后才比文件大小。

关于量化取整再多问三句

  • 取整误差会在长对话里越积越多吗?:不会简单累加。误差发生在权重存储侧,每步计算用同一套近似值,表现是整体质量略降,而非越聊越偏。
  • 压到 4 位后回答会明显变差吗?:日常对话几乎察觉不到,数学、代码这类敏感任务掉点更明显。选版本前看它对敏感层的保护策略。
  • 缩放系数存在哪里?:与整数编号一起存进模型文件,反量化时读出来乘回去。它体积极小,却是整张刻度表的锚点。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]