主要观点总结
本文详细讲解了vLLM Prefix Prefill Kernel的核心逻辑,包括Triton Kernel编程的入门知识、Prefix Prefill Kernel与Attention Kernel的区别、Tiling分块策略、Kernel调用逻辑(单测)、如何确认有多少个Token被Prefix Cache命中、通用Head Sizes支持、MQA/GQA支持以及Triton Kernel源码解析。
关键观点总结
关键观点1: Triton Kernel编程极简入门
介绍了Triton Kernel编程的基本概念,降低了CUDA Kernel编写的难度,并自动化了优化策略,如内存事务合并、SRAM分配和管理、流水线优化等。
关键观点2: Prefix Prefill Kernel与Attention Kernel区别
分析了Prefix Prefill Kernel在处理被Prefix Cache命中的KV Cache和未被命中的New Tokens时的区别,并解释了为什么需要使用新的kernel来处理这种情况。
关键观点3: Tiling分块策略
描述了Prefix Prefill Kernel中的分块策略,包括BLOCK_M、BLOCK_N和max_input_len/BLOCK,并展示了分块布局。
关键观点4: Kernel调用逻辑(单测)
详细说明了_fwd_kernel_alibi源码,并给出了单测代码,展示了如何调用Prefix Prefill Kernel。
关键观点5: 如何确认有多少个Token被Prefix Cache命中
介绍了在context_attention_fwd中加入代码来确认被Prefix Cache命中的Token数量。
关键观点6: 通用Head Sizes支持
分析了Prefix Prefill Kernel对通用head size的支持,包括load/store Mask和MQA/GQA处理。
关键观点7: MQA/GQA支持
详细解释了Prefix Prefill Kernel如何支持MQA/GQA,包括计算实际使用到的kv head的索引。
文章预览
作者丨DefTruth 来源丨https://zhuanlan.zhihu.com/p/695799736 编辑丨GiantPandaCV 0x00 前言 在上一篇Prefill优化的文章中,已经详细讲解了vLLM Automatic Prefix Caching(Hash RadixAttention)的原理和Cache调度的实现,包括SGLang RadixAttention原理,并且结合图解和代码,详细分析了vLLM中的Hash RadixAttention实现。vLLM中的Hash RadixAttention内容包括:Hash RadixAttention、Hash Prefix Tree、Prefix/Generate 阶段Hash码处理、Prefix + Generated KV Caching的调度逻辑、边界情况思考、vLLM Automatic Prefix Caching在多轮对话中的应用分析以及代码应用实践。本篇,继续深入,讲解Automatic Prefix Caching中用到的Triton Based Prefix Prefill Kernel。 推荐先阅读完上一篇的Automatic Prefix Caching原理,再来阅读本篇的kernel解读。 DefTruth:[Prefill优化][万字] 原理 & 图解vLLM Automatic Prefix Cache(RadixAttention): 首Token时延优化 https://zhuanlan.zhihu.com/p/693556
………………………………