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