想象一下:你所在的城市每天要接上万通急救电话。调度中心接线员必须在几秒内判断病情轻重、查询各家医院的空床数、避开临时停诊的医院,还要决定救护车该往哪开。一套训练有素的调度体系,决定了整座城市能不能在“黄金六分钟”里救下更多人。推理网格架构,就是 AI 服务世界的“急救调度中心”:大模型推理请求像一辆辆救护车,散布在不同机房、不同云厂商的 GPU 节点像一座座医院,而路由策略、负载均衡、亲和调度与故障转移,共同构成了这套智能调度系统。这篇文章,就用调度中心的一天,带你完整看懂推理网格。

岗位关联

掌握推理网格的调度设计,是 AI 云服务工程师从“会调 API”走向“能设计高可用推理平台”的分水岭,也是大模型落地时控制成本与保障 SLA 的核心能力。

目录
  1. 可视化演示
  2. 1. 路由策略设计
  3. 2. 负载均衡算法
  4. 3. 模型亲和调度
  5. 4. 故障转移机制
  6. 5. 性能基准测试
  7. 6. 调优实践方法
  8. 7. 多云兼容迁移
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

经网关路由、调度器负载均衡到推理节点,演示推理网格如何实现跨模型智能流量调度与故障转移。

本节配有交互动效(进入视口后自动加载,约 3KB)。

请求路由 网关 调度 节点 REQ→SCHD→NODE 按模型路由请求

1. 路由策略设计

调度中心接线员接起电话,第一句话永远是:“病人什么症状?在哪个区?有没有指定医院?”这三个问题的答案,决定了救护车该往哪开。推理网格里的“接线员”就是路由组件(Router),它问的不是病人,而是请求:你调用哪个模型?来自哪个租户?对延迟有多敏感?这些问题被翻译成一条条路由规则。

技术上,每个推理请求都带着一组元数据,就像救护单上盖的章:model=llm、tenant=bank、priority=high。标签路由匹配就是按这些“章”把请求分发给挂了对应标签的节点组;内容感知路由更进一步,会解析请求载荷,判断它真正需要的是对话模型还是向量模型;优先级路由则为核心交易链路开绿灯,让高 SLA 请求插队到更优质的节点上。

这些规则要打分、排序、合并,才能从几十个候选节点里挑出最合适的一个。打分函数如下:

灰度发布是路由策略最实用的场景之一:新模型上线时,给它配一条 weight=5% 的规则,让一小撮流量先去“试运行”,监控无误后再逐步调高比例,出问题一键切回旧版本。就像调度中心先派一辆救护车去新合作的医院探路,确认能接诊再大规模转送。规则集中管理、动态下发,改一条规则,就能改变整座城市的救援方向。

S(n)=∑k=1Kwk×fk(r,n)S(n) = \displaystyle \sum_{k=1}^{K} w_k \times f_k(r, n)
综合得分越高,节点越有可能接到这个请求。K 条规则共同投票,权重代表每条规则的说话分量。
  1. 评分函数对每个候选推理节点 n,计算它响应请求 r 的综合得分 S(n),得分最高者胜出。
    S(n)S(n)
  2. 加权求和将 K 条路由规则的得分叠加求和,规则越多,决策越精细。
    ∑k=1K\sum_{k=1}^{K}
  3. 规则权重w_k 表示第 k 条规则的权重,SLA 高、业务关键的规则权重更大。
    wkw_k
  4. 规则匹配函数f_k(r, n) 返回 0 或 1,表示请求 r 是否命中节点 n 的标签或内容条件。
    fk(r,n)∈{0,1}f_k(r, n) \in \{0, 1\}

2. 负载均衡算法

病分好了,车也派对了方向,但调度员还必须回答另一个问题:哪家医院此刻空床最多?医院的空床率每分钟都在变,一个 ICU 病人刚转进来,床位就少一张。推理节点的“空床率”就是在途请求数。负载均衡算法,就是调度中心墙上那块实时更新的空床表。

最简单的轮询算法像排班表——四个节点轮流接,公平且零开销,适合节点配置完全相同的场景。但生产环境的节点往往异构,于是有了最小连接数:永远选当前在途请求最少的节点,对应空床最多的医院;加权随机则给大医院更高概率,让能力强的节点多干活。更高级的自适应均衡会实时统计每个节点的延迟和错误率,动态调整权重——谁慢了就自动“降权”,谁快了就“加担子”。

