架构概览
MLflow 的架构简洁而灵活。无论您的需求是本地独立开发还是生产规模部署,都可以选择适合您需求的组件和后端选项。
核心组件
MLflow SDK
MLflow 提供多种语言(Python、TypeScript、Java、R)的客户端 SDK,用户通过这些 SDK 与后端进行交互。
后端存储
一个数据库(或模拟它的文件系统),用于存储实验、运行、追踪等的元数据。MLflow 通过 SQLAlchemy 支持不同的数据库,包括 postgresql、mysql、sqlite 和 mssql。有关后端存储的更多配置,请参阅 后端存储。
Artifact 存储
Artifact 存储用于持久化每次运行的(通常很大的)Artifact,例如模型权重(如序列化的 scikit-learn 模型)、图像(如 PNG 文件)、模型和数据文件(如 Parquet 文件)。这些文件太大,无法存储在跟踪后端中,并且访问频率通常低于元数据,因此更适合存储在廉价的对象存储中,例如 Amazon S3。有关支持的存储选项和低级配置,请参阅 Artifact 存储。
跟踪服务器
MLflow 跟踪服务器是一个 FastAPI 服务器,提供用于访问后端和 Artifact 存储的 REST API,并托管 MLflow UI。对于本地开发,此服务器是可选的,因为 MLflow SDK 可以直接与本地数据库和文件系统进行交互。然而,对于团队开发,该服务器至关重要,并提供了诸如访问控制等功能。有关如何配置服务器,请阅读 跟踪服务器。
常见设置
通过正确配置这些组件,您可以创建一个适合您团队开发工作流程的 MLflow 跟踪环境。下图和表格展示了几种 MLflow 跟踪环境的常见设置。
![]()
| 1. 本地主机(默认) | 2. 本地跟踪与本地数据库 | 3. 远程跟踪与 MLflow 跟踪服务器 | |
|---|---|---|---|
| 场景 | 独立开发 | 独立开发 | 团队开发 |
| 用例 | 默认情况下,MLflow 将每次运行的元数据和 Artifact 记录到本地目录 mlruns 中。这是开始使用 MLflow 跟踪的最简单方法,无需设置任何外部服务器、数据库和存储。 | 数据库后端比默认文件后端提供更好的性能和可靠性。MLflow 客户端 SDK 与 SQLAlchemy 兼容的数据库(例如 SQLite、PostgreSQL、MySQL)进行接口,以管理元数据,并将 Artifact 存储到本地文件系统。 | MLflow 跟踪服务器 作为元数据和 Artifact 的远程访问代理。这对于团队开发场景特别有用,在这些场景中,您希望将 Artifact 和实验元数据存储在具有适当访问控制的共享位置。 |
| 设置 | 无需额外设置(默认)。 | 通过 | 请参阅 Docker Compose 设置。或者,您可以使用流行的云提供商的 托管 MLflow 服务,以避免维护开销。 |