llama.cpp b11408为SpacemiT X60增加Q8_0 IME1矩阵内核
该版本为SpacemiT X60的IME加速补上Q8_0路径。开发者测试显示,在Milk-V Jupiter上pp128从 10.70 t/s提升到 93.87 t/s,Q4_0路径不变。
AI解读:此前SpacemiT X60的IME矩阵加速只覆盖Q4_0、Q4_1、Q4_K;由于SpacemiT构建将GGML_CPU_REPACK设为OFF,没有编译repack路径,Q8_0完全没有加速路径,预填充速度约为同板Q4_0的十分之一。b11408新增Q8_0 IME1内核,使这一量化格式在该板卡上获得加速路径。
适用条件来自开发者说明:该改动面向SpacemiT X60的IME1路径,测试环境为Milk-V Jupiter、Bianbu 2.1.1、gcc 14.2,模型为Qwen2.5-0.5B-Instruct Q8_0。性能数字是在taskset -c 0-3下运行llama-bench -t 4、空闲板上 5 次重复测得。
Q4_0路径未受影响,测试中保持 106.40 到 107.51 t/s,这与改动不涉及该路径的说明一致。正确性方面,开发者称在K=32 到 4096 范围内与量化精确整数参考对比,最大相对误差约 1e-6,并检查了多个提示词下生成保持连贯。
llama.cpp发布b11408,其中ggml-cpu为SpacemiT X60增加Q8_0 IME1矩阵内核(#28479)。
X60上Q8_0此前没有加速路径
提交说明称,在SpacemiT X60上,IME矩阵加速此前只覆盖Q4_0、Q4_1、Q4_K。Q8_0没有IME1内核,而SpacemiT构建将GGML_CPU_REPACK设为OFF,没有编译repack路径,因此Q8_0完全没有加速路径,同一块板上预填充速度约比Q4_0慢十倍。
新增的Q8_0 IME1实现
改动包括:增加make_block_q8_0x16以及Q8_0 repack入口,将权重交织成IME1 vmadot序列所需的 16 列布局;增加ime1::gemm_kernel_i8i8,这是一个int8 x int8的IME1内核,包含单行和 4 行A路径,其中 4 行路径每次加载B panel并在 4 行A上复用;增加quantize_a_4row_i8用于 4 行激活量化。两者接入Q8_0的forward_mul_mat和repack工厂,文档将Q8_0标记为X60上支持。
测试条件与结果
开发者称正确性检查方式为:与量化精确整数参考在K=32 到 4096 范围内对比,最大相对误差约 1e-6,并检查多个提示词下生成保持连贯。测试平台为Milk-V Jupiter(SpacemiT X60)、Bianbu 2.1.1、gcc 14.2,模型为Qwen2.5-0.5B-Instruct Q8_0。在taskset -c 0-3、空闲板上运行llama-bench -t 4、5 次重复,pp128从 10.70 提升到 93.87 t/s。Q4_0路径未受影响,从 106.40 到 107.51 t/s,开发者称这符合预期,因为改动不触及该路径。