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 | 在不依赖异步策略的一轮处理中,两者会多次交互,但是逻辑上的先后特性被完整转化成了时间上的先后顺序 而在实施了异步策略的一轮处理里,这个交互的逻辑就会变得更加复杂 |