跳到主要内容

架构概述

MLflow 的架构既简单又灵活。无论您的需求是从本地独立开发到生产规模部署,您都可以选择合适的组件和后端选项来满足您的需求。

核心组件

MLflow SDK

MLflow 提供多种语言(Python、TypeScript、Java、R)的客户端 SDK,用户通过它们与后端进行交互。

后端存储

一个数据库(或模拟它的文件系统),用于存储实验、运行、跟踪等的元数据。MLflow 通过 SQLAlchemy 支持不同的数据库,包括 postgresqlmysqlsqlitemssql。有关后端存储的更多配置,请参阅 后端存储

制品存储

制品存储持久化每个运行(通常是大型)的制品,例如模型权重(例如 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 跟踪服务器充当元数据和制品的远程访问代理。这对于团队开发场景特别有用,在这些场景中,您希望将制品和实验元数据存储在具有适当访问控制的共享位置。
设置

无需额外设置(默认)。

使用 mlflow.set_tracking_uriMLFLOW_TRACKING_URI 环境变量将跟踪 URI 设置为数据库 URI(例如 sqlite:///mlflow.db)。

请参阅 Docker Compose 设置。或者,您可以使用主流云提供商的 托管 MLflow 服务来避免维护开销。