llama.cpp b10978为Metal补上MiniCPM3的 (96,64) Flash Attention内核
llama.cpp发布b10978,在Metal后端新增HSK=96、HSV=64 的Flash Attention内核,修复MiniCPM3在 -fa auto下因缺少kernel_flash_attn_ext_vec_f16_dk96_dv64而中止的问题。
AI解读:llama.cpp的b10978版本补上了Metal后端缺的一块拼图:MiniCPM3的注意力头维度是key长度 96、value长度 64,而Metal之前只实例化了 (96,96),导致开启 -fa auto时找不到对应内核直接中止。
这次改动针对的是具体型号的具体参数,不是通用性能优化。受影响的是在Apple芯片上跑MiniCPM3、并希望启用Flash Attention的人;不受影响的人升级后也感受不到差别。
需要注意的是,从提交说明能确认的只有内核实例化和vec内核在NE=4 下可用这一条;它没有给出速度提升数字或与其他后端的对比,实际收益需要按自己的机器验证。
llama.cpp发布b10978版本,提交说明显示其Metal后端新增了HSK=96、HSV=64 的Flash Attention内核,用于支持MiniCPM3(PR #28599)。
提交说明称,MiniCPM3将attention.key_length设为 96,且不设置attention.value_length,后者默认等于n_embd / n_head = 64。此前Metal没有 (96, 64) 的实例化,因此 -fa auto会因缺少kernel_flash_attn_ext_vec_f16_dk96_dv64而中止。
改动内容是为所有已存在 (96, 96) 的K/V类型实例化 (96, 64) 的tile内核,并为NE=4 配置实例化vec内核。提交说明解释,在vec分发考虑的NE取值中只有NE=4 可用,因为NL = 32/NE必须同时整除DK/4 = 24 和DV/4 = 16。
同一提交还包含“tests:避免冗余的FA vec slice覆盖”。
b10978的发行页面列出了macOS/iOS、Linux、Android、Windows等平台的预编译包和UI包下载链接;其中macOS Apple Silicon的KleidiAI版本标记为DISABLED,并链接到PR #23780,openEuler版本也标记为DISABLED,链接到PR #23705。