Skip to content

8. 企业生产实践:部署、存储、认证与高可用 ​

一句话理解:MLflow 从“本地 SQLite”到“生产平台”的关键跳跃,是 Backend Store、Artifact Store、Tracking Server、认证/网络 这四块的设计和运维。

8.1 部署形态选择 ​

形态 1:本地开发(文件模式) ​

python
import mlflow
mlflow.set_tracking_uri("file:///home/user/mlruns")
  • 优点:零配置,开箱即用。
  • 缺点:无 Model Registry,无协作,无认证。

形态 2:本地 SQLite + Tracking Server ​

bash
mlflow server --backend-store-uri sqlite:///mlflow.db --artifacts-destination ./mlruns
  • 适合:小团队、概念验证。
  • 缺点:SQLite 并发弱,artifact 在本地磁盘。

形态 3:生产三件套(推荐) ​

bash
mlflow server \
  --host 0.0.0.0 \
  --backend-store-uri postgresql://user:pass@postgres/mlflow \
  --artifacts-destination s3://my-bucket/mlflow
  • PostgreSQL:Backend Store,高并发、可备份。
  • S3:Artifact Store,大模型文件、多副本、生命周期管理。
  • Tracking Server:多副本 + Load Balancer。

形态 4:Kubernetes / 官方 Helm Chart(3.13+ 推荐) ​

MLflow 3.13 起内置官方 Helm Chart(chart 版本与 MLflow 版本对齐),自带 TLS、Ingress、持久存储、Prometheus 指标、NetworkPolicy、RBAC 与可选的 mlflow gc 垃圾回收:

bash
helm install mlflow oci://ghcr.io/mlflow/charts/mlflow \
  --version 3.13.0 \
  --namespace mlflow --create-namespace

生产 values(PostgreSQL + S3)可参考仓库中的 charts/example-mlflow-charts.yaml。若 chart 不满足需求,也可自写 Deployment:

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mlflow-server
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: mlflow
          image: mlflow:latest
          command:
            - mlflow
            - server
            - --backend-store-uri
            - postgresql://user:pass@postgres/mlflow
            - --artifacts-destination
            - s3://my-bucket/mlflow

8.2 Backend Store 选型 ​

数据库适用场景注意
SQLite本地开发不支持高并发
PostgreSQL生产首选支持 Model Registry、索引好
MySQL生产可选注意字符集和 max_allowed_packet
SQL Server企业环境需要对应驱动

数据库表规模估算 ​

  • 每次 Run 产生:1 行 run + N 行 params + M 行 metrics(每 step 一行)+ K 行 tags。
  • 如果每天 1000 次 Run,每次 100 metrics × 100 steps,一年 metrics 表可达 36.5 亿行。
  • 需要:分区、归档、清理策略。

8.3 Artifact Store 选型 ​

存储适用场景
本地文件开发/测试
S3AWS / 通用生产
GCSGCP
Azure BlobAzure
HDFS大数据生态

S3 配置要点 ​

bash
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...

mlflow server --artifacts-destination s3://my-bucket/mlflow
  • 对 MLflow Server 配置 IAM Role,避免把 AK/SK 写进代码。
  • 启用 S3 生命周期:旧版本模型自动转冷存储或删除。
  • 启用 S3 版本控制:防止误删重要模型。

8.4 认证、RBAC 与多用户 ​

内置 RBAC(3.13+,推荐) ​

MLflow 3.13 起内置基于角色的访问控制:管理员可定义角色(一组权限包),并授予到 experiments、models、prompts、scorers、AI Gateway endpoints 等资源;自带 Admin UI 管理用户/角色/授权,用户有 /account 自助页面;3.17 进一步提供资源级的 DENY 式细粒度权限。开启服务端认证后即可使用(详见官方 Self-Hosting 文档的认证章节)。

basic-auth 插件(2.x 时代方案,仍可用) ​

bash
mlflow server \
  --app-name basic-auth \
  --backend-store-uri postgresql://... \
  --artifacts-destination s3://...

用户/权限存储在 auth 数据库表中,支持用户认证与 experiment 级读写权限。

多工作区(3.10+) ​

mlflow server --enable-workspaces 可让多个团队工作区共享同一个 Server,各工作区数据逻辑隔离。

企业方案 ​

  • Databricks Managed MLflow:完整 workspace、RBAC、审计,模型注册默认落到 Unity Catalog(databricks-uc),实现跨 workspace 治理与血缘。
  • 自研网关:在 MLflow Server 前加 OIDC/OAuth2 代理,按 team/project 路由到不同 MLflow 实例。

网络隔离 ​

  • 不同团队使用不同 Tracking Server + DB + Bucket。
  • 或用同一个 Server(配合 RBAC / workspaces),但 experiment 命名带 team/project 前缀。

8.5 Trace 保留与归档(3.13+) ​

GenAI 观测数据是增长最快的资产(量级通常远超 metrics)。3.13 引入 Trace 自动归档:后台调度进程把超过保留期的 trace span 负载从 SQL 搬到归档存储(S3),UI/API 依然可读;3.17 提供按日 SQL 聚合(daily rollups,MLFLOW_SQL_TRACE_ROLLUPS_ENABLED=true)加速分析。服务端通过 MLFLOW_TRACE_ARCHIVAL_CONFIG 指向的 YAML(或 --trace-archival-config 参数)配置:

