Pipeline 优化
本文档介绍 CacheBlend 的流水线优化策略,通过将 KV Cache 加载与选择性重计算并行化,实现延迟隐藏,最大限度减少 TTFT(Time To First Token)。
3.5.1 流水线并行策略#
CacheBlend 的一个关键优化是将 KV 加载与选择性重计算流水线化:
gantt
title CacheBlend 流水线时序
dateFormat X
axisFormat %s
section Layer 1
加载 KV :a1, 0, 16
重计算 :a2, after a1, 3
section Layer 2
加载 KV :b1, after a1, 16
重计算 :b2, after b1, 3
section Layer 3
加载 KV :c1, after b1, 16
重计算 :c2, after c1, 3
3.5.2 两线程实现#
在第 $i$ 层的部分 Prefill 中,使用两个线程来流水线化:
- 线程 1:执行第 $i$ 层的计算(prefill_layer)
- 线程 2:加载第 $i+1$ 层的 KV Cache(fetch_kv)
在 prefill_layer 之前调用 synchronize 以确保 Prefill 所需的 KV Cache 已加载到 GPU。
3.5.3 延迟隐藏效果#
当加载延迟 >= 重计算延迟时:
- KV 重计算延迟被完全隐藏
- TTFT 不增加额外延迟
graph LR
subgraph "延迟隐藏"
A["无流水线
TTFT = T_load + T_recompute"]
B["有流水线
TTFT = max(T_load, T_recompute)"]
A -->|"流水线优化"| B
end
style B fill:#90EE90
3.5.4 系统完整流程#
将所有组件整合在一起:
sequenceDiagram
participant User as 用户
participant LC as Loading Controller
participant KS as KV Cache Manager
participant F as Fusor
participant LLM as LLM Engine
User->>LC: 1. 提交问题 + 相关文本块列表
LC->>KS: 2. 查询 KV Cache 存在性和位置
KS->>LC: 3. 返回信息
LC->>LC: 4. 计算理想重计算比例
LC->>F: 5. 发送比例
LC->>F: 6. 开始加载 KV Cache 到 GPU 队列
loop 每一层
F->>F: 7. 在队列中的 KV Cache 上重计算
end
F->>LLM: 8. 提供融合的 KV Cache
LLM->>User: 9. 基于 KV Cache 生成答案
上一步: KV Cache Store 与 Fusor
下一步: 第四部分 - 代码实现深度解析