开源llama.cpp Releases·原文 2026年9月26日

llama.cpp b11195为k-quants引入分块mul_mat,大矩阵乘法提速 3–6 倍

该版本在ggml-cpu上为k-quants添加tiled mul_mat:量化数据先解包为最大 256×256 的int8分块,再由微内核计算 16×16 子块并写回 256×256 浮点结果;大矩阵乘法提速 3–6 倍,但GEMV性能下降约 80%。

AI解读:llama.cpp发布b11195构建版本,核心改动是在ggml-cpu上为k-quants增加分块(tiled)mul_mat。简单说,就是把量化权重先拆成小块再逐块计算,做的是让CPU跑大矩阵乘法更快这件事。

按发布说明的说法,大矩阵乘法有 3–6 倍提速;代价是GEMV(一次只乘一个向量)性能掉到原来的约 80%,也就是净亏。平衡点出现在 4096×64 乘 64×4096 这种形状。如果你主要跑批量推理,这次改动方向对了;如果主要跑单条提示词生成,收益可能为零甚至变负。

量化带来的误差被描述为很小:最大约 1e-04,RMSE约 1e-05。这一点对在意输出质量的用户来说比速度数字更关键,因为它决定了这个优化能不能默认用在生产里。

llama.cpp发布b11195构建版本,主要改动是在ggml-cpu后端为k-quants实现分块(tiled)mul_mat(矩阵乘法)。该改动由GitHub上的提交说明(PR #27851)记录,合作者包括Georgi Gerganov与Bartowski。

分块计算怎么做的

发布说明描述:对于每个mul_mat_one_chunk,量化数据先解包为最大 256×256 的int8分块(每种量化类型一个例程),随后微内核计算 16×16 子块,最后把 256×256 的浮点结果写回主内存。测试和基准位于tests/test-tiled-mulmat.cpp。

  • 量化数据解包为最大 256×256 的int8分块,每种量化类型一个例程
  • 微内核计算 16×16 子块,最终写回 256×256 浮点结果
  • 测试与基准代码位于tests/test-tiled-mulmat.cpp

性能与精度的具体数字

按提交说明,大矩阵乘法获得 3–6 倍速度提升;在 4096×64 乘 64×4096 的形状上达到盈亏平衡;GEMV性能约为原来的 80%,即净损失。精度方面,误差被描述为很小:最大约 1e-04,RMSE约 1e-05。

说明同时提到,基准测试默认关闭,仅在显式开启时运行。

  • 大矩阵乘法:3–6 倍速度提升
  • 盈亏平衡点:4096×64 乘 64×4096
  • GEMV:约 80% 性能(净损失)
  • 误差:最大约 1e-04,RMSE约 1e-05
  • 基准默认禁用,需显式开启

工程实现与平台修复

提交说明列出多项工程改动:修复ARM/Windows构建,解决MSVC下ggml-cpu.h不可见的问题;为AVX2与iq量化修复内核;修复test-tiled-mulmat中ASan检测到的内存泄漏并避免返回后使用栈;用std::call_once保护环境变量标志;VNNI重打包简化为每个宏块一次调用;不再使用threadlocals,改为对齐的wdata访问。

  • 修改包括ARM/Windows构建修复,MSVC下ggml-cpu.h不可见
  • AVX2与iq量化内核修复
  • 修复test-tiled-mulmat的ASan内存泄漏与返回后使用栈问题
  • 环境变量标志用std::call_once保护
  • VNNI重打包简化为每个宏块一次调用
  • 移除threadlocals,采用对齐的wdata访问
  • mul_mat_id中Q8_K行的逐线程收集被移除,改为单遍收集/重打包
  • 除dense/普通路径外,重打包方法也支持mmid路径

分块与内存访问细节

说明还提到:重打包现在原地进行,16×64 微块彼此独立;行按 16 行一组按需重打包,以在行数较少的场景减少工作量,并在其他场景优化L1使用;内存受限区间使用长面板;src1_repack在不需要特殊重打包时返回false,由通用驱动处理常见情况。

  • 重打包原地进行,16×64 微块相互独立
  • 按 16 行一组按需重打包,减少低行数场景的工作量并优化L1
  • 内存受限区间使用长面板
  • src1_repack无需特殊重打包时返回false,交给通用驱动
  • 对齐读取,因为wdata通过填充保证对齐

附带构建产物

该版本附带macOS(Apple Silicon arm64、Intel x64、iOS XCFramework)、Linux(Ubuntu x64/arm64/s390x,以及Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO 2026.4、SYCL FP32/FP16、Snapdragon多后端)、Android(arm64、骁龙CPU/Adreno GPU/Hexagon NPU)、Windows(x64/arm64 CPU、OpenCL Adreno、CUDA 12.4/13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0)与UI包等下载。说明中macOS Apple Silicon的KleidiAI版本与openEuler相关条目标注为DISABLED。

信息来源

llama.cpp Releases原始来源