llama.cpp v0.9.0 大版本:FP8 E4M3 量化支持,多序列 prefill 提速最高约 2.9 倍
跑本地模型的常青引擎 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取代旧_2dAPI,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 变更。
升级注意事项
- 别急着转 F8_E4M3 主力量化:如前述,类型/转换已进但 CUDA/Vulkan 后端计算未合入,转换出来的文件目前主要意义是提前备货格式,跑起来还是要等后端 PR。
- 多序列场景记得
-fa on:flash_attn_ext_rows依赖 flash attention 开启;跑并发推理的升级后值得重跑一轮 bench 对比。 - 无破坏性变更:对比 v0.7.0 改默认端口那次,本版 API 变更全部是新增(音频接口、
/props音色字段、/v1/responses参数合并),脚本不用改。