Title here
Summary here
本文档介绍 CacheBlend 的两个核心组件:KV Cache Store(负责 KV 缓存的存储和检索)和 Fusor(负责缓存融合和选择性重计算)。
KV Cache Store 将 LLM 输入分割成多个文本块,每个块可以是复用的或新的:
一旦输入被分割成文本块,每个块被哈希以找到其对应的 KV Cache:
当存储设备满时,使用 LRU(Least Recently Used)策略驱逐 KV Cache:
CacheBlend 支持在单一存储设备层级中存储 KV Cache:
哈希表保存在 CPU 中,因为其大小相对较小(一百万块约 16MB)。
Fusor(缓存融合器)通过选择性重计算合并预计算的 KV Cache:
从算法 4.3 回顾,哪些 token 需要在一层重计算取决于前一层的重计算结果。因此:
CacheBlend 通过三个接口执行逐层部分 Prefill:
# 接口 1: 获取 KV Cache
fetch_kv(text, layer_id) -> KVCache
# 给定文本和层 ID,从 KV Store 获取对应的 KV Cache
# 如果 KV Cache 不在系统中,返回 -1
# 接口 2: 部分 Prefill
prefill_layer(input_dict, KVCache) -> output_dict
# 接收输入和当前层的 KV Cache,执行该层的部分 Prefill
# 输出用作下一层的输入
# 接口 3: 同步
synchronize()
# 在每层 Prefill 前需要同步,确保该层的 KV Cache 已加载到 GPU上一步: Loading Controller
下一步: Pipeline 优化