后端存储

后端存储是 MLflow Tracking 中的一个核心组件,MLflow 在其中存储 运行 和实验的元数据,例如:

  • 运行 ID

  • 开始 & 结束时间

  • 参数

  • 指标

  • 代码版本(仅当你从 MLflow 项目 启动运行时)。

  • 源文件名(仅当你从 MLflow 项目 启动运行时)。

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

配置后端存储

默认情况下,MLflow 将元数据存储在 ./mlruns 目录中的本地文件中,但 MLflow 也可以将元数据存储到数据库中。您可以通过以下任一方法将所需的 跟踪 URI 传递给 MLflow 来配置位置:

  • 设置 MLFLOW_TRACKING_URI 环境变量。

  • 在你的代码中调用 mlflow.set_tracking_uri()

  • 如果你正在运行一个 追踪服务器 ,你可以在启动服务器时设置 tracking_uri 选项,例如 mlflow server --backend-store-uri sqlite:///mydb.sqlite

继续阅读下一节以了解支持的跟踪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],或 快速入门 以轻松开始使用 Databricks 社区版的托管 MLflow。

重要

为了使用 模型注册表 功能,您必须使用基于数据库的存储来运行您的服务器。更多信息请参见 此常见问题解答

重要

mlflow server 在面对数据库模式过时的数据库后端存储时将会失败。为防止这种情况,请使用 mlflow db upgrade [db_uri] 将您的数据库模式升级到最新支持的版本。模式迁移可能导致数据库停机,在大数据库上可能需要更长时间,并且不能保证是事务性的。在运行 mlflow db upgrade 之前,您应始终备份您的数据库 - 请查阅您的数据库文档以获取备份说明。

备注

在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

文件存储性能

MLflow 会自动尝试使用 LibYAML 绑定,如果它们已经安装。然而,如果你在使用 文件存储 后端时注意到任何性能问题,这可能意味着你的系统上没有安装 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