正文
前文
大语言模型推理,用动画一看就懂!
和
图解KV Cache:加速大模型推理的幕后功臣
的动图里,我们用的都是同一个例子,从中能看到模型推理可以分为两个阶段:Prefill(装填) 阶段和 Decode(解码)阶段。Prefill 是模型推理的第一步,输入是 prompt,此时需要计算整个输入文本上的 attention (self-attention)。而第二次及以后的前向迭代,输入只是单个 token,只需要计算单个 query 上的 attention,可以复用缓存里计算好的之前的 key 和 value。
KV Cache Block 的生命周期
首先来看看 vLLM 里处理请求的大致流程图,请求会被放到队列里,然后调度器负责处理这些请求,需要做的事情主要是合理安排 KV Cache 的存储资源,具体是 BlockSpaceManager 来做的。Scheduler 准备好当前想要调度的请求的资源后,LLMEngine 会再调用 Executor(Modle) 来执行一次前向的迭代。下面是 vLLM 里处理请求的大致流程图:
下面我们放大,进入到几个管理 KV Cache 的核心组件上,组件和相互之间的关系如下(假期看了三天才完全梳理清楚):
初始化