在一个成熟网格里,路由和负载均衡是流水线关系:路由规则先筛出候选集,负载均衡再在候选集内精挑细选。加权最小连接数是两者的桥梁:

空床率是动态的——救护车还没到医院,ICU 就可能腾出床位。所以调度必须看实时水位,而不是静态排班表。这也解释了为什么“均匀分发”不是好策略:把 10 辆车平均派给 4 家能力悬殊的医院,只会让小医院爆满、大医院闲置。

pn=wn∑i=1Nwi,wn=CapnCn+1p_n = \displaystyle \frac{w_n}{\sum_{i=1}^{N} w_i}, \qquad w_n = \frac{\text{Cap}_n}{C_n + 1}
节点被选中的概率正比于它的动态权重:容量越大、在途请求越少,权重越高。
  1. 动态权重w_n 由节点容量 Cap_n 和当前在途请求数 C_n 共同决定,请求越多权重越低。
    wn=CapnCn+1w_n = \frac{\text{Cap}_n}{C_n + 1}
  2. 防除零设计分母 C_n + 1 保证节点零在途时公式依然有效,不会出现除以零。
    Cn+1C_n + 1
  3. 归一化概率p_n 是请求派往节点 n 的概率,等于该节点权重占全部节点权重之和的比例,所有概率加起来正好是 1。
    pn=wn∑i=1Nwip_n = \frac{w_n}{\sum_{i=1}^{N} w_i}

3. 模型亲和调度

老调度员心里都有一张“王牌科室分布图”:心梗要送三院,因为那里导管室 24 小时待命;卒中要送二院,因为 CT 机就在急诊楼旁边。送对了,一步到位;送错了,转院路上黄金时间就没了。GPU 推理也有同样的“设备就位”问题——大模型加载到显存需要几十秒甚至几分钟,如果请求落到一个“模型还没热”的节点,光等加载就能让用户等到崩溃。

模型亲和调度的核心,就是把请求尽量派给“模型已经驻留显存”的节点。GPU 显存亲和是指目标模型已加载在该节点的显存中,请求到达即可推理;数据本地性是指输入数据(比如用户画像、检索出的文档片段)已经缓存在本区域,避免跨机房拉取;模型缓存复用则是多个租户共享同一个已加载的模型副本,让一次加载服务更多请求。更高阶的做法是搭建推理共享池,把多张 GPU 聚合成一个可弹性切分的池子,按需给不同模型分配显存,减少碎片化部署。

这三类因素需要综合打分:

好的调度员脑子里有一张动态更新的“王牌科室地图”,模型亲和调度就是网格的这张地图。它不追求所有模型出现在所有节点,而是让高频模型待在少数几个“王牌节点”上,再把匹配的请求精准送达——对医院和病人都是最优解。

A(n)=α×Memn+β×Locn+γ×HitnA(n) = \alpha \times \text{Mem}_n + \beta \times \text{Loc}_n + \gamma \times \text{Hit}_n
亲和分 A(n) 越高,表示请求与节点 n 越“投缘”,模型、数据、缓存都已就位。
  1. 亲和综合分A(n) 是节点 n 与当前请求的亲和程度,分数越高越优先。
    A(n)=α×Memn+β×Locn+γ×HitnA(n) = \alpha \times \text{Mem}_n + \beta \times \text{Loc}_n + \gamma \times \text{Hit}_n
  2. 显存因子Mem_n 表示目标模型是否已驻留节点显存,已加载为 1,未加载为 0。
    Memn∈{0,1}\text{Mem}_n \in \{0, 1\}
  3. 本地与缓存因子Loc_n 表示输入数据是否在本地,Hit_n 表示模型缓存是否命中,二者同样是 0/1 开关。
    Locn, Hitn∈{0,1}\text{Loc}_n, \ \text{Hit}_n \in \{0, 1\}
  4. 权重归一约束α、β、γ 之和为 1,代表三类因素的相对重要性,通常显存因子权重最高。
    α+β+γ=1\alpha + \beta + \gamma = 1

