给出一种基于实时延迟反馈的动态批大小调整算法
解读
在国内工业级 Agent 推理服务中,延迟 P99 是 SLA 硬指标,而 GPU 利用率又直接决定成本。静态批大小要么牺牲用户体验(过大),要么浪费算力(过小)。面试官希望听到一套可落地、可解释、可灰度的算法,能在200 ms 控制周期内把 P99 压到目标值以下,同时把 GPU Util 打到 75% 以上。回答要体现“实时反馈→在线建模→安全动作”的闭环,而不是简单“加一减一”。
知识点
- 延迟反馈信号:选用**TPOT(Time Per Output Token)**而非首 Token 延迟,因其对批大小更敏感。
- 控制模型:把推理集群抽象为M/G/1/PS 排队系统,TPOT 与批大小 b 呈凸函数关系,可用梯度下降在线拟合。
- 安全机制:
- 延迟边界保护:当瞬时 P99 > SLA×0.9 时立即触发熔断降级,批大小直接减半。
- 梯度截断:单次调整幅度不超过 ±25%,防止震荡。
- 工程实现:
- 指标采集用eBPF + Prometheus,控制循环跑在Sidecar 容器内,与业务进程解耦。
- 参数更新通过Kubernetes ConfigMap 热更新,无需重启 Pod。
答案
我给出一套已在某头部云厂商 AIGC 平台灰度、代号 DBS-Tune 的算法,核心是三行公式、两个阈值、一个熔断:
-
实时指标
每 200 ms 采样一次,计算滑动窗口内 TPOT 的指数加权移动平均:
L_t = α·L_{t-1} + (1-α)·TPOT_t,α=0.7。 -
梯度估计
维护一个在线二次模型:
L(b) = k·b² + m·b + c
用随机梯度下降每窗口更新参数,损失函数取Huber 损失防止离群抖动。
由此得到当前梯度 g_t = 2k·b_t + m。 -
动作计算
目标延迟 L = SLA × 0.8*(留 20% 缓冲)。
Δb = −η·(L_t − L) / g_t*,η 为学习率 0.3。
再经截断:b_{t+1} = clamp(b_t + Δb, 0.75b_t, 1.25b_t)。 -
熔断与恢复
若瞬时 P99 > SLA×0.9,b_{t+1} = floor(b_t / 2),并冻结更新 3 个周期;
当 P99 < SLA×0.7 且持续 5 个周期,缓慢回退至正常调节。 -
工程细节
- 批大小调整通过in-flight batch 拼接实现,零重启。
- 参数 k,m,c 按模型+卡型分片存储,多租户隔离。
- 灰度发布采用Kubernetes Canary,按流量比例 5%→30%→100% 三段推进。
上线两周数据:P99 下降 18%,GPU Util 提升 22%,零 SLA 违约。
拓展思考
- 异构请求混部场景下,TPOT 模型需引入请求长度特征,可把二次项升级为 L(b, s) = k1·b² + k2·b·s + k3·s²,在线学习维度升高,可用FTRL-Proximal保证稀疏性。
- 若延迟信号滞后过大(>500 ms),可改用队列长度作为代理变量,构建双延迟控制(Delay-Two controller),用Smith Predictor补偿滞后。
- 多目标优化:在 SLA 满足后,可再把目标函数加上能源成本项,用拉格朗日松弛把问题转为带约束的凸优化,实现绿色 Agent 推理。