- 区分影子模式(零影响对比)、金丝雀(真实流量渐进)与 A/B(稳定性确认后的对比)。
- 列举五项 LLM 专属的金丝雀指标(延迟、每请求成本、错误/拒答、输出长度分布、用户反馈)。
- 解释 LLM 的非确定性(最高 15%)如何改变发布中「稳定」的含义。
- 设计一条以秒计(翻转策略)而非以小时计(重新部署)的回滚路径。
问题
你发布了一个新模型。离线评估显示准确率提升 3%。你把它在生产上打开。24 小时内,成本上涨 40%,用户点踩率上升 8%,三张客户工单反馈「回答很奇怪」。你回滚。重新部署花了 3 小时。周末毁了。
其中每一环本都可以避免。影子模式本可以在任何用户看到之前抓住 40% 的成本飙升。金丝雀本可以在点踩率变动时停在 10%。策略开关回滚本可以只花 30 秒。这套纪律填补的,正是「离线评估看起来不错」与「真实用户满意」之间的空隙。
概念
影子模式
候选模型接收与生产相同的请求;输出只记录日志,不返回给用户。用户影响为零。记录:
- 输出内容(与生产结果做 diff)。
- token 数量(成本差值)。
- 延迟。
- 拒答与错误。
能抓住:成本暴涨、长度回归、明显的拒答变化、硬错误。抓不住:用户能感知到的质量差异。影子模式是冒烟测试,不是质量测试。
金丝雀发布
带闸门的渐进流量切换。典型节奏:1% → 10% → 25% → 50% → 75% → 100%。每一步用 5 项指标把关:
- 延迟分位数 —— P50、P95、P99。触发条件:金丝雀的 P99 > 基线的 1.5 倍。
- 每请求成本 —— 混合后的美元成本。触发条件:高于基线 20%。
- 错误 / 拒答率 —— 5xx 加上显式拒答。触发条件:基线的 2 倍。
- 输出长度分布 —— 均值 + P99。触发条件:分布发生偏移。
- 用户反馈率 —— 点踩 / 工单。触发条件:基线的 1.5 倍。
非确定性是新的方差
相同输入会产生不完全相同的输出。原因:
- GPU 浮点非结合性(浮点归约顺序随 batch 变化)。
- batch 大小差异(同一 prompt 在 batch 128 与 batch 16 中)。
- 采样(temperature > 0)。
实测:在相同评估集上,逐次运行的准确率差异最高达 15%。发布语境下的「稳定」意味着指标落在预期方差内,而不是与基线完全相同。把闸门设在噪声地板之上。
成本是变量
准确率高 20% 的模型,每次调用可能贵 3 倍。每请求成本是五道闸门之一。发布一个「更好」但破坏单位经济性的模型,属于应回滚的情形。
回滚是武器
- 策略开关(feature flag 系统):在配置里翻转百分比,几秒完成。
- 模型固定(注册表 digest):被固定的模型不会自动升级。
- 回滚 = 还原开关 + 把固定 digest 指回上一版。以秒计,而非以小时计。
如果你的技术栈需要重新部署才能回滚,先修好这一点再发布。
工具
Argo Rollouts / Flagger —— Kubernetes 渐进交付控制器。与 Istio/Linkerd 的加权路由集成。
Istio 加权路由 —— 服务网格层的流量拆分。
KServe / Seldon Core —— 内置金丝雀能力的模型服务。
Feature flag —— LaunchDarkly、Flagsmith、Unleash。策略层翻转,无需重新部署。
指标节奏
金丝雀闸门每 5-15 分钟检查一次,取决于流量规模。1% 流量、每分钟 10 个请求,每个窗口有 50-150 个数据点——对延迟够用,对用户反馈则噪声很大。10% 流量大约多出 10 倍。每个阶段的停留时间应足够积累样本。
A/B 步骤是可选的
如果新模型有本质差异(行为不同、成本曲线不同、语气不同),在金丝雀通过后,于 50% 流量上做 A/B 测试。如果只是一个改进版本,金丝雀闸门通过后直接推到 100%。
应该记住的数字
- 金丝雀节奏:1% → 10% → 25% → 50% → 75% → 100%。
- 非确定性上限:相同输入下逐次运行方差最高 15%。
- 五项金丝雀指标:延迟、成本、错误/拒答、输出长度、用户反馈。
- 成本闸门:高于基线 20% 即触发。
- 回滚:以秒计,而非以小时计。
使用它
code/main.py 模拟一次注入了回归的金丝雀发布。它会报告发布停在哪一阶段,以及哪道闸门被触发。
交付它
本节课产出 outputs/skill-rollout-runbook.md。给定候选模型、基线和风险承受能力,设计影子 → 金丝雀 → 100% 的方案。
练习
- 运行
code/main.py。注入 25% 的成本回归。金丝雀会停在哪一阶段? - 你的新模型离线准确率高 3%,但每请求成本 +18%。该发布吗?取决于策略——写出两条路径。
- 设计一条端到端耗时低于 60 秒的回滚。列出所需基础设施。
- 非确定性在你的评估中表现为 ±7%。设置金丝雀闸门以避免误报。你使用什么倍数?
- 影子模式在金丝雀之前抓住 40% 的成本飙升。写出在影子阶段触发的告警规则。
关键术语
| 术语 | 人们怎么说 | 实际含义 |
|---|---|---|
| Shadow mode | 「复制到新模型」 | 零影响地把请求发给候选模型用于记录 |
| Canary | 「渐进流量」 | 带闸门的渐进式用户暴露发布 |
| Gates | 「发布检查」 | 阻止推进的指标阈值 |
| Non-determinism | 「LLM 方差」 | 不可消除的逐次运行差异 |
| Policy flag | 「开关回滚」 | 配置层回滚,以秒计而非以小时计 |
| Model pin | 「注册表 digest」 | 对某个模型版本的不可变引用 |
| Argo Rollouts | 「K8s 渐进」 | Kubernetes 原生的金丝雀/回滚控制器 |
| KServe | 「推理 K8s」 | 带金丝雀原语的模型服务 |
| Istio weighted | 「网格拆分」 | 服务网格流量拆分器 |
延伸阅读
- TianPan — Releasing AI Features Without Breaking Production
- MarkTechPost — Safely Deploying ML Models
- APXML — Advanced LLM Deployment Patterns
- Argo Rollouts docs
- Flagger docs