自托管 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
这将启动服务器和 UI,地址为 https://:5000,并使用 SQLite 作为后端存储(默认)。您可以通过设置跟踪 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 bundle 的更多详细信息和配置选项。
Kubernetes
要在 Kubernetes 上部署,请使用 Bitnami 或 社区 Helm Charts 提供的 MLflow Helm Chart。
云服务
如果您正在寻找无需维护成本的生产级部署,MLflow 也作为主流云提供商的托管服务提供。
架构
MLflow,从高层次来看,包含以下组件:
- 跟踪服务器:提供 MLflow UI 和 API 的轻量级 FastAPI 服务器。
- 后端存储:后端存储是关系数据库(或文件系统),用于存储实验、运行、追踪等的元数据。
- Artifact Store:Artifact Store 负责存储模型权重、图像等大型 artifact。
每个组件都设计为可插拔的,因此您可以根据需要进行自定义。例如,您可以从单主机模式开始,使用 SQLite 后端和本地文件系统来存储 artifact。要进行扩展,您可以将后端存储切换到 PostgreSQL 集群,并将 artifact 存储指向云存储,如 S3、GCS 或 Azure Blob Storage。
要了解有关架构和可用后端选项的更多信息,请参阅 架构。
访问控制与安全
MLflow 支持通过基本 HTTP 身份验证进行 用户名/密码登录、SSO(单点登录)以及 自定义身份验证插件。
MLflow 还提供内置的 网络保护 中间件,以保护您的跟踪服务器免受网络暴露。
需要高度安全的 MLflow 服务器?查看 Databricks Managed MLflow,获取具有统一治理和安全性的完全托管的 MLflow 服务器。
常见问题解答
有关更多信息,请参阅 故障排除和常见问题解答。
在使用远程跟踪服务器时,您可能会在从浏览器访问 MLflow UI 时遇到访问被拒绝的错误。
无效的 Host 头 - 检测到可能的 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 时不支持这些选项。
有关详细配置选项,请参阅 网络安全指南。