4. 故障转移机制

再好的医院也会遇到突发停诊,再稳的 GPU 节点也会宕机。调度中心最深的觉悟是:故障不是意外,而是常态。面向失败设计,是网格架构的第一课。城市急救系统的成熟度,恰恰体现在医院停诊时那几分钟的从容切换上。

故障转移机制有四个层次。最底层是健康检查探针,像调度员每 30 秒给医院打一次电话确认“还开着吗”,连续几次打不通就把该节点从候选名单移除。第二层是自动重试,请求超时或连接失败时换一个节点重发,但必须配合指数退避——第一次等 100ms、第二次 200ms,不然会变成重试风暴。第三层是熔断器,当节点错误率超过阈值,直接打开开关快速失败,不再把流量送向注定失败的深渊。最后是跨区域容灾切换:整个集群都挂了,就把流量转移到另一个区域的数据中心。

熔断器的核心判定逻辑非常直观:

就像调度中心绝不会盯着打不通的电话反复重拨——那是浪费生命。熔断器让系统在故障面前“短暂失忆”,给故障节点喘息恢复的时间;等探针确认它重新营业,才把流量慢慢放回来。

State(n)={CLOSEDEn<θOPENEn≥θ\text{State}(n) = \begin{cases} \text{CLOSED} & E_n < \theta \\ \text{OPEN} & E_n \geq \theta \end{cases}
错误率低于阈值时熔断器闭合(放行),高于阈值时打开(拒绝),像保险丝一样在故障扩散前切断电路。
  1. 错误率统计E_n 是最近滑动窗口内节点 n 的失败请求占比,窗口通常取 10~60 秒。
    En=FailnTotalnE_n = \frac{\text{Fail}_n}{\text{Total}_n}
  2. 阈值判定θ 是预设容错阈值,比如 20%。错误率未达阈值,系统认为节点健康。
    En<θE_n < \theta
  3. 状态切换一旦错误率超过阈值,熔断器从 CLOSED 翻转为 OPEN,新请求直接快速失败并走备用路径。
    State(n)={CLOSEDEn<θOPENEn≥θ\text{State}(n) = \begin{cases} \text{CLOSED} & E_n < \theta \\ \text{OPEN} & E_n \geq \theta \end{cases}

5. 性能基准测试

每年,市政府都要给急救调度中心做年度考核:平均出车时间达标了没有?但市民真正关心的,是那个最倒霉的夜晚——救护车 40 分钟才到。平均出车时间好看,掩盖不了 5% 的极端等待。推理网格的性能考核,同样不能只看平均值。

基准测试要盯四类指标:延迟分位数(P50/P95/P99),分别代表典型体验、较差体验和最差体验;吞吐量(QPS),即系统每秒能处理多少推理请求;长尾时延,用 P99 减去 P50 的差值衡量尾部分布有多“胖”;成本效率,即每张 GPU 卡每秒能撑起多少请求,这是老板最关心的 ROI。测试方法也有讲究:固定请求率压测找稳定性,阶梯加压找吞吐拐点,混合模型负载模拟真实流量。

其中 P99 的定义精确又优雅:

打车时你平均等 5 分钟,但深夜可能等了半小时——这个“半小时”才是用户真实记住的体验。推理网格的优化同理:平均延迟是给汇报用的,P99 才是给用户承诺的。

P99=inf⁡{t:F(t)≥0.99}P_{99} = \inf \left\{ t : F(t) \geq 0.99 \right\}
P99 是“最慢那 1% 请求的起跑线”——99% 的请求都比它快,只有最倒霉的 1% 比它慢。
  1. 延迟分布F(t) 是延迟的累积分布函数,表示延迟小于等于 t 的请求占全部请求的比例。
    F(t)=P(Latency≤t)F(t) = P(\text{Latency} \leq t)
  2. 下确界inf 表示“满足条件的最小值”,即从所有 t 里挑出那个临界点。
    inf⁡{t}\inf \{ t \}
  3. 99% 的含义当 F(t) 首次达到 0.99 时,这个 t 就是 P99,代表 99% 的请求延迟上限。
    P99=inf⁡{t:F(t)≥0.99}P_{99} = \inf \{ t : F(t) \geq 0.99 \}

6. 调优实践方法

急救调度中心要应对早晚高峰:白天的写字楼片区配 20 辆救护车,深夜只需 5 辆;周末的体育场办演唱会,还得临时从邻区借调。推理流量同样是波动的——白天上班族的问答请求暴涨,深夜跌到谷底。固定的资源池要么高峰期不够用,要么低谷期浪费钱。

调优实践的第一板斧是弹性扩缩容:按 QPS 或 GPU 利用率自动增减节点,但要设置冷却时间防止流量毛刺引起抖动。第二板斧是预热缓冲池:把常用模型常驻显存,冷门模型提前预加载,用户请求永远不撞上“冷启动”的几十秒。第三板斧是动态批处理:把短时间内的并发请求攒成一个 batch 一次性过 GPU,摊薄显存搬运开销,用可控的排队延迟换更高的吞吐。最后还有缓存分层:结果缓存、KV Cache、前缀缓存各司其职,让相似请求直接命中走捷径。

动态批处理的收益可以用一个简洁的公式刻画:

让救护车引擎不熄火地等在街角、让顺路的病人拼一辆车、让常见病直接用标准方案秒回——调优的本质,是用可控的等待换取吞吐,像调度员拿捏“压多少单才不误事”的分寸。每一次调参,都是在延迟、吞吐和成本三者之间重新找平衡点。

Teff=B×tonetbatch(B)T_{\text{eff}} = \displaystyle \frac{B \times t_{\text{one}}}{t_{\text{batch}}(B)}
T_eff 表示批处理后吞吐提升的倍数:B 个请求串行处理要 B 倍时间,批量合并后只需要更短的总时间。
  1. 单请求耗时t_one 是一个请求独占 GPU 时的平均处理时间,是基线成本。
    tonet_{\text{one}}
  2. 批处理耗时t_batch(B) 是把 B 个请求合成一个 batch 后 GPU 处理完的总时间,通常远小于 B 倍 t_one。
    tbatch(B)t_{\text{batch}}(B)
  3. 有效吞吐倍数T_eff 表示批量处理后单位时间完成的请求数相对串行处理的提升倍数,B 越大、batch 越高效,T_eff 越高。
    Teff=B×tonetbatch(B)T_{\text{eff}} = \frac{B \times t_{\text{one}}}{t_{\text{batch}}(B)}

7. 多云兼容迁移

城市之间会签医疗互助协议:邻市急救车满了,可以把病人转过来。但真到执行那天才发现,人家的急救电话频率不一样、医院编码规则不同、电子病历系统互不兼容。推理网格的多云部署,面临着完全相同的“跨系统对接”难题。

厂商差异是第一个坑:各云厂商的 LoadBalancer、Ingress、GPU 实例规格、Kubernetes 版本语义都不完全一致,连“健康检查”的配置写法都各有脾气。第二个坑是模型资产的兼容性:推理引擎版本、模型权重格式、镜像打包方式都可能不通用。破局要靠标准化 API——用统一的网关抽象层屏蔽底层差异,让上层调度逻辑只认一套接口。迁移前必须做系统评估:把所有功能用例按重要性加权打分,跑一轮完整回归。最后用灰度迁移分步放量:

调度协议统一了,急救车才能跨城开进邻市医院,而不被门口保安拦下。多云迁移不是“搬家”,是让两套系统说同一种语言——先把协议定了、用例跑通了、灰度放量了,才谈得上真正的多云自由。

R=∑s=1Srs×Passs∑s=1Srs≥0.95R = \displaystyle \frac{\sum_{s=1}^{S} r_s \times \text{Pass}_s}{\sum_{s=1}^{S} r_s} \geq 0.95
R 是迁移兼容性加权通过率,只有达到 95% 以上,才允许把真实流量切到新云厂商。
  1. 用例权重r_s 表示第 s 个验证用例的重要程度,通常按线上 QPS 占比或业务风险赋值。
    rsr_s
  2. 通过标记Pass_s 取 1 表示该用例兼容通过,0 表示失败,是二进制开关。
    Passs∈{0,1}\text{Pass}_s \in \{0, 1\}
  3. 加权通过率R 是所有用例加权后的通过比例,分子是“通过的加权和”,分母是“总加权和”。
    R=∑s=1Srs×Passs∑s=1SrsR = \frac{\sum_{s=1}^{S} r_s \times \text{Pass}_s}{\sum_{s=1}^{S} r_s}
  4. 上线门槛只有 R 不低于 0.95,迁移才被批准,随后先切 5%~10% 流量观察 P99 与错误率。
    R≥0.95R \geq 0.95

AI 应用场景

跨国多区域大模型推理平台

阶段:推理服务部署与调度

解决的问题:用户遍布全球,单区域部署延迟高、可用性差。传统方案用固定 DNS 分流,无法感知节点实时负载,高峰期部分区域排队而其他区域闲置。

具体案例:一家出海 AI 翻译公司,在美、欧、亚三地各部署一套推理集群,引入推理网格后,请求按内容语言自动路由到对应区域的最优节点,同时在全球节点间做加权最小连接调度。翻译服务的 P99 从 2.3 秒降至 800 毫秒,GPU 利用率提升了 35%。

大模型新版本灰度发布

阶段:模型上线与变更管理

解决的问题:新微调模型直接全量替换风险极高,一旦推理质量回退,影响面不可控。

具体案例:某电商客服助手上线新版模型,路由规则把 5% 流量导向新版本、95% 留在旧版本,监控一轮错误率、P99 延迟和用户满意度后,逐步放量到 50%、100%;若指标异常,规则一键切回,整个过程无需重启服务。

金融风控跨云容灾

阶段:高可用与容灾运维

解决的问题:单云厂商故障会导致风控审核中断,直接影响交易放行和资损控制。

具体案例:某支付平台的风控推理主集群部署在云 A,备用集群在云 B,健康检查每 10 秒探活一次。云 A 某可用区发生故障后,熔断器在 30 秒内切断故障节点流量,请求自动改道云 B,整个容灾切换过程用户无感知,交易审核零中断。

Python 演示

python66 行
import randomimport statistics  class InferenceNode:    def __init__(self, name, model, capacity):        self.name = name        self.model = model        self.capacity = capacity        self.inflight = 0        self.failed = False        self.served = 0     def can_serve(self, model):        return (self.model == model and not self.failed                and self.inflight < self.capacity)  class InferenceMesh:    def __init__(self, nodes):        self.nodes = nodes        self.dropped = 0     def route(self, model):        alive = [n for n in self.nodes if n.can_serve(model)]        if not alive:            self.dropped += 1            return None        best = min(alive, key=lambda n: n.inflight / n.capacity)        best.inflight += 1        best.served += 1        return best     def simulate(self, requests, fail_prob=0.02):        latencies = []        for i, model in enumerate(requests):            if i % 50 == 0 and i > 0:                victim = random.choice(self.nodes)                victim.failed = True            node = self.route(model)            if node is None:                continue            load_factor = node.inflight / node.capacity            latency = 0.08 + 0.04 * load_factor + random.uniform(0, 0.01)            latencies.append(latency)            node.inflight -= 1        p99 = sorted(latencies)[int(len(latencies) * 0.99) - 1]        return {            "throughput_qps": len(latencies) / 30.0,            "p50": statistics.median(latencies),            "p99": p99,            "dropped": self.dropped,        }  if __name__ == "__main__":    mesh = InferenceMesh([        InferenceNode("host-a", "llm", 8),        InferenceNode("host-b", "llm", 6),        InferenceNode("host-c", "vision", 6),        InferenceNode("host-d", "llm", 10),    ])    requests = ["llm"] * 600 + ["vision"] * 150    random.shuffle(requests)    result = mesh.simulate(requests)    print(result)
目的:模拟一个简化版推理网格——四个异构节点、两类模型、最小连接数调度、随机故障注入,最后输出吞吐与 P50/P99 延迟。
  1. alive = [n for n in self.nodes if n.can_serve(model)]先用路由条件过滤候选节点:模型匹配、未故障、未满载。
  2. best = min(alive, key=lambda n: n.inflight / n.capacity)最小连接数算法的核心:选在途负载率最低的节点。
  3. if i % 50 == 0 and i > 0:每 50 个请求随机让一个节点故障,模拟生产环境的“故障是常态”。
  4. latency = 0.08 + 0.04 * load_factor延迟随节点负载线性上升,体现排队效应。
  5. p99 = sorted(latencies)[int(len(latencies) * 0.99) - 1]排序后取第 99 百分位,与正文 P99 定义一致。

常见误区

误区“轮询是最公平的,把请求平均分到每个节点就不会有短板,何必要搞最小连接数、自适应权重这些花活?”

正解均匀分发在节点异构时反而制造短板:慢节点堆积、快节点闲置。真正的负载均衡以“资源水位”为目标——在途请求数、GPU 利用率、队列深度,而不是数量上的平均。就像调度中心不会因为“每家医院都派 10 辆”就公平,而是按实时空床率动态派车。

为何常见:“均匀”符合日常直觉,且节点同质时轮询确实够用,容易被小规模经验带偏。

误区“请求失败了就重发,多试几次总能成功,重试不需要什么策略。”

正解无退避的并发重试会形成重试风暴:故障节点刚恢复,成千上万的重试请求同时涌入,瞬间又被打垮,还连带拖垮下游。正确做法是熔断 + 指数退避 + 抖动,把重试比例压到最低。急救调度绝不会盯着打不通的电话反复拨号——先打给别家,回头再确认。

为何常见:重试在单机时代成本低,且“再试一次”的直觉根深蒂固,容易忽略分布式下的放大效应。

误区“把大模型复制到每一张 GPU 上,请求到了哪个节点都能命中,亲和问题不就解决了?”

正解全量复制会导致显存爆炸和成本翻倍。一个 70B 模型要占上百 GB 显存,每个节点都装一遍,资源浪费惊人。正确做法是按流量画像把高频模型部署到部分节点,配合共享池与缓存,让需要它的请求“大部分时间”落在这些节点上,像城市不可能每家医院都建脑科中心,而是把卒中患者定向送往少数几家。

为何常见:“越多越稳”的直觉掩盖了显存成本,且小规模集群看不出差别。

误区“压测报告显示平均延迟从 200ms 降到 150ms,服务体验肯定变好了,可以放心上线。”

正解平均延迟会被大量快请求拉低,掩盖 P99 恶化。可能 99% 的请求只要 100ms,但 1% 的请求要 5 秒,平均值依然好看。大模型场景的长尾直接表现为用户“转圈卡死”。必须以 P95/P99 分位数和长尾差值为准,像考核急救系统不能只看平均出车时间,更要看最慢那批病人的等待。

为何常见:平均值最容易计算、最容易写进汇报,长期被当作默认指标,而它恰恰最容易被极端值欺骗。

误区“都是 Kubernetes,YAML 改一改镜像地址就能在别的云跑起来,迁移没有什么技术含量。”

正解各厂商的 LoadBalancer、Ingress、GPU 调度器、存储卷语义差异很大,模型权重格式和推理引擎版本也可能不兼容。必须做迁移评估矩阵 + 灰度迁移:先跑兼容性回归(加权通过率 ≥95%),再切 5% 流量观察。像两家医院的急救系统直连,不统一协议,救护车开到门口也进不去。

为何常见:“标准化”口号让人以为底层已经统一,实际差异全藏在细节里,不踩坑很难意识到。

面试题

Q1. 推理网格架构最核心的职责是什么?

单选题 · easy

  • A.管理训练数据的版本
  • B.调度推理请求到合适节点← 正确答案
  • C.替代所有传统 Web 服务
  • D.压缩大模型的参数量

答案:B。推理网格的本质是把请求智能地调度到合适的 GPU 节点,类似于急救调度中心派车。A 是数据管理、C 的“替代所有 Web 服务”过于夸大、D 是模型压缩的范畴,均不属于网格的核心职责。

Q2. 最小连接数算法选择节点的依据是?

单选题 · easy

  • A.节点 CPU 主频最高
  • B.节点启动时间最早
  • C.节点在途请求数最少← 正确答案
  • D.节点磁盘空间最大

答案:C。最小连接数算法看“空床率”——谁当前在途请求最少就派给谁,类比调度中心选择空床最多的医院。CPU 主频、启动时间、磁盘空间都不是该算法的依据。

Q3. 熔断器从 CLOSED 翻转为 OPEN 的触发条件是?

单选题 · mid

  • A.继续向故障节点重试
  • B.全部丢弃不再处理
  • C.等待恢复后自动重发
  • D.节点错误率超过阈值← 正确答案

答案:D。熔断器的核心逻辑是“错误率 E_n ≥ 阈值 θ 就打开开关”。一旦 OPEN,新请求快速失败并走备用路径,而非继续重试(A)、全丢(B)或等待(C)。像保险丝一样,在故障扩散前切断电路。

Q4. P99 延迟指标描述的是什么?

单选题 · mid

  • A.99% 请求的平均延迟
  • B.最快 1% 请求的延迟
  • C.99% 请求比该值更慢
  • D.99% 请求比该值更快← 正确答案

答案:D。P99 是“最慢那 1% 请求的起跑线”——99% 的请求都比它快,只有最倒霉的 1% 比它慢。A 混淆了中位数与分位数,B 说反了方向,C 与定义正好相反。

Q5. 重试风暴导致雪崩的直接原因是?

单选题 · mid

  • A.请求体过大使带宽饱和
  • B.模型推理结果反复出错
  • C.大量重试同时涌入关联节点← 正确答案
  • D.监控采集占用大量资源

答案:C。故障节点恢复的瞬间,海量重试请求同时涌入,形成流量尖峰打垮下游。这正是“无限重试”的恶果。A 是带宽问题、B 是模型质量问题、D 是监控开销,都不是重试风暴的直接成因。

Q6. 自适应负载均衡相对静态轮询的核心改进是?

单选题 · hard

  • A.用 UDP 替代 TCP 传输
  • B.省去了健康检查环节
  • C.按实时负载动态调整权重← 正确答案
  • D.只能用于单机部署场景

答案:C。自适应均衡实时统计各节点延迟、错误率和在途请求,动态调整权重——慢节点自动降权,快节点加担子。静态轮询做不到这一点。A、B、D 都是对自适应均衡的错误描述。

Q7. 模型亲和调度中的显存碎片问题是指?

单选题 · hard

  • A.显卡散热不良导致降频
  • B.显存容量超出物理上限
  • C.模型参数被重复拷贝存储
  • D.小模型反复加载留下空洞← 正确答案

答案:D。多个小模型反复加载、卸载后,显存中留下无法利用的细碎空洞,导致可用显存越来越少。推理共享池正是为了解决碎片化问题而设计。A 是散热、B 是超卖、C 是冗余副本,均不准确。

Q8. 推理网格健康检查探针的作用包括哪些?

多选题 · mid

  • A.定期探测节点的存活状态← 正确答案
  • B.反馈节点的延迟与错误率← 正确答案
  • C.自动扩容 GPU 实例数量
  • D.为路由决策提供事实依据← 正确答案

答案:ABD。健康探针的作用是持续探测节点是否存活(A)、收集延迟与错误率(B),并把结果喂给路由决策(D)。C 是弹性扩缩容的职责,探针本身不扩缩容实例。

Q9. 动态批处理带来吞吐提升的同时会付出哪些代价?

多选题 · mid

  • A.增加单请求排队等待时间← 正确答案
  • B.抬升首 token 的响应延迟← 正确答案
  • C.降低 GPU 利用率水平
  • D.提高调度器实现复杂度← 正确答案

答案:ABD。批量攒单必然让请求多等一会儿(A),对流式输出模型来说首 token 延迟变长(B),调度器需要设计攒批窗口和超时策略(D)。C 说反了——动态批处理恰恰是为了提升 GPU 利用率。

Q10. 跨云厂商迁移推理网格时需要重点评估什么?

多选题 · hard

  • A.各厂商 Kubernetes 语义差异← 正确答案
  • B.模型镜像与权重格式兼容性← 正确答案
  • C.跨区域网络的专线传输成本← 正确答案
  • D.显卡型号必须保持完全一致

答案:ABC。迁移评估要覆盖厂商 K8s/网络 API 差异(A)、模型资产兼容性(B)、跨区域数据传输成本(C),加权通过率 ≥95% 才允许切换。D 过于绝对——显卡型号不需要完全一致,只要驱动和引擎兼容即可。