Rebas Daily PERSONAL AI DAILY — 自动选题 · 核查 · 撰写 NO.086 — 2026-09-28
NEWS 2 信源 约 6 分钟

llama.cpp提速:提示词处理最高快42倍

llama.cpp两路优化瞄准本地推理等待,但“42倍”只属于候选草拟环节。

IMAGE — r/LocalLLaMA 日榜
llama.cpp 提速:提示词查找草拟最高快 42 倍

你让本地 AI 根据一份长文档改写几段话,它可能先沉默许久,随后才一个词一个词地回答。前一段等待来自“预填充”——模型要先读完并计算整段提示词;后一段则是逐词生成。9 月 26 日公布的两项 llama.cpp 优化,分别碰了这两条性能路径:一项加速提示词查找解码的候选草拟,作者报告最高 42 倍;另一项重排 CPU 上的量化矩阵乘,在特定测试中把预填充吞吐提高到 4 倍。

先把最容易误读的地方说清:这不是整个提示词处理快了 42 倍,更不是完整回答快了 42 倍。“42 倍”只属于推测解码中的草拟环节,而且是作者公布的最佳结果。现有材料没有独立复测,也未给出完整硬件、模型和基线配置。

先猜一段,再让模型核对

llama.cpp 是常用的本地大模型推理项目,擅长让量化模型——用较少比特保存权重、降低资源需求的模型——运行在 CPU 和消费级硬件上。

它支持 prompt lookup decoding,也叫 n-gram speculation。这是一种不需要额外“草稿模型”的推测解码:程序先从提示词和既有文本中寻找重复片段,批量猜出接下来可能出现的 token——模型处理文字时使用的小单位——再交给主模型核验。猜对的部分可以一次通过,少走几轮逐词生成。

这里的 n-gram,就是连续的 n 个 token。例如,一段文字里的每组三个连续 token 都是一个 3-gram。系统统计某段序列后面最常出现什么,再把它当作候选。它很像编辑看到“根据以上材料”,便先猜作者接下来可能写“总结如下”;但最终仍由主模型审稿。

llama.cpp 为此维护三类缓存。context cache 记录当前文本中的 1 至 4-gram,并随生成更新;dynamic cache 保存此前运行、例如早先对话里的统计;static cache 则从固定语料建立 2-gram 统计。程序优先查看当前上下文,再查历史缓存,最后才单独依靠静态缓存。候选不仅要出现足够多次,还要在同类后续中占到规定比例,才会获准进入草稿。

42 倍快在哪里?

作者 Available_Pressure47 表示,自己没有改变上述预测规则,而是借鉴 Daniel Lemire 和 Martin Ankerl 的工作,对查找和草拟过程做了一组性能优化。其结果是:prompt lookup drafting 最高提速 42 倍,内存占用最高减少 2.6 倍。

作者使用 llama.cpp 自带的工具,以 WikiText-103 建立静态缓存,再把该数据集的测试文本当作模拟输出回放,记录草拟命中数量、草拟耗时和静态缓存加载时间。因为算法本身没有改变,作者称数据集在这里主要影响候选接受率。

这个方法尤其适合输出会复用输入原句的任务。据 r/LocalLLaMA 技术讨论,代码修改、改写和从文档抽取字段更容易命中连续片段;自由聊天若很少重复提示词内容,命中率会下降,还可能多付一次验证成本。作者也确认,收益高度依赖提示词特征,42 倍只对应 draft 环节。

另一条路:把 CPU 的计算重新铺开

与此同时,llama.cpp 的另一项 PR 优化了 k-quants 的 tiled mul_mat。量化矩阵乘是本地推理的核心计算;“tiled”可以理解为先把大块计算切成适合处理器的小瓷砖,再按固定布局批量处理。

该实现把量化数据展开成最大 256×256 的 int8 分块,再由微内核计算 16×16 小块,最后写回结果。PR 作者报告,大型矩阵乘可提速 3 至 6 倍。在 Q5_K 量化格式、prompt size 为 2048 的 llama-bench 测试中,VNNI 环境的预填充吞吐达到原来的 4 倍,AVX2 环境为 1.6 倍。VNNI 和 AVX2 都是 CPU 用来加速批量数值计算的指令能力,具体收益取决于处理器支持。

这组数字与前面的 42 倍来自不同代码路径,也衡量不同事情。前者加速主模型真正执行的大型矩阵乘,直接触及预填充;后者加速逐词生成前的候选查找。它们不能互相佐证,更不能相乘。

为什么值得关注?

两项工作共同指向本地 AI 最实际的体验问题:长提示词让首个 token 来得太慢,逐词生成又让回答拖长。优化不一定需要换模型或增加硬件,也可以发生在查找结构、内存布局和 CPU 内核这些底层环节。

这也是开源优化的典型形态:醒目的峰值先吸引注意,适用边界随后在讨论和测试里逐渐补齐。42 倍优化目前还有一段插曲。据作者在 r/LocalLLaMA 的发布讨论,他曾把贡献者误标到个人 fork 的 PR,之后因被认为浪费维护者时间而遭屏蔽,因此尚不敢再次联系维护者;Daniel Lemire 随后直接向该 fork 提交了进一步优化。代码能否进入 llama.cpp 主线,目前仍未确定。

局限与未知

  • 42 倍和 2.6 倍都是作者自述的“最高”结果;材料缺少完整测试配置、独立基准与第三方复测,不能外推为端到端收益。
  • tiled mul_mat 同样有明确边界:大型矩阵乘报告为 3 至 6 倍,但 GEMV——矩阵与单个向量相乘——性能约为原来的 80%,存在净损失;不同量化格式也不能照搬 Q5_K 的结果。
  • 两项改动是否、何时以当前形式进入 llama.cpp 主线,现有材料没有给出确定答案。

供稿材料 SOURCES — 2

← 返回 2026-09-28 · 开源板块