llama.cpp v0.9.0 大版本:FP8 E4M3 量化支持,多序列 prefill 提速最高约 2.9 倍

2026-11-05来源:llama.cpp GitHubllama.cpp 本地部署 推理优化 量化

跑本地模型的常青引擎 llama.cpp 于 11 月 4 日挂出功能大版本 v0.9.0,距 v0.7.0(10 月 15 日,见站内 008)三周,改动集中在三处:FP8 量化地基、多序列推理的 unified KV cache 性能修复、四个新架构收录。底层 ggml 同步升到 v0.29.0,CPU/CUDA/SYCL/Metal/Vulkan/OpenCL/Hexagon 各后端均带性能更新。

FP8 E4M3 量化:类型与转换已进,后端计算还在路上

v0.9.0 给 ggml 加入了 OCP FP8 E4M3 tensor 类型(#27512,10 月 29 日合入)。E4M3 是 8-bit 浮点格式(1 符号位 + 4 指数位 + 3 尾数位),与 Q8_0 这类 8-bit 整数量化是两条路线:浮点格式动态范围宽,是数据中心推理硬件(NVIDIA Hopper/Blackwell tensor core)的主流 8-bit 格式。本次只实现 saturating(饱和)模式——按 PR 说明,E5M2 变体多用于训练,推理最常用的是 E4M3,因此放弃 NaN 保留能力换实现简单。

本版收录的具体内容:

项 状态
FP8 E4M3 tensor 类型 + 量化转换工具 + 新 ftype LLAMA_FTYPE_MOSTLY_F8_E4M3 已进 v0.9.0
CUDA 后端 FP8 计算 kernel(#28413) 未合入,open
Vulkan 后端 FP8 支持(#29791) 未合入,open
FP8 KV cache(#28392) 未合入,open

也就是说,v0.9.0 时点你能把模型转换成 F8_E4M3 量化、GGUF 文件能存能传,但主流 GPU 后端的 FP8 计算支持还在后续 PR 排队——想在消费级显卡上吃到 FP8 提速,要等后端 PR 合入的版本。另外按 #27512 说明,scaled tensor 的完整缩放处理也在补齐路上,本版对误用缩放类型会报错而非静默出错。

flash_attn_ext_rows:多序列 prefill 提速约 2.5–2.9 倍

本版另一个重点(#29510,11 月 2 日合入):新增 flash_attn_ext_rows 算子,修复 unified KV cache 在多序列推理时的 prefill 性能问题。

先说背景。llama.cpp 的 KV cache 有 unified(统一池)与非 unified 两种模式:unified 模式把所有序列的 KV 存进一个共享池,省显存也便于槽位调度,代价是注意力计算要用掩码把其他序列的 token 过滤掉——并发序列一多,这个掩码过滤本身就成了 prefill 的大头开销。新算子的做法是让每个 query 切片只 attend 自己序列的 K/V 行,配套新增 kv_rows 结构做间接查表,掩码不再逐 token 扫全池。

官方在 RTX Pro 6000 上给出的 batched bench 实测(400K 上下文、4 并发、Q8_0 模型、-fa on):

模型 prefill(修改前) prefill(修改后) 提速
Gemma-4 26B-A4B 2982 t/s 8626 t/s 约 2.9 倍
Qwen3.8-27B 1106 t/s 2778 t/s 约 2.5 倍

按 PR 口径,修改后的 unified KV cache 性能约等于非 unified 模式(-nkvu),同时保留 unified 的显存与调度优势。decode 侧两模型也各有小幅提升(273→288 t/s、90→102 t/s)。受益场景很明确:跑多并发/多会话的 batched 推理——本地批量处理文档、并发服务多用户这类负载;单序列聊天场景吃不到多少收益。

需要注意:这个算子要求 flash attention 开启(-fa on)才生效,且需后端支持该扩展(首提 CUDA,其他后端陆续跟进中)。

新架构:Clover 扩散模型、Metis-1.6、Mistral Large 4 等

本版收录四个新架构:

模型 类型 看点
Clover-35B-A3B-Preview 文生图扩散模型 以 AR(自回归)模式接入 llama.cpp(#31306)
Limite 1B - Violetto 对话模型 1B 小模型(#29433)
Metis-1.6(Praxis ~2.9B / Logos ~10.2B) 混合架构 Mamba-2 / GQA 混合注意力 + LatentMoE(#31134)
Mistral Large 4 对话模型 11 月初上 HF 热榜的大杯(#31376)

已有模型这边,LFM3 的 NVFP4 GGUF 支持(#31608)与张量并行张量拆分(#31431)就绪,Gemma 4 E2B/E4B 拿到图优化,prefill 大幅提速(#31356)——前面 bench 表里那组 2.9 倍数字跑的就是 Gemma-4 26B。

音频:Chatterbox TTS、Nemotron 3.5 Transcribe、Pocket TTS 预定义音色

llama.cpp 的多模态音频线继续扩充(#30993、#31471、#31429):

  • Chatterbox TTS:收录这条开源 TTS 线的支持,mtmd.h 新增对应生成类型与音色数接口。
  • Nemotron 3.5 Transcribe:支持 40 种语言的离线转写,带提示词上下文与说话人归属。
  • Pocket TTS 预定义音色:不克隆音色也能直接用预置音色生成语音。

服务端配合更新:GET /props 会报告模型支持的预定义 TTS 音色,TTS 端点直接接受音色名。本地跑语音助手这条链路(Ollama 侧 013/015 收录过的 TTS 线,llama.cpp 本体也在补齐)又厚了一层。

其他值得知道的

  • NCCL 多节点张量并行(#28967):多进程通信接口初版合入,跨机张量并行有了一块地基。
  • 批量 tensor copy API(#30881):ggml_backend_tensor_copy_n/set_n/get_n 取代旧 _2d API,Metal 与 CUDA 已实现。
  • 模型加载提速(#31321):复用 tensor staging buffer、跳过 direct-IO bounce buffer。
  • KV cache 修复:Hadamard 旋转常数驻留 GPU(#31073)、共享 KV 层注意力张量旋转修复(#31406)等。
  • llama.cpp 第三年入选 GitHub Octoverse 特色仓库。
  • 服务端与 Web UI 修复一批(投机检查点恢复、MCP 分组勾选、持久存储请求等),无破坏性 API 变更。

升级注意事项

  1. 别急着转 F8_E4M3 主力量化:如前述,类型/转换已进但 CUDA/Vulkan 后端计算未合入,转换出来的文件目前主要意义是提前备货格式,跑起来还是要等后端 PR。
  2. 多序列场景记得 -fa on:flash_attn_ext_rows 依赖 flash attention 开启;跑并发推理的升级后值得重跑一轮 bench 对比。
  3. 无破坏性变更:对比 v0.7.0 改默认端口那次,本版 API 变更全部是新增(音频接口、/props 音色字段、/v1/responses 参数合并),脚本不用改。

参考链接