Loading Controller
本文档详细介绍 CacheBlend 中的 Loading Controller 组件,它负责决定最优的重计算比例和存储设备选择,是实现延迟隐藏的关键。
3.2.1 核心洞察#
基本洞察 :如果选择性 KV 重计算的延迟比将 KV 加载到 GPU 内存的时间更快,那么正确地流水线化选择性 KV 重计算和 KV 加载可以使 KV 重计算的额外延迟可忽略不计。
3.2.2 重计算比例估算#
Loading Controller 使用两个延迟估算器来找到理想的重计算比例:
重计算延迟估算器 :
$$T_{recompute}(r%, LLM, L) = r% \times Prefill(LLM, L)$$
其中 $Prefill(LLM, L)$ 是离线预测量的。
加载延迟估算器 :
$$T_{load}(LLM, L, storage_device) = \frac{PerTokenKVSize(LLM) \times L}{Throughput(storage_device)}$$
理想重计算比例计算 :
选择 $r%$ 使得 $T_{recompute}(r%, LLM, L) = T_{load}(LLM, L, storage_device)$
取 $\max(r%, r^%)$,其中 $r^ %$ 是经验上质量损失可忽略的最小重计算比例(实践中约 15%)
graph LR
subgraph "重计算比例选择"
A["存储设备速度"] --> B["计算 T_load"]
C["模型参数"] --> D["计算 T_recompute"]
B --> E{"T_recompute ≈ T_load?"}
D --> E
E -->|"是"| F["使用该比例"]
E -->|"否"| G["调整比例"]
G --> E
F --> H["确保 r% ≥ 15%"]
end
3.2.3 存储设备选择#
对于固定的重计算比例(如 15%),Loading Controller 还可以帮助选择最佳存储设备:
问题 :如果只做固定选择性重计算比例(如 15%)的 KV 重计算,如何选择合适的存储设备来存储 KV,使其不会增加额外延迟?
解决方案 :
使用存储成本估算器估算每个设备存储 KV 的成本
估算所有设备的重计算和加载延迟
找出 $T_{recompute} \geq T_{load}$ 的最便宜存储设备
graph TB
subgraph "存储设备选择"
A["GPU HBM 最快/最贵"] --> D{r=15% 时}
B["CPU RAM 快/中等"] --> D
C["SSD 慢/便宜"] --> D
E["HDD 最慢/最便宜"] --> D
D -->|"选择最便宜且 T_load ≤ T_recompute"| F["最优存储"]
end
3.2.4 实际示例#
Llama-7B, 4K 上下文 :
重计算 15% token:3 ms/层
从 NVME SSD 加载一层 KV Cache:16 ms
结论 :KV 加载可以完全隐藏 KV 重计算延迟,无额外 TTFT
Llama-70B, 4K 上下文 :
重计算 15% token:7 ms/层
从 NVME SSD 加载一层 KV Cache:4 ms
结论 :KV 加载不能完全隐藏重计算延迟,需要智能控制器调整
上一步 : 整体架构
下一步 : KV Cache Store 与 Fusor