Chunked Prefill和Prefix Prefill

Chunked Prefill(分块预填充):这是一种将单个长输入序列的 Prefill 阶段分解成多个较小、可管理的块(Chunks)来处理的技术。
对于一个非常长的提示(例如,10万 tokens),一次性进行 Prefill 会需要极大的显存来存储临时的中间状态,导致极高的首次 Token 延迟,因为用户必须等待整个长序列计算完毕才能看到第一个输出。
工作原理:
(1)将长输入序列切分成固定大小的块(例如,每块 2048 tokens)。
(2)系统依次处理每个块:为当前块计算 KV Cache 并缓存。
(3)一旦第一个块的 KV Cache 就绪,解码阶段就可以立即开始,生成第一个输出 Token,而无需等待后续所有块都完成 Prefill。
类比:就像下载和播放流媒体视频。
传统 Prefill:你必须等整个 2GB 的电影文件下载完后才能开始观看。
Chunked Prefill:你只需要下载开头几兆(第一个 Chunk),就可以开始播放了,同时后台继续下载后续部分。
应用场景:主要用于处理超长上下文的输入,如长文档总结、长视频分析等。
Prefix Prefill(前缀预填充):这是一种优化技术,用于处理共享一个共同前缀的多个请求。
在对话或多轮交互中,系统提示、历史对话记录、文件内容等可能在不同请求间是完全相同的。如果每个新请求都重新计算这些相同 tokens 的 KV Cache,会造成巨大的计算浪费。
工作原理:
(1)当识别到多个请求共享一个公共的前缀时,系统会为这个前缀预先计算并持久化其 KV Cache。
(2)对于每个新的、包含该前缀的请求,系统直接复用已经计算好的前缀 KV Cache的物理 Page。
(3)只需要为新的、不同的部分(例如用户的最新问题)进行 Prefill。
类比:就像做一道复杂的菜,其中高汤需要熬制 8 小时。
传统 Prefill:每次有客人点这道菜,你都得重新熬制 8 小时高汤。
Prefix Prefill:你提前熬好一大锅高汤(计算并缓存前缀)。当有客人点菜时,你直接用现成的高汤,只处理炒菜等后续步骤(只为新内容 Prefill),大大加快了出餐速度。
应用场景:多轮对话、批量处理具有相同系统提示或文档背景的请求。
#AI #人工智能 #互联网大厂 #芯片 #大厂 #ai #计算机 #算法 #面试