要解决的问题
大模型推理分两个阶段:
- 预填充(prefill):处理输入提示,常有较高的矩阵计算强度,也可以分块执行。
- 解码(decode):逐步生成 token,小批次时常受权重和 KV 缓存带宽限制;批次增大后也可能受计算或通信限制。
两者常见的负载特征不同,混合调度时长提示预填充可能拖慢正在解码的请求。但分离不是必然最优:低负载或网络较慢时,传输 KV 的成本可能超过收益,分块预填充等也是可选方案。
核心方法
把预填充和解码拆到不同的实例或资源池上,各自按需配置并行方式和资源规模。预填充完成后,通过高速网络把 KV 缓存传给解码实例。
代表工作
- Splitwise(2023):把两个阶段分到不同的机器上,并探讨使用不同型号的硬件。
- DistServe(2024):分别优化两个阶段的资源分配与并行策略,在满足延迟目标的前提下提高每卡吞吐。
- Mooncake(2024):月之暗面 Kimi 的服务架构,以 KV 缓存为中心,利用 CPU 内存和 SSD 构建分布式 KV 缓存池。
开放问题
- KV 缓存的传输开销。
- 两类实例数量的弹性配比。
- 与分布式 KV 缓存的协同。
参考资料
相关专题
- 推理并行与服务调度:分离式服务是调度层面的架构选择。
- PagedAttention与KV缓存管理:KV 缓存的组织方式决定了传输与复用的效率。
- 内存卸载:用 CPU 内存和磁盘扩展 KV 缓存容量。