多区域 LLM 服务与 KV 缓存局部性


文档摘要

多区域 LLM 服务与 KV 缓存局部性 本节摘要:对带缓存的 LLM 推理来说,轮询(round-robin)负载均衡是主动作恶。一个请求若没落到持有它前缀的节点,就要付全部 prefill 成本——长提示上 P50 约 800 ms,而缓存命中约 80 ms。2026 年的生产模式是缓存感知路由器(Rust 写的 vLLM Router、llm-d router),它消费 KV 缓存事件、按前缀哈希匹配来路由。近期研究(GORGO)把跨区域网络延迟显式纳入路由目标。商业「跨区域推理」产品(Bedrock 跨区域推理、GKE 多集群网关)把推理当不透明黑盒——它们管可用性,不管 TTFT。

多区域 LLM 服务与 KV 缓存局部性

本节摘要:对带缓存的 LLM 推理来说,轮询(round-robin)负载均衡是主动作恶。一个请求若没落到持有它前缀的节点,就要付全部 prefill 成本——长提示上 P50 约 800 ms,而缓存命中约 80 ms。2026 年的生产模式是缓存感知路由器(Rust 写的 vLLM Router、llm-d router),它消费 KV 缓存事件、按前缀哈希匹配来路由。近期研究(GORGO)把跨区域网络延迟显式纳入路由目标。商业「跨区域推理」产品(Bedrock 跨区域推理、GKE 多集群网关)把推理当不透明黑盒——它们管可用性,不管 TTFT。JPMorgan 与 Mayo Clinic 在 2024 年 11 月把 us-east-1 故障切换跑到了约 22 分钟。灾难恢复(DR)的真相是:32% 的 LLM DR 失败,是因为团队备份了权重却忘了分词器文件或量化配置。

