主要观点总结
本文介绍了Prefix Caching技术,并结合vLLM Automatic Prefix Caching的源码和图解,详细解释了RadixAttention的原理和实现。文章首先回顾了整体技术时间线和相关论文,然后逐步解析了Prefix Caching: RadixAttention原理解析、vLLM Automatic Prefix Caching: Hash RadixAttention、vLLM Automatic Prefix Caching: Hash Prefix Tree、vLLM Automatic Prefix Caching: Prefix/Generate 阶段Hash码处理、vLLM Automatic Prefix Caching: Prefix + Generated KV Caching、思考一些边界情况、vLLM Automatic Prefix Caching: 在多轮对话中的应用分析、vLLM Automatic Prefix Caching: Prefix Prefill Kernel与Attention Kernel区别、vLLM Automatic Prefix Caching: 应用实践等主题。最后,总结了文章的主要内容和vLLM中的Hash RadixAttention实现,并给出了相关论文资料和代码应用实践。
关键观点总结
关键观点1: Prefix Caching: RadixAttention原理解析
RadixAttention是为了实现Automatic KV Cache Reuse,使用radix tree替代prefix tree,通过动态分裂大节点来满足共享前缀的需求,避免过于复杂的原理阐述。
关键观点2: vLLM Automatic Prefix Caching: Hash RadixAttention
vLLM使用hash码作为物理KV Block的唯一标识,通过BlockSpaceManagerV1类来管理block分配,使用hash_of_block函数通过prompt中的token_ids获取hash值作为cache block的唯一标识。
关键观点3: vLLM Automatic Prefix Caching: Hash Prefix Tree
vLLM实现的hash编码实际上具备前缀树的功能,以PhysicalTokenBlock为单位,每个node的内容是hash码,代表着从根节点到当前node的唯一路径。
关键观点4: vLLM Automatic Prefix Caching: Prefix/Generate 阶段Hash码处理
对于Generate阶段,先分配fake hash,生成后再根据实际token_ids更新hash码,确保不同prompt的cache block获取到唯一hash码。
关键观点5: vLLM Automatic Prefix Caching: Prefix + Generated KV Caching
vLLM的Prefix Caching功能还缓存了Generated KV Cache,在多轮对话的应用中,可以消除历史轮次中生成对话的recompute。
关键观点6: vLLM Automatic Prefix Caching: 思考一些边界情况
边界情况无法命中cache,例如last block的slots没有被用满或生成的token数小于block_size时。
关键观点7: vLLM Automatic Prefix Caching: 在多轮对话中的应用分析
在具有长system prompt的场景以及多轮对话的场景中,Prefix Caching有非常大的应用价值,可以极大地降低首Token的时延。
关键观点8: vLLM Automatic Prefix Caching: Prefix Prefill Kernel与Attention Kernel区别
使用Prefix Caching后,需要使用新的kernel来处理Prefill阶段的注意力结果,无法使用常规的Attention kernel。
关键观点9: vLLM Automatic Prefix Caching: 应用实践
离线推理时,指定enable_prefix_caching=True即可;在线服务化时,只需在启动服务时添加--enable-prefix-caching参数。
文章预览
作者丨DefTruth 来源丨https://zhuanlan.zhihu.com/p/693556044 编辑丨GiantPandaCV 0x00 前言 看了一些关于Prefix Caching的文章,感觉没有讲得很清晰。最近正好自己也想整理一下相关的技术,因此有了本篇文章。希望结合vLLM Automatic Prefix Caching的源码和一些自己画的图解,能尽量讲清楚这个问题。 最近,准备整理一下PagedAttention、Prefix Cache(RadixAttention)和Chunk Prefills的技术要点。这三个技术目前在TensorRT-LLM、vLLM这两个常用的LLM推理框架中都已经支持,因此,从应用落地的角度来说,理解这三个优化技术的原理也比较有意义。PagedAttention相关的文章网上已经很多,不再过多赘述,之后有时间再单独补档一篇PagedAttention V1/V2的文章。本文为该系列第一篇,主要记录Prefix Cache的技术要点,并结合图解和源码分析vLLM Automatic Prefix Caching的实现。相关技术的整体时间线和相关论文
………………………………