后端存储
后端存储是 MLflow 的核心组件,用于存储运行 (Runs)、模型、跟踪 (traces) 和实验的元数据,例如:
- 运行 ID
- 模型 ID
- 跟踪 ID
- 标签
- 开始和结束时间
- 参数
- 指标
大型模型工件(如模型权重文件)存储在工件存储中。
后端存储类型
关系数据库 (默认)
MLflow 支持通过 SQLAlchemy 的不同数据库,包括 sqlite、postgresql、mysql 和 mssql。此选项通过索引提供更好的性能,并且比文件系统后端更容易扩展以处理大量数据。
SQLite 是默认的后端存储。当您在未指定后端的情况下启动 MLflow 时,它会在当前目录中自动创建并使用 sqlite:///mlflow.db。要使用其他数据库(如 PostgreSQL),请在启动 MLflow 时指定 --backend-store-uri(例如,--backend-store-uri postgresql://...)。
本地文件系统 (旧版)
基于文件的后端将元数据存储在 ./mlruns 目录的本地文件中。这是 MLflow 早期版本的默认后端,但为向后兼容仍然支持。
要使用基于文件的存储,请在启动服务器时指定 --backend-store-uri ./mlruns,或设置 MLFLOW_TRACKING_URI=./mlruns。
文件系统后端处于“只读(Keep-the-Light-On)”模式,不再接收新功能更新。我们强烈建议使用数据库后端(现在是默认设置),以获得更好的性能和可靠性。
配置后端存储
您可以通过以下任一方法将所需的跟踪 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 支持mysql、mssql、sqlite和postgresql方言。有关更多详细信息,请参阅SQLAlchemy 数据库 URI。 - HTTP 服务器(指定为
https://my-server:5000),这是托管MLflow 跟踪服务器的服务器。 - Databricks 工作区(指定为
databricks或databricks://<profileName>,这是Databricks CLI 配置文件)。请参阅从 Databricks 外部访问 MLflow 跟踪服务器 [AWS] [Azure]。
2023 年 9 月,我们将运行中记录参数的最大长度从 500 增加到 8k(但内部将参数值最大长度限制为 6000)。mlflow/2d6e25af4d3e_increase_max_param_val_length 是一个不可逆转的迁移脚本,它将现有数据库的上限提高到 8k。如果您想升级,请小心,并在升级前备份您的数据库。
删除行为
为了允许 MLflow 运行恢复,当一个运行被删除时,其元数据和工件不会自动从后端存储或工件存储中移除。为此提供了 mlflow gc CLI,用于永久删除已删除运行的元数据和工件。
SQLAlchemy 选项
您可以通过环境变量注入一些SQLAlchemy 连接池选项。
| MLflow 环境变量 | SQLAlchemy QueuePool 选项 |
|---|---|
MLFLOW_SQLALCHEMYSTORE_POOL_SIZE | pool_size |
MLFLOW_SQLALCHEMYSTORE_POOL_RECYCLE | pool_recycle |
MLFLOW_SQLALCHEMYSTORE_MAX_OVERFLOW | max_overflow |
MySQL SSL 选项
当连接到需要 SSL 证书的 MySQL 数据库时,您可以设置以下环境变量:
# 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 服务器:
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 上,您可以使用系统包管理器轻松安装它:
# On Ubuntu/Debian
apt-get install libyaml-cpp-dev libyaml-dev
# On macOS using Homebrew
brew install yaml-cpp libyaml
安装 LibYAML 后,您需要重新安装 PyYAML:
# Reinstall PyYAML
pip --no-cache-dir install --force-reinstall -I pyyaml
我们通常建议使用数据库后端以获得更好的性能。