多副本推理如何在 Prefix Cache 命中与负载均衡间取舍?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
这题的核心是路由目标冲突:把相同长前缀送到已有 KV/Prefix Cache 的副本能省 Prefill,但该副本若排队严重,命中反而拖慢请求。说明一个“预计缓存节省减去队列代价”的打分思路,再补热点上限和回退策略。不要只追求命中率,最终要服从 TTFT 与租户公平。
可以这样答:
Cache-aware Routing 会优先把相同长前缀的请求送到已经缓存该前缀的副本,从而跳过一部分 Prefill;但如果这个副本队列很长,等待时间可能超过缓存收益。路由器因此要同时估计可复用 Token 带来的计算节省和各副本的 Token 队列负载,并设置热点上限。缓存命中率只是中间指标,最终目标仍是降低 TTFT 且避免负载倾斜。
核心回答
普通最短队列路由可能把共享长前缀的请求送到没有缓存的副本,重复 Prefill;纯缓存亲和又可能把热点前缀全部压到一个副本。Cache-aware Routing 要比较两类代价:命中能省下的 Prefix 计算,以及目标副本当前排队、Decode 负载、KV 容量和网络成本。
全局调度器可维护“前缀块在哪些副本上”的近似目录:命中收益大于负载差时选择已有最长前缀的副本,否则回到负载均衡。没有共享前缀、输出很长或目录陈旧时,策略应平稳退化为普通路由。
展开说明
Preble 用全局 Radix 信息估计 Cached Tokens 与 Missed Tokens,并结合每个 GPU 的负载作 Explore/Exploit 决策。生产实现还应限制单一亲和键的最大份额,并在热点持续时复制前缀或允许多个副本共同承载。
- 目录一致性:缓存淘汰频繁,目录只能是带版本/租约的近似信息,不能假设强一致。
- 负载估计:请求数不够,应包含剩余输出长度、活跃 KV、Scheduled Tokens 和队列等待。
- 会话路由:多轮会话天然适合亲和,但副本故障时必须允许重算或迁移。
- 隐私:目录和路由键应按租户命名空间隔离,避免暴露敏感 Prefix 指纹。
版本边界:Preble 针对长且可共享的 Prompt 评估,其收益会随前缀共享、输出长度和集群拓扑变化;论文策略不是所有 vLLM/SGLang 版本的内置默认行为。
工程实践
离线回放真实共享前缀 Trace,比较 Round Robin、最短队列、会话粘性与 Cache-aware 策略。观测逐副本队列、缓存 Token 命中、重算 Token、负载方差、TTFT/TPOT 和路由错误;故障注入目录延迟、缓存提前淘汰和热点副本退出,验证回退不会放大雪崩。
常见追问
- 什么时候应放弃缓存亲和选择空闲副本? 当预计排队代价大于重算前缀的代价,或命中块很短、输出很长、目标副本 KV 紧张时,应优先负载。
- 全局缓存目录为什么不必强一致? 强一致更新会让每次块分配/淘汰进入关键路径;允许陈旧并在本地二次确认,最坏只是少一次命中,通常更可扩展。
- 热点 Prefix 如何避免单副本过载? 可在多个副本预热/复制该前缀、对亲和流量设上限,并按负载把新请求扩散;复制成本也要计入决策。
一句话复习
Cache-aware Routing 比较“复用前缀省下的计算”和“副本排队/容量代价”,并在无收益或信息陈旧时退化为普通负载均衡。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。