llama.cpp b11821重构Intel XMX矩阵引擎多列计算,Q4_K_M在B70上提速 5.9%
该版本针对SYCL后端的Intel XMX矩阵引擎(int8 DPAS、ESIMD)重构多列mul_mat_vec_q,覆盖 2 至 80 个激活列,面向投机解码验证与短提示批处理;发布说明称B70上Q4_K_M的tg128从 26.67 tok/s升至 28.23 tok/s。
AI解读:llama.cpp发布b11821版本,变更集中在SYCL后端Intel XMX矩阵引擎上的多列mul_mat_vec_q,支持重排序的K-quant与Q8_0权重,激活列范围为 2 至 80。
发布说明给出的性能数字为:B70上tg128的Q4_K_M从 26.67 tok/s提升到 28.23 tok/s(+5.9%),Q6_K不变;batch 1困惑度XMX为 5.2064、非XMX为 5.2058。
这些数字是提交说明中的自报结果,来源未说明测试配置细节,也未由第三方复现;+5.9% 只对应上述单项基准,不能外推到其他模型、量化类型或硬件。
新增两个环境变量GGML_SYCL_XMX_MAX_COLS(默认 80)与GGML_SYCL_XMX_GLU_MAX_COLS(默认 16,上限 16),后者只能调低,因为融合kernel按最多 16 列编译。
llama.cpp发布b11821版本,主要改动是对SYCL后端Intel XMX矩阵引擎(int8 DPAS、ESIMD)上的多列mul_mat_vec_q进行重构,支持 2 至 80 个激活列,处理重排序的K-quant和Q8_0权重。
发布说明称,该改动面向投机解码验证(每步 2 至 8 个token)和短提示批(9 至 80 个token);Q2_K、Q3_K、Q8_0三种类型在单列时也使用这条路径。
性能数字与适用边界
发布说明给出的一项基准是:B70上tg128的Q4_K_M从 26.67 tok/s升至 28.23 tok/s,提升 5.9%;Q6_K未见变化。batch 1困惑度为XMX 5.2064、非XMX 5.2058。
这些数字来自提交说明,来源没有交代完整测试条件,也没有第三方复现。5.9% 只对应这一单项基准,不能据此推断其他硬件、量化类型或更长上下文的收益。
内核改动与新增开关
发布说明记录了开发过程中的一次真实缺陷:第一版在行数不是 4 的倍数时会产生NaN,随后已修复。另有一项改动是重写xmx_mul_mat对激活值的 64 字节对齐和 16 字节pitch检查。
新实现加入融合gate/up内核:一次启动同时计算两组FFN权重的up * act(gate),只读取一次激活,并在结尾应用SWIGLU或GEGLU;覆盖最多 16 列,适用于全部六种XMX类型。临时环境变量XMX_NOGLU已移除。
Q2_K加入min-sum优化:权重表示为d·scl·q − dmin·mc,其中scl(4 位scale)与mc(4 位min code)分别作用于 32 权重组的每一半。
新增两个环境变量:GGML_SYCL_XMX_MAX_COLS默认 80,可取 0 及以上任意值;GGML_SYCL_XMX_GLU_MAX_COLS默认 16,范围 0 至 16,只能调低,因为融合内核最多按 16 列编译。
测试结果
发布说明列出的测试通过情况为:MUL_MAT 1727/1727、MUL_MAT_VEC_FUSION 1361/1361;在后续重构中,MUL_MAT_VEC_FUSION 1369/1369、MUL_MAT 2281/2281、MUL_MAT_ID 937/937。两组数字对应不同阶段的提交。
同一次发布照常提供macOS、Linux、Windows、Android等平台的预编译包,其中包含SYCL FP32与FP16的Ubuntu x64构建。SYCL路径需要Intel GPU环境,其他后端的用户不受该改动影响。