llama.cpp b11980为SYCL后端加入DPAS flash attention内核,支持量化KV缓存
该版本让解码和小批量(1 至 31 个query token)直接在q4_0、q8_0 KV块上运行flash attention,不再进行标量反量化,也不再在每次调用时把整个缓存转成f16。发布说明给出B580上Llama 3.1 8B Q4_K_M、q4_0 KV、16K上下文tg128从 31.3 提升到 54.2 t/s。
AI解读:实现上Q.K在XMX上使用s8×s4与s8×s8 DPAS,V.P保持f16;由于joint_matrix没有s4,dpas.s4.s8以内联vISA实现。覆盖head size 64至 512、GQA至多 32,并支持attention sinks;prompt阶段仍使用原有内核。
性能数据出自发布说明:B580、Llama 3.1 8B Q4_K_M、q4_0 KV、tg128,16K上下文下从 31.3 t/s提升到 54.2 t/s。正确性方面FLASH_ATTN_EXT通过 4582/4584,与master上相同的 2 个失败一致。
该内核可用GGML_SYCL_FA_DPAS=0 关闭;PR过程中移除了 192 这一head size,并在文档中加入Wildcat Lake,另新增GGML_SYCL_SUPPORT_XMX选项并重命名XMX宏。提交注明Assisted-by: Claude。
llama.cpp发布b11980版本,其中PR #31125 为SYCL后端加入DPAS flash attention内核,用于量化KV缓存。发布说明称,解码和小批量(1 至 31 个query token)现在直接在q4_0和q8_0 KV块上执行flash attention,而不再走标量反量化,或每次调用把整个缓存转成f16。
内核覆盖范围与实现方式
发布说明描述,Q.K在XMX上使用s8×s4和s8×s8 DPAS,V.P保持f16;由于joint_matrix没有s4,dpas.s4.s8以内联vISA实现。
覆盖范围包括head size 64至 512、GQA至多 32,以及attention sinks。Prompt阶段仍使用原有内核,不切换到该路径。
- 解码与小批量:1 至 31 个query token
- 量化KV类型:q4_0、q8_0
- head size:64 至 512
- GQA:至多 32
- 支持attention sinks;prompt沿用旧内核
发布说明给出的性能与测试结果
发布说明给出的一组数据:B580、Llama 3.1 8B Q4_K_M、q4_0 KV、tg128,在 16K上下文下从 31.3 t/s提升到 54.2 t/s。该数字仅对应这一配置。
正确性方面,FLASH_ATTN_EXT为 4582/4584,与master上相同的 2 个失败一致。
- B580,Llama 3.1 8B Q4_K_M,q4_0 KV,tg128,16K上下文:31.3 → 54.2 t/s
- FLASH_ATTN_EXT:4582/4584,与master相同的 2 个失败
开关与PR中的调整
该路径可通过GGML_SYCL_FA_DPAS=0 关闭。PR记录的其他改动包括:移除 192 这一head size,在文档中加入Wildcat Lake,新增GGML_SYCL_SUPPORT_XMX选项并重命名XMX宏。提交注明Assisted-by: Claude。
- 关闭方式:GGML_SYCL_FA_DPAS=0
- 移除 192 head size;文档加入Wildcat Lake
- 新增GGML_SYCL_SUPPORT_XMX选项,重命名XMX宏