摘要
10-14 把 RAG 从「只读字」升级到「读字+读图+读表」,平台骨架成型。但模型一旦要上线,真正的考验才开始:权重动辄 10–140GB、单请求要流式数秒、回滚要快过事故扩散。上线运营是 OpenClaw 系列的收口章——本文用三把钥匙打开它:模型版本管理与回滚血缘、蓝绿部署的零停机切换、Argo Rollouts + Istio 金丝雀的按指标渐进放量,并配套权重缓存、模型感知 readiness 与优雅排空,让大模型迭代既快又稳。
一句话结论:把「部署」和「发布」解耦——用蓝绿做瞬时回滚的零停机切换,用金丝雀按延迟/错误率/质量指标渐进放量,用模型注册表锁死版本血缘,三者合起来让大模型上线从「赌博式全量」变成「可观测、可回退、可审计」的工程动作。
1. 为什么大模型上线比普通服务难
普通无状态 Web 服务,/healthz一通就「 Ready 」。但模型服务有三大反直觉特性,让「滚动更新」直接翻车:
| 特性 | 后果 | 朴素更新会怎样 |
|---|---|---|
| 权重巨大(10–140GB) | Pod 启动要 2–5 分钟加载权重 | 容量缺口期长达 15 分钟(3 副本各 5 分钟) |
| 显存重、预热慢 | 看上去「 Up 」其实没暖好 | 新副本一接流量就延迟尖刺、OOM |
| 单请求流式数秒 | 强杀会截断进行中的生成 | 用户正在看的回答突然断流 |
经验法则:重模型(LLM)用蓝绿,轻模型(分类器)用滚动。不要对 vLLM/Triton 这类重运行时套用通用滚动更新。
2. 模型版本管理:先锁死血缘,再谈切换
上线前第一件事不是「怎么切」,而是「切错了怎么回」。模型注册表(Model Registry)把「哪个版本、来自哪次训练/哪次微调、评测分多少、被谁引用」固化为可查询的血缘。
2.1 注册表选型
| 工具 | 定位 | 版本能力 | 适用 |
|---|---|---|---|
| MLflow Model Registry | 开源事实标准 | 模型版本号、别名(@production/@staging)、审批流转 | 多云/本地,生态最广 |
| Hugging Face Hub | 社区+私有仓 | tag/branch/commit 锁版本,权重微分发 | 开源模型为主 |
| 云厂商(SageMaker/Vertex/Azure ML) | 托管 | 端点版本 + 流量切分一体 | 全栈上云团队 |
# MLflow:用别名而非硬编码版本号做路由importmlflow client=mlflow.tracking.MlflowClient()# 上线前先把候选版本打到 stagingclient.set_registered_model_alias("kuaidi-llm","staging",version="27")# 验证通过后,原子地切换 production 别名client.set_registered_model_alias("kuaidi-llm","production",version="27")# 应用侧只认别名,不认数字版本model_uri="models:/kuaidi-llm@production"关键点:应用运行时只解析@production别名,切换版本=改别名指向,无需重新部署代码。回滚=把别名指回上一版,秒级完成。
2.2 版本血缘要记什么
- 训练/微调数据 commit、超参、基座版本
- 离线评测分数(接 9-26/03 评测集)
- 上线时间、回滚记录、关联 PR
- 权重存储位置与哈希(防供应链篡改)
3. 蓝绿部署:零停机 + 瞬时回滚
蓝绿维护两套完全相同的生产环境(Blue 接流量,Green 待命)。新版本在 Green 上加载、预热、跑离线/影子验证,确认无误后在网关层一次性切流;出事再把流量切回 Blue。
| 维度 | 蓝绿 | 金丝雀 | 滚动 |
|---|---|---|---|
| 机制 | 两套全量环境,原子切换 | 小比例渐进放量 | 逐副本替换 |
| 回滚速度 | <1 秒(切路由) | 1–5 分钟(重路由) | 5–15 分钟(重部署) |
| 额外成本 | 高(切期 2x 容量) | 低(仅增量) | 低 |
| 风险画像 | 切全量,配置/状态 bug 一击致命 | 故障被限制在少量流量 | 故障随副本增长扩散 |
| 最适合 | 大版本升级、高风险发布 | 新模型效果验证 | 小修补、轻模型 |
# Istio VirtualService:蓝绿一键切换apiVersion:networking.istio.io/v1beta1kind:VirtualServicemetadata:{name:kuaidi-llm}spec:hosts:["llm.kuaidi100.internal"]http:-route:-destination:{host:kuaidi-llm,subset:green}# 切流量只改这一行weight:100# - destination: { host: kuaidi-llm, subset: blue }# weight: 100高级模式:Shadow → 蓝绿。高利害模型发布前:① 起 Green 并预热;② 把生产流量复制一份打到 Green(用户无感);③ 对比 Blue/Green 输出与延迟;④ 网关层切流;⑤ 保留 Blue 15–30 分钟做瞬时回滚。
4. 金丝雀发布:按指标渐进放量
金丝雀把新版本先放 1%→5%→25%→50%→100% 的流量,每一步「 bake 」(观察)数十分钟,指标异常自动回滚。这是模型回归(输出质量下降、延迟升高)最克制的拦截网。
4.1 Argo Rollouts + Istio 实战
apiVersion:argoproj.io/v1alpha1kind:Rolloutmetadata:{name:kuaidi-llm}spec:replicas:4strategy:canary:trafficRouting:istio:virtualService:{name:kuaidi-llm-vsvc,routes:[primary]}destinationRule:{name:kuaidi-llm-dest,canarySubsetName:canary,stableSubsetName:stable}steps:-setWeight:1-pause:{duration:10m}# 1% 静默观察-setWeight:5-pause:{duration:15m}-analysis:# 指标门禁templates:[{templateName:canary-analysis}]-setWeight:25-pause:{duration:30m}-analysis:{templates:[{templateName:canary-analysis}]}-setWeight:50-pause:{duration:60m}-setWeight:100rollbackWindow:{revisions:1}# 失败自动回退上一版4.2 分析模板:用真实指标决定升降级
apiVersion:argoproj.io/v1alpha1kind:AnalysisTemplatemetadata:{name:canary-analysis}spec:metrics:-name:p95-latencyinterval:1msuccessCondition:result[0]< 200# 单位 msprovider:prometheus:address:http://prometheus:9090query:|histogram_quantile(0.95, sum(rate(llm_inference_latency_seconds_bucket[2m])) by (le, version))-name:error-ratesuccessCondition:result[0]< 0.01provider:{prometheus:{address:http://prometheus:9090,query:|sum(rate(llm_errors_total[2m])) by (version) / sum(rate(llm_requests_total[2m])) by (version) } }AnalysisTemplate把「发布」和「质量门禁」绑死:延迟或错误率越线,Rollout 自动回滚,不靠人盯。这也呼应 9-26/03 的评测——把离线评测分数接成在线分析信号,质量回归在放量前就被拦下。
5. 权重缓存与模型感知就绪
蓝绿/金丝雀能否丝滑,取决于「新副本多久能真接流量」。
5.1 权重缓存:分钟级 → 秒级
每次 Pod 重启都从远端拉 10–140GB 权重是巨大浪费。用 PVC + Init 容器预拉,主容器启动先从本地缓存读:
initContainers:-name:weight-prefetchimage:registry/kuaidi-llm:v2.3.1command:["python","-c","load_and_cache('kuaidi-llm', '27')"]# 写本地 SSD PVCvolumeMounts:[{name:model-cache,mountPath:/models}]containers:-name:servingvolumeMounts:[{name:model-cache,mountPath:/models,readOnly:true}]5.2 readiness 探针必须反映模型现实
普通 HTTP 探针不够——模型「进程起了」≠「能服务」。就绪探针应验证:权重已进显存、tokenizer 就绪、合成推理在阈值内通过。
5.3 优雅排空:别杀正在生成的请求
lifecycle:preStop:exec:{command:["/bin/sh","-c","sleep 30"]}# 停新流量,给在途生成 30s 收尾terminationGracePeriodSeconds:120LLM 单请求可能流式数秒,preStop+ 充裕的优雅期能避免「回答答一半被掐断」。
6. 多模型服务与路由层
生产极少只有一个模型:生成模型跑 H100、embedding 跑 L40S、护栏小模型跑 CPU。两种拼法:
- 每模型独立部署:隔离干净、爆炸半径小,但 GPU 碎片化浪费。
- 模型多路复用(Triton 原生):单卡并发跑量化 7B + embedding + reranker,显存占用 <15%,代价是共享爆炸半径(一个 OOM 全挂)。
路由层(CPU 节点上的轻服务)是架构控制点:按请求类型/复杂度分类器/显式 header 选模型,并实现熔断、限流、A/B(接 10-15/03)与失败降级——主模型过载/不健康时路由到「质量略降但不报错」的备份模型。
defroute(req):ifreq.complexity<0.3:return"kuaidi-llm-lite"# 简单问题走小模型省成本ifguardrail_healthy():return"kuaidi-llm-pro"return"kuaidi-llm-fallback"# 熔断降级,绝不返回错误7. 与 9-25 网关 / 9-26 护栏的衔接
- 发布控制点:9-25 统一网关是流量切分的天然落点——蓝绿/金丝雀的 VirtualService 直接挂在网关后;路由层的熔断/降级复用网关能力。
- 质量门禁:金丝雀 AnalysisTemplate 的「质量信号」来自 9-26/03 评测(在线 LLM-as-Judge 采样),回归在放量前拦截。
- 安全:模型容器镜像用 Trivy/Grype 扫描、禁
:latest、权重凭证走 Vault/CSI Secret;NetworkPolicy 限制仅路由层与监控系统能访问模型 Pod(呼应 9-26 出站护栏)。 - 回滚闭环:别名切换(§2)+ 路由回切(§3/§4)+ 监控告警(10-15/02)三件套,让「上线」成为可审计、可一键回退的动作。
8. 常见问题 FAQ
Q1:小版本微调也要蓝绿吗?
A:不必。轻量修补用滚动或 5%→100% 短金丝雀即可;只有大版本升级、架构变更、高风险发布才值得 2x 容量的蓝绿。按风险分级选策略。
Q2:回滚到底多快?
A:蓝绿靠路由切换 <1 秒;金丝雀靠重路由 1–5 分钟;滚动要重部署旧版 5–15 分钟。所以高风险发布优先蓝绿/金丝雀。
Q3:MLflow 别名和 K8s 版本号什么关系?
A:两层解耦。MLflow@production别名管「逻辑版本」,K8s 镜像 tag 管「可运行工件」。切换别名即可换模型,无需重新构建镜像,回滚极快。
Q4:金丝雀 bake 多久合适?
A:1% 静默 10 分钟看突发错误,5%/25% 各 15–30 分钟看延迟与质量趋势,50% 观察 1 小时确认稳定。用指标说话,不拍脑袋。
Q5:影子流量会污染生产数据吗?
A:不会。影子副本只「看」复制来的请求、不「回写」任何结果给用户,纯用于离线对比。但要确保影子副本不触发写操作(订单、发短信)。
Q6:权重缓存 PVC 会不会成为单点?
A:PVC 是节点本地 SSD,Pod 重调度到同节点才命中;跨节点仍要拉。可配合节点亲和 + 预热 Job,或在镜像构建期烘焙常用权重。
Q7:为什么 readiness 不能只用 HTTP 200?
A:模型进程起了但权重没加载完、kernel 没编译,接流量会延迟尖刺/OOM。就绪探针必须验证「权重进显存 + 合成推理达标」。
Q8:多模型复用(Triton)共享爆炸半径怎么办?
A:按 SLA 分级——核心生成模型独立部署保隔离;embedding/reranker 等非核心小模型才复用同卡省成本。关键在「分级而非一刀切」。
Q9:发布和部署为什么要解耦?
A:部署=把新版本跑起来(可随时做),发布=把流量切过去(高风险动作)。解耦后你能「先部署、充分验证、再选时机发布」,回滚也只是切流量。
Q10:模型容器为什么禁用 :latest?
A:GPU 驱动/CUDA 版本错配会「静默推理失败」。锁死基础镜像版本,保证每次拉起的运行时一致,可复现、可回滚。
9. 参考资料
- AppScale Blog,How to Deploy LLMs on Kubernetes: Production Guide (2026), 2026
- 123 of AI,Canary Deployment for ML Models — Complete Guide (2026), 2026
- Resilio Tech,Zero-Downtime Model Updates: Blue-Green and Rolling Deployments for ML Systems, 2026
- Inference Systems,Blue-Green Deployment: Zero-Downtime Model Updates, 2026
- AIOps School,Top 10 Model Canary & A/B Deployment Tools, 2026
- 本专栏,统一 LLM 推理网关实战, 2026-09-25
- 本专栏,AI 网关内容安全与提示注入防御实战, 2026-09-26
- 本专栏,多模态文档智能与图文 RAG, 2026-10-14