核心背景
在 AI 基础设施(AI Infra)的生产实践中,模型更新的风险极高。由于离线评估与在线数据的偏移(Skew),新版模型上线后可能出现延迟激增或预测精度大幅下降。为了保障业务连续性,我们需要构建一套基于模型注册中心与指标驱动发布的自动化回滚系统。
架构设计
本文推荐的方案基于以下核心组件:
1. MLflow Model Registry: 统一管理模型版本与元数据。
2. Argo Rollouts: Kubernetes 上的金丝雀(Canary)/ 蓝绿部署控制器,支持自动指标评估。
3. Prometheus: 收集模型推断的实时指标。
第一步:将模型元数据推送到注册中心
首先,使用 MLflow 记录模型并将其标记为待部署版本。这是回滚的基础——必须有明确的版本指向。
import mlflow
from mlflow.tracking import MlflowClient
# 设置追踪服务器地址
mlflow.set_tracking_uri("http://mlflow-service:5000")
# 注册模型并设置版本别名
model_name = "revenue-forecaster"
client = MlflowClient()
model_version = client.create_model_version(
name=model_name,
source="s3://models/path/to/artifacts",
run_id="abcdef123456"
)
# 标记为 Candidate 用于测试
client.set_registered_model_alias(model_name, "candidate", model_version.version)
第二步:配置指标分析模板 (AnalysisTemplate)
Argo Rollouts 通过 AnalysisTemplate 来决定是否触发回滚。这里我们定义一个 Prometheus 查询,用于监控最近 5 分钟的 HTTP 5xx 错误率。
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: model-health-check
spec:
metrics:
- name: error-rate
interval: 1m
# 如果错误率超过 5%,则认为失败
successCondition: len(result) > 0 && result[0] < 0.05
failureLimit: 1
provider:
prometheus:
address: http://prometheus-server.monitoring.svc.cluster.local:9090
query: |
sum(rate(http_requests_total{status=~"5.*", model_name="revenue"}[5m]))
/
sum(rate(http_requests_total{model_name="revenue"}[5m]))
第三步:定义 Rollout 策略实现自动回滚
在 Rollout 对象中,我们将金丝雀部署的步骤与指标分析绑定。一旦 successCondition 不满足,系统会自动将流量切回旧版本。
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: model-deployment
spec:
replicas: 10
strategy:
canary:
# 引用 MLflow 管理的模型镜像或 S3 路径
analysis:
templates:
- templateName: model-health-check
steps:
- setWeight: 10
- pause: {duration: 5m} # 在 10% 流量下观察 5 分钟
- setWeight: 50
- pause: {duration: 10m}
template:
spec:
containers:
- name: model-server
image: model-server-base:v1
env:
- name: MLFLOW_MODEL_URI
value: "models:/revenue-forecaster@candidate"
总结
通过这种配置,模型部署不再是盲目的覆盖。当新模型(Candidate)上线后,Argo Rollouts 会在金丝雀阶段持续查询 Prometheus 中的实时性能。如果模型逻辑导致服务端崩溃或预测报错,AnalysisTemplate 将会触发 Failure,Argo 自动将流量切回 Stable 版本。这种「指标即代码」的模式是实现 MLOps 闭环的关键。
汤不热吧