自托管 MLflow
世界上最不受供应商限制的 MLOps/LLMOps 平台。
MLflow 是完全开源的。成千上万的用户和组织运行自己的 MLflow 实例以满足他们的特定需求。由于是开源的并受到流行的云提供商的信任,MLflow 是担心供应商锁定的团队/组织的最佳选择。
从 MLflow 3.7.0 开始,默认跟踪后端已从基于文件的存储 (./mlruns) 更改为 SQLite 数据库 (sqlite:///mlflow.db),以提高性能和可靠性。
现有用户:如果您在 ./mlruns 中有现有数据,MLflow 将自动检测并继续使用它。无需任何操作。
新用户:新的 MLflow 服务器默认使用 SQLite。如需使用基于文件的存储,请在启动服务器时设置 MLFLOW_TRACKING_URI=./mlruns 或指定 --backend-store-uri ./mlruns。
有关更多详细信息和迁移指南,请参阅 GitHub Issue #18534。
最快路径:运行 mlflow 命令
启动 MLflow 服务器最简单的方法是在终端中运行 mlflow CLI 命令。这适用于个人使用或小型团队。
首先,使用以下命令安装 MLflow
pip install mlflow
然后,使用以下命令启动服务器
mlflow server --port 5000
这将以 SQLite 作为后端存储(默认设置)在 https://:5000 启动服务器和 UI。您可以通过设置跟踪 URI 将客户端连接到服务器
import mlflow
mlflow.set_tracking_uri("https://:5000")
# Start tracking!
# Open https://:5000 in your browser to view the UI.
现在,您可以开始您的实验了!
对于生产部署或自定义后端配置,请参阅 后端存储 文档。
其他部署选项
Docker Compose
MLflow 仓库在 docker-compose/ 中包含一个可立即运行的 Compose 项目,用于配置 MLflow、PostgreSQL 和 MinIO。
git clone https://github.com/mlflow/mlflow.git
cd docker-compose
cp .env.dev.example .env
docker compose up -d
请在此处阅读有关 docker compose 包的更多详细信息和配置选项的说明:此处。
Kubernetes
要在 Kubernetes 上部署,请使用 Bitnami 或社区 Helm Charts 提供的 MLflow Helm chart。
云服务
如果您正在寻找无需维护成本的生产级部署,MLflow 也可作为流行云提供商的托管服务。
架构
从宏观上看,MLflow 由以下组件组成
- 跟踪服务器:提供 MLflow UI 和 API 的轻量级 FastAPI 服务器。
- 后端存储:后端存储是关系数据库(或文件系统),用于存储实验、运行、跟踪等的元数据。
- 工件存储:工件存储负责存储模型权重、图像等大型工件。
每个组件都被设计成可插拔的,因此您可以根据需要进行定制。例如,您可以从使用 SQLite 后端和本地文件系统存储工件的单主机模式开始。要扩展,您可以将后端存储切换到 PostgreSQL 集群并将工件存储指向 S3、GCS 或 Azure Blob Storage 等云存储。
要了解有关架构和可用后端选项的更多信息,请参阅 架构。
访问控制与安全
MLflow 支持通过基本 HTTP 身份验证进行用户名/密码登录、SSO(单点登录)以及自定义身份验证插件。
MLflow 还提供内置的网络保护中间件,以保护您的跟踪服务器免受网络暴露。
需要高度安全的 MLflow 服务器?请查看 Databricks 托管 MLflow 以获得完全托管的 MLflow 服务器以及统一的治理和安全性。
常见问题解答
有关更多信息,请参阅 故障排除与常见问题解答。
使用远程跟踪服务器时,从浏览器访问 MLflow UI 可能会遇到访问被拒绝的错误。
无效的主机标头 - 检测到可能的 DNS 重新绑定攻击
此错误通常表示需要配置跟踪服务器的网络安全设置。最常见的原因是
- 主机验证:
--allowed-hosts标志限制接受哪些主机标头 - CORS 限制:
--cors-allowed-origins标志控制哪些源可以发出 API 请求
要解决此问题,请使用适当的标志配置您的跟踪服务器。例如
mlflow server --allowed-hosts "mlflow.company.com,localhost:*" \
--cors-allowed-origins "https://app.company.com"
注意:这些安全选项仅适用于默认的基于 FastAPI 的服务器 (uvicorn)。使用 Flask 直接或与 --gunicorn-opts 或 --waitress-opts 结合使用时不支持这些选项。
有关详细配置选项,请参阅 网络安全指南。