MLflow 简介 #
什么是机器学习生命周期? #
在了解 MLflow 之前,我们需要先理解机器学习生命周期的概念。机器学习项目不仅仅是训练模型,它包含从数据处理到模型部署的完整流程。
text
┌─────────────────────────────────────────────────────────────┐
│ 机器学习生命周期 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 数据准备 │ → │ 实验开发 │ → │ 模型训练 │ → │ 模型评估 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ↑ ↑ ↑ ↑ │
│ │ │ │ │ │
│ ↓ ↓ ↓ ↓ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 特征工程 │ │ 参数调优 │ │ 版本管理 │ │ 模型部署 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
传统 ML 工作的痛点 #
text
痛点 1:实验难以追踪
────────────────────────
- 哪个参数组合效果最好?
- 这次的改动为什么效果变差了?
- 之前的实验记录在哪里?
痛点 2:代码难以复现
────────────────────────
- 这段代码依赖什么环境?
- 数据版本是什么?
- 随机种子设置了吗?
痛点 3:模型难以管理
────────────────────────
- 生产环境用的是哪个模型?
- 模型文件在哪里?
- 如何回滚到上一个版本?
痛点 4:部署流程复杂
────────────────────────
- 如何打包模型?
- 如何在不同环境部署?
- 如何监控模型性能?
什么是 MLflow? #
MLflow 是一个开源平台,用于管理机器学习完整的生命周期。它由 Databricks 于 2018 年创建,现已成为 MLOps 领域最受欢迎的工具之一。
核心定位 #
text
┌─────────────────────────────────────────────────────────────┐
│ MLflow 定位 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 框架无关 │ │ 端到端 │ │ 开源免费 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 易于扩展 │ │ 可自托管 │ │ 活跃社区 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
MLflow 的设计理念 #
text
1. 开放性
├── 支持所有主流 ML 框架
├── 可与任何存储后端集成
└── 可在任何平台运行
2. 简洁性
├── API 设计简洁直观
├── 最小化侵入性
└── 渐进式采用
3. 可扩展性
├── 支持单机到分布式
├── 支持小团队到企业
└── 支持插件扩展
MLflow 的历史 #
发展历程 #
text
2018年 ─── MLflow 项目启动
│
│ Databricks 开源
│ 首次发布三大组件
│
2019年 ─── 快速发展期
│
│ 社区快速增长
│ 新增多项功能
│
2020年 ─── Model Registry 发布
│
│ 模型版本管理
│ 阶段转换功能
│
2021年 ─── 企业功能增强
│
│ 认证授权
│ 多租户支持
│
2022年 ─── MLflow 2.0
│
│ 架构重构
│ 性能优化
│
至今 ─── 广泛应用
│
│ 数百万用户
│ 企业级采用
版本演进 #
| 版本 | 发布时间 | 主要特性 |
|---|---|---|
| 1.0 | 2018 | Tracking, Projects, Models |
| 1.5 | 2019 | Model Registry |
| 1.20 | 2021 | 认证支持 |
| 2.0 | 2022 | 架构重构、性能优化 |
| 2.5 | 2023 | LLM 支持、Prompt Engineering |
| 2.10 | 2024 | 增强的 LLM 功能 |
MLflow 核心组件 #
1. MLflow Tracking(实验跟踪) #
text
┌─────────────────────────────────────────────────────────────┐
│ MLflow Tracking │
├─────────────────────────────────────────────────────────────┤
│ │
│ 功能:记录和查询实验 │
│ │
│ 记录内容: │
│ ├── Parameters(参数)- 模型超参数 │
│ ├── Metrics(指标)- 评估指标 │
│ ├── Artifacts(工件)- 模型文件、图表等 │
│ └── Metadata(元数据)- 代码版本、运行时间等 │
│ │
│ 使用方式: │
│ ├── Python API │
│ ├── CLI 命令 │
│ └── Web UI │
│ │
└─────────────────────────────────────────────────────────────┘
2. MLflow Projects(项目打包) #
text
┌─────────────────────────────────────────────────────────────┐
│ MLflow Projects │
├─────────────────────────────────────────────────────────────┤
│ │
│ 功能:将 ML 代码打包成可复现的格式 │
│ │
│ 项目结构: │
│ ├── MLproject 文件 - 项目描述 │
│ ├── conda.yaml - 环境依赖 │
│ ├── requirements.txt - Python 依赖 │
│ └── 代码文件 │
│ │
│ 支持环境: │
│ ├── Conda 环境 │
│ ├── Docker 容器 │
│ └── 系统环境 │
│ │
└─────────────────────────────────────────────────────────────┘
3. MLflow Models(模型管理) #
text
┌─────────────────────────────────────────────────────────────┐
│ MLflow Models │
├─────────────────────────────────────────────────────────────┤
│ │
│ 功能:统一的模型打包格式 │
│ │
│ 模型结构: │
│ ├── MLmodel 文件 - 模型元数据 │
│ ├── 模型文件 - 权重和参数 │
│ ├── conda.yaml - 运行环境 │
│ └── requirements.txt - 依赖 │
│ │
│ 支持的模型格式(Flavors): │
│ ├── python_function - 通用 Python 接口 │
│ ├── sklearn - Scikit-learn 模型 │
│ ├── tensorflow - TensorFlow 模型 │
│ ├── pytorch - PyTorch 模型 │
│ └── 更多... │
│ │
└─────────────────────────────────────────────────────────────┘
4. Model Registry(模型注册中心) #
text
┌─────────────────────────────────────────────────────────────┐
│ Model Registry │
├─────────────────────────────────────────────────────────────┤
│ │
│ 功能:集中管理模型版本和生命周期 │
│ │
│ 核心概念: │
│ ├── Registered Model - 注册的模型 │
│ ├── Model Version - 模型版本 │
│ └── Model Stage - 模型阶段 │
│ │
│ 模型阶段: │
│ ├── None/Archived - 归档 │
│ ├── Staging - 预发布 │
│ └── Production - 生产环境 │
│ │
└─────────────────────────────────────────────────────────────┘
MLflow 架构 #
整体架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ MLflow 架构图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 客户端层 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Python │ │ CLI │ │ REST │ │ │
│ │ │ API │ │ 命令 │ │ API │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MLflow Server │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Tracking │ │ Registry │ │ │
│ │ │ API │ │ API │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 存储层 │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Backend │ │ Artifact │ │ │
│ │ │ Store │ │ Store │ │ │
│ │ │ (元数据) │ │ (工件) │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
存储后端 #
text
Backend Store(元数据存储)
├── FileStore(本地文件系统)
│ └── 默认方式,适合单机
├── SQLStore(关系数据库)
│ ├── SQLite
│ ├── PostgreSQL
│ ├── MySQL
│ └── SQL Server
└── 自定义存储
Artifact Store(工件存储)
├── LocalArtifactRepo(本地)
├── S3ArtifactRepo(AWS S3)
├── AzureBlobArtifactRepo(Azure)
├── GCSArtifactRepo(GCP)
├── FTPArtifactRepo(FTP)
└── 自定义存储
MLflow 的优势 #
1. 解决实验管理问题 #
text
问题:
├── 实验记录混乱
├── 参数难以追踪
├── 结果难以比较
└── 复现困难
MLflow 解决方案:
├── 自动记录参数和指标
├── 可视化比较实验
├── 版本控制
└── 一键复现
2. 解决模型管理问题 #
text
问题:
├── 模型文件散落各处
├── 版本管理混乱
├── 部署格式不统一
└── 回滚困难
MLflow 解决方案:
├── 统一的模型格式
├── Model Registry 版本管理
├── 多种部署方式
└── 阶段转换和回滚
3. 解决团队协作问题 #
text
问题:
├── 实验结果难以共享
├── 环境配置不一致
├── 模型交接困难
└── 缺乏审计追踪
MLflow 解决方案:
├── 集中的实验存储
├── 项目打包保证一致性
├── 模型注册中心
└── 完整的审计日志
MLflow vs 其他工具 #
功能对比 #
| 特性 | MLflow | Weights & Biases | Neptune.ai | Kubeflow |
|---|---|---|---|---|
| 开源 | ✅ 完全开源 | 部分 | 部分 | ✅ 完全开源 |
| 自托管 | ✅ | ❌ | ❌ | ✅ |
| 实验跟踪 | ✅ | ✅ | ✅ | ✅ |
| 模型注册 | ✅ | ✅ | ✅ | ✅ |
| 模型部署 | ✅ | ❌ | ❌ | ✅ |
| 项目打包 | ✅ | ❌ | ❌ | ✅ |
| 学习曲线 | 低 | 低 | 低 | 高 |
| 企业支持 | Databricks | W&B | Neptune |
选择建议 #
text
选择 MLflow 的场景:
├── 需要自托管解决方案
├── 需要完整的端到端功能
├── 需要与现有基础设施集成
├── 预算有限(开源免费)
└── 需要灵活定制
选择 W&B/Neptune 的场景:
├── 不介意数据存储在第三方
├── 需要开箱即用的体验
├── 团队协作需求强
└── 预算充足
选择 Kubeflow 的场景:
├── 已有 Kubernetes 基础设施
├── 需要完整的 ML 平台
├── 团队有运维能力
└── 大规模生产环境
MLflow 应用场景 #
1. 个人数据科学家 #
text
场景:
- 管理个人实验
- 追踪模型性能
- 复现历史结果
MLflow 方案:
- 本地文件存储
- Tracking UI 查看实验
- 自动记录功能
2. 小型团队 #
text
场景:
- 团队协作开发
- 共享实验结果
- 模型版本管理
MLflow 方案:
- 共享服务器部署
- Model Registry 管理模型
- 权限控制
3. 企业级应用 #
text
场景:
- 大规模模型管理
- 生产环境部署
- 合规审计需求
MLflow 方案:
- 高可用部署
- 企业级存储后端
- 完整审计日志
学习路径 #
text
入门阶段
├── MLflow 简介(本文)
├── 安装与配置
└── 快速开始
基础阶段
├── 实验跟踪
├── 模型管理
└── 项目打包
进阶阶段
├── 模型注册中心
├── 模型部署
└── 高级配置
实战阶段
├── PyTorch 集成
├── Scikit-learn 集成
└── 生产环境部署
下一步 #
现在你已经了解了 MLflow 的基本概念,接下来学习 安装与配置,开始搭建你的 MLflow 环境!
最后更新:2026-04-04