PD/DT-separation

有关PD/DT分离的一些想法

最近实验室让看了有关这方面的论文,包括但不限kimi的[mooncake](zhenghuawei923/Mooncake-kimi-ai: Mooncake is the serving platform for Kimi, a leading LLM service provided by Moonshot AI. kimiAI大模型),以及tri-dao最新的[SSD](Speculative Speculative Decoding | OpenReview)

Mooncake

PD 分离的工程实现

SSD

在一个“节点”内部实现的一种简单的DT分离

一些想法

如果要从现有的 PD 分离的方法中借鉴,那就要弄清现在两种方法的相似和不同

PD DT
生命周期 prefill的生命周期短,且在一轮独立的处理中,只会出现一次;
decode的生命周期就更长,会一直generate直到满足条件
Draft阶段的推测是非常轻量的,所以它的生命周期更短
而 Target 的验证虽然一次性并行,但是本身是大的,所以周期长
计算特性 prefill阶段是密集型计算,规模随输入长度的增长而呈square/linear增长
decode阶段则是访存密集型,需要频繁的读写kvcache
Verify 阶段同样是密集型计算,但是其增长取决于生成的 draft token 的长度以及可能生成的 draft 树
Draft阶段取决于生成的策略,从最naive的串行到 EAGLE 之类的树状结构,再到PEARL生成的串行的异步,以及SSD的网状的结果,计算特性会有所不同,并发的程度也不一样
交互特性 在一轮独立的处理,两者只会交互一次,传输KVCache 在不依赖异步策略的一轮处理中,两者会多次交互,但是逻辑上的先后特性被完整转化成了时间上的先后顺序
而在实施了异步策略的一轮处理里,这个交互的逻辑就会变得更加复杂