yaml
# trace-archival.yaml
trace_archival:
  enabled: true
  location: s3://my-bucket/mlflow/traces   # 归档位置(span 负载)
  retention: 30d                           # 默认热数据保留 30 天
  interval_seconds: 300                    # 调度间隔:每 5 分钟检查一次
  max_traces_per_pass: 1000                # 单次归档上限,防打爆存储
  # long_retention_allowlist:              # 允许更长保留的 experiment ID 白名单
  #   - 12345

要点:

  • 保留期按 Server → Workspace → Experiment 三级解析(3.10 起,需 --enable-workspaces):实验可设更短的保留覆盖全局;更长的保留需命中服务端 long_retention_allowlist,否则回落到全局策略;归档位置只由 Server/Workspace 决定。UI 的 trace 列表会显示每个实验的 Archive after 保留徽标。
  • 热窗口内的 trace 查询快,窗口外的 span 负载从归档存储懒加载,依赖 span 内容的搜索(如 trace.text)对归档 trace 失效。
  • 多模态附件(PDF/图片)本来就存 Artifact Store,SQL 只存引用。
  • 归档不可回滚(不能把 span 负载搬回 SQL);配置修改约 5 秒内自动生效,无需重启。
  • 没有归档策略时,traces 表会在几个月内膨胀到拖垮 Backend Store。

8.6 高可用与扩展 ​

Tracking Server ​

  • 多副本无状态部署,前置 Load Balancer。
  • 使用容器健康检查。
  • 配置资源限制(CPU/内存)。

数据库 ​

  • PostgreSQL 主从 + 自动故障转移。
  • 定期备份(逻辑备份 + WAL 归档)。
  • 慢查询监控与索引优化。

Artifact Store ​

  • S3 本身高可用,但注意 bucket 跨区域复制。
  • 大模型文件上传超时:调整客户端/服务器超时时间。

8.7 备份与灾难恢复 ​

数据备份方式恢复策略
Backend Storepg_dump / 数据库备份恢复到新实例
Artifact StoreS3 跨区域复制 / 生命周期从备份 bucket 恢复
配置文件Git重新部署

灾难恢复演练 ​

  • 每季度做一次恢复演练:从备份恢复 DB + S3,验证 Model Registry 可加载。
  • 记录 RTO/RPO。

8.8 监控与告警 ​

指标工具告警场景
Tracking Server QPS / 延迟Prometheus + Grafana(官方 Helm Chart 内置 metrics)延迟 P99 升高
Trace 写入量 / 归档失败Server metrics + 归档日志trace 堆积、归档报错
DB 连接数 / 慢查询 / traces 表大小PostgreSQL exporter连接数接近上限、表膨胀超预算
S3 存储/请求CloudWatch / S3 metrics存储增长异常
AI Gateway token 消耗 / 预算Gateway Usage 面板 + 预算告警(3.11.1+)窗口内花费逼近上限、触发超支阻断
模型注册/阶段变更MLflow UI / audit log非预期 Production 变更
模型加载失败服务自身监控加载失败率升高

8.9 与 Kubeflow / KServe / GenAI 框架集成 ​

Kubeflow + MLflow ​

Kubeflow Pipeline 的 training step 里:

python
with mlflow.start_run():
    mlflow.log_params(params)
    model.fit(...)
    mlflow.log_metric("auc", auc)
    model_info = mlflow.sklearn.log_model(model, "model")
    client.create_model_version(name="fraud-detector", source=model_info.model_uri)

KServe + MLflow:

yaml
spec:
  predictor:
    model:
      modelFormat:
        name: mlflow
      storageUri: models:/fraud-detector@champion

LangChain / LlamaIndex 应用 ​

一行开启全链路观测(LLM 调用、检索、工具调用、token 与成本):

python
import mlflow

mlflow.set_tracking_uri("http://mlflow.example.com:5000")
mlflow.langchain.autolog()   # 或 mlflow.llama_index.autolog()

生产注意:trace 上报默认批量异步,不会阻塞请求主路径;但高 QPS 场景要关注 Backend Store 的写入容量与归档策略(见 8.5)。

本章小结 ​

  • 生产 MLflow = PostgreSQL + S3 + Tracking Server 多副本;K8s 上优先用 3.13+ 官方 Helm Chart。
  • 认证首选 3.13+ 内置 RBAC(Admin UI + 资源级权限),老版本用 basic-auth 插件,企业可用 OIDC 代理或 Databricks workspace。
  • 数据库需要分区/归档/备份;3.x 起 traces 表是最大增长点,必须配置 Trace 归档保留策略。
  • S3 需要生命周期和跨区域复制;大 artifact 用 presigned URL 直传(3.15+)。
  • 高可用覆盖 Server、DB、Artifact Store 三层。
  • 与 Kubeflow/KServe 组合形成完整的训练→注册→服务链路;与 LangChain/LlamaIndex autolog 组合形成 GenAI 观测闭环。

参考来源

Released under CC-BY-SA-4.0 License.