开放权重大模型里已经有一类不容忽视的内存开销:n-gram 嵌入表。它在每个 token 位置把相邻两三个 token 的组合哈希进一张大表,取出向量直接加进 token embedding。查表本身几乎不增加计算量,但表可以做得极大——DeepSeek-V4.1-Flash 的 Engram 条件记忆就占了 1960 亿参数,这个数字在官方模型卡里写得很明确(DeepSeek-V4.1-Flash 模型卡)。
2026 年 10 月 22 日,Stephen Chung 与 Wenyu Du 在 arXiv 放出一篇论文(arXiv:2610.31646),问了一个很务实的问题:这张表的内存成本能不能砍掉,同时保住它带来的收益?
做法:码本加缩放,把精度压到 4 bit
方法并不复杂。每张表配一本码本,每个 embedding 分量只存一个 b bit 索引,外加一个 16 bit 的缩放系数;取回时用索引选码本值,再乘回缩放系数。对 p=128 的 embedding,内存占用从 16p bit 降到 p·b+16 bit——以 2 bit 为例,从 2048 bit 掉到 272 bit,省掉约 87%。
论文系统比较了三类码本(均匀、正态分位、从训练好的表里用 Lloyd–Max 拟合)与三类缩放选择(最大值对齐、RMS、误差拟合)。结论有点反直觉:缩放怎么选,比码本怎么选更重要。用误差拟合缩放时,三种码本能保留的收益都在 86.36%–86.52%;而均匀码本配最大值缩放只保住 58.04%。Lloyd–Max 配 RMS 缩放也有 86.19%,于是它被选作默认。
从零训练的小模型上,4 bit 几乎无损
作者从零训了五个模型(nanochat 26M/50M、GPT-2 系 30M、Llama 系 31M/322M),默认四张表、每张约 26.2 万条嵌入,在 ClimbMix 上训练,每组实验跑三个随机种子。衡量口径是"加表带来的验证集 loss 改善保留了多少"。
论文报告:4 bit 表省下 74%–75% 表内存,保留超过 99% 的改善;2 bit 省 86%–87%,但只剩 85.9%–91.0%。bigram 和 trigram 对量化的敏感度不同,混合精度分配也有讲究——给 bigram 多留比特的效果一致地更好,4 bit bigram 配 3 bit trigram 能保住 98.9%–99.4%,同时省 77%–78%。
大模型上验证:省一半,几乎不掉点
真正的价值在 DeepSeek-V4.1-Flash 和 Qwen3.8-Flash-Next 上的实测。4 bit 大致省掉一半表内存,DeepSeek 困惑度上升 1.26%,Qwen 几乎不变;压到 3 bit 时分化明显:Qwen 只涨 0.52%,DeepSeek 却涨 5.06%。
论文最终采用的混合位宽配置,在三个留出集(WikiText-2、Penn Treebank、C4)上都把困惑度变化压在 1.2% 以内,表内存省 47%–55%。下游任务(HellaSwag、ARC-Challenge、WinoGrande)平均准确率只降 0.93%(DeepSeek)和 0.27%(Qwen),对应配置分别省下 46.7% 和 55.0% 表内存。
一个容易被忽略的细节:最优位分配在两个模型上是相反的。DeepSeek 把多出的比特给 trigram 或 4-gram(4/5/4、4/4/5)比给 bigram(5/4/4)更好,Qwen 则相反,4/3 优于 3/4。这说明混合精度没法照抄配置表,得按模型实测。
最有意思的一步:省下的显存换成更多表
论文最后一步是把省下的内存重新投进去:每张表从 26.2 万条扩到 100 万条,用 2 bit 存,总表内存只用原来的 52%–54%,却比原来 16 bit 的表多提供 22%–26% 的改善。再加一段短微调,2 bit 下的改善从 122%–126% 抬到 129%–145%,而内存占用不变。
作者由此给出一条可操作的配方:预训练时多放嵌入,压完再短微调一下。这里要说清楚边界:省下的是表内存而非整个模型的内存;收益也只在 DeepSeek-V4.1-Flash 与 Qwen3.8-Flash-Next 两个大模型上验证过,换个模型仍需重测。
为什么值得关心
大模型这几年的内存账单一直在变:KV cache 被压到极致,MoE 让激活参数远小于总参数,注意力也换了一轮又一轮。但有一项开销被系统性忽略了——查表式的局部记忆。DeepSeek 敢在 Engram 里放 1960 亿参数,说明这条路确实有效;而有效的东西一旦变大,省下来的就是真金白银。
这篇论文的技术其实很朴素:码本加缩放,几乎是推荐系统里压缩 embedding table 的老手艺,被搬到了语言模型上。真正值得借鉴的是它的实验纪律——先训带表和不带表两个版本,两者差值才是"表的真实收益",压缩后再看这个收益还剩多少。这套口径比直接比 perplexity 干净得多,因为它把基线扣掉了。
更耐人寻味的是,论文的原始发现来自作者团队在 rStation 多智能体研究平台上跑出的一个自主 agent,论文把它复现并扩展到了更多模型和数据集。AI 负责撞方向、人来做验证,这个分工正在变成一种可行的研究范式。
对普通开发者的现实建议很简单:如果你在跑开放权重模型、并且撞上了 Engram 这类表带来的显存压力,4 bit 几乎是无脑的一档;如果显存实在不够,压到 2 bit 再用省下的空间换更大的表,可能比直接换一张更小的模型更划算。
等到查表记忆便宜到可以随便加的时候,真正卡住模型的会不会已经不是架构,而是训练数据本身?