跳到主要内容

后端存储

后端存储是 MLflow 的核心组件,用于存储 Run、模型、跟踪和实验的元数据,例如

  • Run ID
  • 模型 ID
  • 跟踪 ID
  • 标签
  • 开始和结束时间
  • 参数
  • 指标

大型模型工件(如模型权重文件)存储在 工件存储中。

后端存储的类型

关系数据库(默认

MLflow 通过 SQLAlchemy 支持不同的数据库,包括 sqlitepostgresqlmysqlmssql。此选项通过索引提供更好的性能,并且比文件系统后端更容易扩展到更大的数据量。

SQLite 是默认的后端存储。当您在未指定后端的情况下启动 MLflow 时,它会在当前目录中自动创建并使用 sqlite:///mlflow.db。要使用 PostgreSQL 等其他数据库,请在启动 MLflow 时指定 --backend-store-uri(例如 --backend-store-uri postgresql://...)。

本地文件系统(遗留

基于文件的后端将元数据存储在 ./mlruns 目录的本地文件中。这是早期 MLflow 版本的默认后端,但仍受支持以向后兼容。

要使用基于文件的存储,请在启动服务器时指定 --backend-store-uri ./mlruns,或设置 MLFLOW_TRACKING_URI=./mlruns

即将弃用

文件系统后端处于“保持现状 (KTLO)”模式,不再接收新的功能更新。我们强烈建议使用数据库后端(现在是默认设置)以获得更好的性能和可靠性。

配置后端存储

您可以通过以下两种方法之一将所需的跟踪 URI 传递给 MLflow 来配置不同的后端存储:

  • 设置 MLFLOW_TRACKING_URI 环境变量。
  • 在代码中调用 mlflow.set_tracking_uri()
  • 如果您正在运行 跟踪服务器,可以在启动服务器时设置 --backend-store-uri 选项,例如 mlflow server --backend-store-uri postgresql://...

继续阅读下一节了解支持的跟踪 URL 格式。同时访问此指南了解如何为您的工作流程正确设置后端存储。

支持的存储类型

MLflow 支持以下类型的跟踪 URI 用于后端存储:

  • 本地文件路径(指定为 file:/my/local/dir),数据直接存储在代码执行的系统磁盘上的本地位置。
  • 数据库,编码为 <dialect>+<driver>://<username>:<password>@<host>:<port>/<database>。MLflow 支持方言 mysqlmssqlsqlitepostgresql。有关更多详细信息,请参阅 SQLAlchemy 数据库 URI
  • HTTP 服务器(指定为 https://my-server:5000),这是一个托管 MLflow 跟踪服务器的服务器。
  • Databricks 工作区(指定为 databricksdatabricks://<profileName>,即 Databricks CLI 配置文件)。请参阅从 Databricks 外部访问 MLflow 跟踪服务器 [AWS] [Azure]
数据库要求

数据库支持的存储要求

使用支持数据库的存储时,请注意:

  • 模型注册表集成模型注册表功能需要支持数据库的存储。有关更多信息,请参阅此常见问题解答

  • Schema 迁移mlflow server 在遇到过时的 Schema 的数据库上会失败。在启动服务器之前,请务必运行 mlflow db upgrade [db_uri] 来升级您的数据库 Schema。Schema 迁移可能导致数据库停机,并且在大型数据库上可能需要更长时间。运行迁移前,请务必备份您的数据库。

参数限制

2023 年 9 月,我们将 Run 中记录的参数的最大长度从 500 增加到 8k(但我们在内部将参数值的最大长度限制为 6000)。mlflow/2d6e25af4d3e_increase_max_param_val_length 是一个不可逆的迁移脚本,它将现有数据库中的上限增加到 8k。如果您想升级,请务必小心,并在升级前备份数据库。

删除行为

为了允许 MLflow Run 被恢复,当一个 Run 被删除时,其元数据和工件不会自动从后端存储或工件存储中删除。提供了 mlflow gc CLI 用于永久删除已删除 Run 的 Run 元数据和工件。

SQLAlchemy 选项

您可以使用环境变量注入一些 SQLAlchemy 连接池选项

MLflow 环境变量SQLAlchemy QueuePool 选项
MLFLOW_SQLALCHEMYSTORE_POOL_SIZEpool_size
MLFLOW_SQLALCHEMYSTORE_POOL_RECYCLEpool_recycle
MLFLOW_SQLALCHEMYSTORE_MAX_OVERFLOWmax_overflow

MySQL SSL 选项

当连接到需要 SSL 证书的 MySQL 数据库时,您可以设置以下环境变量:

bash
# Path to SSL CA certificate file
export MLFLOW_MYSQL_SSL_CA=/path/to/ca.pem

# Path to SSL client certificate file (if needed)
export MLFLOW_MYSQL_SSL_CERT=/path/to/client-cert.pem

# Path to SSL client key file (if needed)
export MLFLOW_MYSQL_SSL_KEY=/path/to/client-key.pem

然后使用您的 MySQL URI 启动 MLflow 服务器

bash
mlflow server --backend-store-uri="mysql+pymysql://username@hostname:port/database" --default-artifact-root=s3://your-bucket --host=0.0.0.0 --port=5000

这些环境变量将用于配置到 MySQL 服务器的 SSL 连接。

文件存储性能

如果已安装 LibYAML 绑定,MLflow 将自动尝试使用它们。但是,如果您在使用文件存储后端时遇到任何性能问题,这可能意味着您的系统上未安装 LibYAML。在 Linux 或 Mac 上,您可以使用系统包管理器轻松安装它:

bash
# On Ubuntu/Debian
apt-get install libyaml-cpp-dev libyaml-dev

# On macOS using Homebrew
brew install yaml-cpp libyaml

安装 LibYAML 后,需要重新安装 PyYAML

bash
# Reinstall PyYAML
pip --no-cache-dir install --force-reinstall -I pyyaml
注意

我们通常建议使用数据库后端以获得更好的性能。