scaling 关系的研究正在从算力轴转向内存轴。10 月 14 日,华盛顿大学的 Ian Magnusson、Noah A. Smith 和 Pang Wei Koh 提交了这篇名为 The COUNT 的论文(arXiv 2610.20456),标题本身就是方法宣言:Counting Offline Unlocks N-gram Transformers——离线数数,就能解锁 n-gram 语言模型的内存扩展。
问题:内存轴上的扩展被 GPU 显存卡死了
过去两年,一系列工作试图给语言模型加上「外挂记忆」:为大量 n-gram 或文档片段添加嵌入,让模型掌握训练语料的长尾知识。这类方法的共同结构是把存储与计算解耦——每次前向传播只读取嵌入表的一小行,而整张表的体积远大于单行,所以表可以做得很大而算力不涨。
但现有方法有一个共同的昂贵假设:嵌入是可学习参数,要从零训练。训练意味着频繁的读写,读写意味着必须放进 GPU 显存。于是「内存扩展」这项名义上为了省算力设计的技术,扩展上限被最贵的资源卡住。与此同时,服务器的主机内存便宜一个数量级、容量大得多,却在训练管线里大量闲置。
方法:不学嵌入,数数就行
COUNT 的核心动作是删掉「学习」这个环节。它的做法分三步:
- 离线统计:在训练语料上预计算 n-gram 计数表,存放在主机内存。
- 构造嵌入:对当前的 n-gram 历史,查表找到语料中最常跟随它的若干个下一词元,用这些词元的词频做权重,把语言模型自己的 unembedding 向量加权组合,得到这个 n-gram 的嵌入。
- 作为输入:把这个嵌入作为额外输入嵌入喂给主干模型,与正常词元嵌入并行。
第二点是全文最巧妙的设计:模型自带的 unembedding 矩阵已经编码了词元的语义关系,COUNT 只是用语料统计去「混合」这些现成向量,因此零新增可学习参数、零 GPU 侧训练开销。计数表更新只是重新跑一遍统计脚本。
结果:三条结论
论文给出的核心数字有三组:
- 算力等效:固定算力预算下,给 1B 参数模型的预训练加 COUNT,验证损失的改善幅度与「多花 57% 算力但不加 COUNT」的对照组相当。
- 显存受限场景更优:当 GPU 显存不足时,与其让主干参数和可学习 n-gram 嵌入对半分显存,不如主干占满显存、n-gram 信息全部走 COUNT 放主机——前者效果更好。
- 推理时免训练换域:把通用语料的计数表换成领域语料(医疗、法律、代码等)的计数表,模型在推理时直接偏向新领域的词元分布,全程无训练。
第三条对工程侧最有吸引力。传统的领域适配要么微调(要 GPU、要数据、要防止灾难性遗忘),要么 RAG(要搭检索管线、要处理上下文塞入)。COUNT 的换表方案介于两者之间:一个统计脚本加一次文件替换,代价接近于零。
为什么这篇论文值得精读
它触碰了一个正在成形的共识:模型的「知识」未必都要压缩进权重。权重负责推理与泛化,长尾的统计事实可以外置到便宜介质上按需读取。这个思路与 KNN-LM、检索增强一脉相承,但 COUNT 把「外置」的成本降到了「数一遍数」的量级,把「读取」的位置放到了主机内存而非显存。
工程视角下的三个跟进方向:
- 推理服务整合:在 vLLM 这类服务框架里,COUNT 的嵌入查询可以做成一个异步预取层,主机内存做 LRU 缓存。论文没做这步,但路径清晰。
- 与 KV 缓存管理共存:长上下文场景里主机内存同时承担 KV 卸载和 n-gram 计数表,两者竞争同一块廉价内存,容量规划值得单独研究。
- 计数表的版本管理:换域适配的粒度可以细到「用户级」——用某个用户的历史文档统计计数表,实现个性化偏置。隐私和合规是新的问题。
在检索增强谱系里的位置
把 COUNT 放进「知识外置」的方法谱系里,它的坐标会更清楚。这个谱系上至少有四代技术:
- KNN-LM:推理时用 k 近邻检索训练语料分布,与模型输出分布插值。效果好,但检索库要在线查询,延迟开销大。
- 检索增强生成(RAG):把文档块喂进上下文。灵活,但吃上下文窗口,还要搭一整套检索管线。
- 可学习 n-gram 嵌入:把共现信息训练进额外参数。快,但被 GPU 显存容量卡死扩展上限。
- COUNT:预计算计数表放主机内存,零训练、零在线检索、零上下文占用。
COUNT 的独特之处是把三个成本项同时压到了最低:训练成本为零(只统计)、推理延迟接近零(本地内存随机读)、上下文成本为零(不占窗口)。代价是表达能力的天花板也最低——它只能编码「这个 n-gram 后面通常跟什么」的局部统计,语义泛化完全依赖主干模型。
这个取舍在特定场景下恰好是对的:模型已经「会推理」,缺的只是长尾事实的「记忆」。让权重管推理、让外挂记忆管事实,分工比全部塞进权重更经济。
与 KV 缓存管理的潜在竞争
一个论文没有展开、但部署侧必须面对的问题:主机内存在推理服务里不是闲置资源。KV 缓存卸载、前缀缓存、日志缓冲都在竞争同一块内存。COUNT 的计数表体积取决于语料规模和 n 阶数,没有给出上限数字——如果一张领域计数表就要占几十 GB,与 KV 卸载策略的冲突就需要显式规划。
反过来想,这也是机会:KV 缓存的调度器已经解决了「有限廉价内存上放什么、何时换入换出」的问题,把计数表纳入同一个调度框架,工程上是自然的延伸。谁先在 vLLM 或 SGLang 里把这件事做出来,谁就拿到了论文到生产的最后一公里。
实验全部停留在 1B 参数规模;n-gram 统计只能捕捉局部共现,对需要长程推理的任务没有帮助;主机内存到 GPU 的 PCIe 带宽在高并发服务场景可能成为新瓶颈——每次前向读嵌入行虽小,但批量请求下的聚合带宽需求没有在论文里充分压力测试。
但方向判断是清晰的:当算力的摩尔曲线放缓,把扩展压力转移到「便宜且闲置」的资源上是正确的问题意识。主机内存,可能是下一个被 AI 重新定价的硬件。