对应原课程:Phase 17 · Lesson 11 · 11-multi-region-kv-locality(原英文 phases/17-infrastructure-and-production/11-multi-region-kv-locality/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 解释为什么轮询负载均衡会破坏带缓存的推理,并量化 TTFT 惩罚。
  2. 画出缓存感知路由器:输入(KV 缓存事件)、算法(前缀哈希匹配)、平局裁决(GPU 利用率)。
  3. 说出 LLM 那 32% DR 失败的驱动因素(缺分词器文件/量化配置),并给出三文件 DR 清单。
  4. 区分商业跨区域产品(Bedrock CRI、GKE 多集群网关)与 KV 感知路由。

一、问题与直觉

你的服务跑在 us-east-1、us-west-2、eu-west-1。前面放一个 ALB 做轮询。生产里前缀缓存命中率跌到 8%。TTFT P50 翻三倍。vLLM 日志显示每个请求都在付全部 prefill 成本。

轮询对无状态服务最优。LLM 推理天生有状态——KV 缓存编码了模型见过的所有东西。盲路由就是路由进错误的缓存。

与此同时,你的团队有 DR 计划。你把模型权重跨区域备份到 S3。一次区域故障来袭,你尝试切换,副本拒绝启动——你忘了 tokenizer.json、量化配置、RoPE 缩放配置在另一个你没同步的桶里。

多区域 LLM 服务是一个缓存问题、一个路由问题、一个 DR 卫生问题——不是负载均衡器问题。

二、核心概念

缓存感知路由

请求带着提示到来。路由器对前缀(比如头 512 token)做哈希,问每个副本「你缓存了这个前缀吗?」。副本在分配与驱逐 block 时,经 pub/sub 通道发布 KV 缓存事件。路由器挑有匹配的副本,无人匹配时回落到基于 GPU 利用率的平局裁决。

vLLM Router(Rust,2026 production-stack):订阅 kv.cache.block_added 事件,维护前缀哈希 → 副本索引,O(1) 查表路由,无匹配时回落到最少队列深度。

llm-d router:同模式,Kubernetes 原生,经 ControlPlane API 发布事件。

SGLang RadixAttention(第 06 节)是副本内的等价物。跨副本路由严格在其上游。

数字

TTFT P50,2K token 提示,Llama 3.3 70B FP8,H100:

  • 缓存命中(同副本,前缀常驻):约 80 ms。
  • 缓存未命中(冷 prefill):约 800 ms。

10 倍差距。如果你的路由器跨副本命中 60~80% 前缀缓存,你就在 N 副本容量上逼近单副本性能。命中 10%,你就逼近朴素扩展。

跨区域有新约束 —— 网络延迟

区域间 RTT:

  • us-east-1 ↔ us-west-2:约 65 ms。
  • us-east-1 ↔ eu-west-1:约 75 ms。
  • us-east-1 ↔ ap-southeast-1:约 220 ms。

若路由把一个 us-east-1 的请求送到 ap-southeast-1 的热前缀,省下的 prefill(800 → 80 ms)被 440 ms 往返盖过。GORGO(2026 研究)把这做显式——联合最小化 prefill_time + network_latency,而非单独 prefill。答案常常是保持路由区域化,除非前缀是多 MB 级、prefill 主导。

商业「跨区域推理」在此帮不上忙

AWS Bedrock 跨区域推理在容量压力时自动把请求路由到其他区域。它优化的是可用性而非 TTFT,把推理当不透明。GKE 多集群网关同理——服务级故障切换,无 KV 缓存感知。

即使用了它们,你仍需应用层缓存感知路由器。它们管「us-east-1 着火了」这种情况;缓存感知路由管 TTFT。

DR 卫生 —— 32% 缺文件问题

广为引用的 2026 统计:32% 的 LLM DR 失败,是因为团队备份了权重却忘了:

  • tokenizer.jsontokenizer.model
  • 量化配置(quantize_config.json、AWQ scale、GPTQ zero-point)
  • 模型专属配置(RoPE 缩放、注意力掩码、聊天模板)
  • 引擎配置(vllm_config.yaml、采样默认、LoRA 适配器清单)

修复是最小三文件 DR 清单:

  1. HF 模型仓库下的所有文件(权重 + 配置 + 分词器)。
  2. 引擎专属服务配置。
  3. 部署清单(K8s YAML、Dockerfile、依赖锁)。

外加:每季度跑一次 DR 演习。JPMorgan 的 us-east-1 演习在 2024 年 11 月做到 22 分钟恢复,正是因为剧本排练过。

数据驻留是正交的

欧盟客户 PHI 不能出欧盟。如果你的缓存感知路由器为前缀匹配把一个巴黎起源的请求送到 us-east-1,无论 TTFT 收益多大,你都违反了 GDPR。先按驻留边界切分路由器,再优化缓存

你该记住的数字

  • 缓存命中 vs 未命中 TTFT 差距:约 10 倍(2K 提示上 80 ms vs 800 ms)。
  • 区域间 RTT 美欧:约 75 ms。
  • DR 失败:32% 漏分词器/量化配置。
  • JPMorgan us-east-1 故障切换 2024 年 11 月:22 分钟(30 分钟 SLA)。

三、从零实现:前缀缓存感知路由器模拟

原课程 code/main.py 在多区域工作负载上模拟三种路由策略(轮询、缓存感知区域化、缓存感知全球化),报告命中率、TTFT P50/P99、跨区域账单。下面给最小可读的路由决策骨架。

def route(prefix_hash, replicas, rtt_to_replica_ms, prefill_full_ms=800, prefill_hit_ms=80): """缓存感知 + 网络延迟联合路由决策。 replicas: {replica_id: {'has_prefix': bool, 'queue_depth': int}} rtt_to_replica_ms: {replica_id: 往返毫秒} 返回: (选中的 replica_id, 估算 TTFT) """ best, best_cost = None, float("inf") for rid, info in replicas.items(): prefill = prefill_hit_ms if info["has_prefix"] else prefill_full_ms # GORGO 思路:联合 prefill + 网络 cost = prefill + rtt_to_replica_ms[rid] + info["queue_depth"] if cost < best_cost: best, best_cost = rid, cost return best, best_cost # 案例:本地副本(前缀命中,RTT 5ms)vs 远区域(前缀命中,RTT 220ms) replicas = {"local": {"has_prefix": True, "queue_depth": 0}, "apac": {"has_prefix": True, "queue_depth": 0}} rtt = {"local": 5, "apac": 220} print("短前缀命中场景:", route("h1", replicas, rtt)) # 远区域前缀更长、本地未命中的场景:prefill 主导时跨区域才划算 replicas2 = {"local": {"has_prefix": False, "queue_depth": 0}, "apac": {"has_prefix": True, "queue_depth": 0}} print("本地未命中、远区域命中:", route("h2", replicas2, rtt))

💡 路由不是「找缓存就送过去」,而是「prefill 节省 vs 网络延迟」的联合优化。把 GORGO 的 prefill + RTT 写进决策函数,你才不会为了省 700 ms prefill 而付 440 ms 网络。

四、框架对比:路由策略横向对照

策略 决策依据 命中率 TTFT 适合
轮询(ALB) ~8% P50 ×3 已废,对有状态推理有害
Bedrock CRI / GKE 网关 容量/可用性 不感知 不优化 区域故障切换
缓存感知区域化 前缀哈希 + 区域内 RTT 60~80% 逼近单副本 生产默认
缓存感知全球化(GORGO) 前缀哈希 + prefill + 网络 长 MB 前缀时更优 多 MB 共享前缀

心法:区域故障切换交给 Bedrock CRI/GKE;TTFT 交给应用层缓存感知路由器;两者职责不重叠,缺一不可。

五、可复用产物

本节产出 outputs/skill-multi-region-router.md(原课程目录)。给定区域、驻留约束、SLA,它设计路由计划:

  1. 路由器拓扑:按驻留边界切分,各区域内缓存感知路由。
  2. GORGO 联合目标:prefill + 网络 + 队列深度的决策函数。
  3. DR 清单:三文件最小集 + 季度演习节奏。
  4. 故障切换策略:Bedrock CRI/GKE 管可用性,应用层路由管 TTFT。

六、练习

  1. 跑通模拟器:运行 code/main.py。在 75 ms RTT 下,多长提示时跨区域路由胜过纯本地?

  2. 诊断命中率下滑:你的命中率从 70% 跌到 12%。诊断三个可能原因,以及各自能确认的可观测信号。

  3. DR 清单:为一个 70B AWQ 量化、vLLM 服务、带 5 个 LoRA 适配器的模型设计 DR 清单,列出每个文件与配置。

  4. Bedrock CRI 够吗:论证 Bedrock 跨区域推理对一个 TTFT SLO 严格的金融科技是否「够用」。引用具体行为。

  5. 驻留策略:一个巴黎起源的请求在 us-east-1 匹配到前缀。你路由吗?写出策略。

本节要点回顾

  1. 轮询对带缓存推理有害:盲路由让请求付全部 prefill,命中率跌到 8%。
  2. 缓存感知路由器:vLLM Router(Rust)/ llm-d router,订阅 KV 事件,前缀哈希 O(1) 路由。
  3. 命中 vs 未命中 TTFT 差 10 倍:2K 提示上 80 ms vs 800 ms。
  4. 跨区域要联合优化 prefill + 网络:GORGO 把 RTT 显式纳入;短前缀保持区域化。
  5. 商业跨区域产品管可用性不管 TTFT:Bedrock CRI/GKE 把推理当不透明,仍需应用层路由。
  6. 32% DR 失败是缺文件:权重之外还有分词器、量化配置、引擎配置、部署清单。
  7. 数据驻留先于缓存优化:GDPR 边界先切分路由器,再谈命中率。
  8. DR 要季度演习:JPMorgan 22 分钟恢复靠的是排练过的剧本。

下一节,我们从云端转向设备端——看 Apple 神经引擎、Qualcomm Hexagon、WebGPU/WebLLM、NVIDIA Jetson 如何把推理塞进手机、浏览器与机器人。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U