将 MLflow 模型部署到 Kubernetes
使用 MLServer 作为推理服务器
默认情况下,MLflow 部署使用 Flask,这是一个广泛使用的 Python WSGI Web 应用程序框架,用于提供推理端点。然而,Flask 主要设计用于轻量级应用程序,可能不适合大规模生产用例。为了解决这一差距,MLflow 集成了 MLServer 作为替代部署选项,该选项在 Kubernetes 原生框架中用作核心 Python 推理服务器,如 Seldon Core 和 KServe <https://kserve.github.io/website/>`_(以前称为 KFServing)。使用 MLServer,您可以利用 Kubernetes 的可扩展性和可靠性来大规模服务您的模型。有关 Flask 和 MLServer 之间的详细比较,以及为什么 MLServer 是 ML 生产用例的更好选择,请参阅 :ref:`服务框架 <serving_frameworks>。
为 MLflow 模型构建 Docker 镜像
将 MLflow 模型部署到 Kubernetes 的关键步骤是构建一个包含 MLflow 模型和推理服务器的 Docker 镜像。这可以通过 build-docker
CLI 命令或 Python API 完成。
mlflow models build-docker -m runs:/<run_id>/model -n <image_name> --enable-mlserver
如果你想使用基础的 Flask 服务器而不是 MLServer,请移除 --enable-mlserver
标志。关于其他选项,请参阅 build-docker 命令文档。
import mlflow
mlflow.models.build_docker(
model_uri=f"runs:/{run_id}/model",
name="<image_name>",
enable_mlserver=True,
)
如果你想使用基础的 Flask 服务器而不是 MLServer,请移除 enable_mlserver=True
。对于其他选项,请参阅 mlflow.models.build_docker 函数文档。
重要
自 MLflow 2.10.1 起,Docker 镜像规范已更改,以减小镜像大小并提高性能。最显著的是,除了 spark
等 Java 模型风格外,Java 不再安装在镜像中。如果您需要为其他风格安装 Java,例如使用 SparkML 的自定义 Python 模型,请指定 --install-java
标志以强制安装 Java。
部署步骤
请参考以下合作伙伴文档,了解如何使用 MLServer 将 MLflow 模型部署到 Kubernetes。您还可以按照下面的教程学习端到端流程,包括环境设置、模型训练和部署。
教程
你也可以在以下教程中学习如何在 MLflow 中训练模型并部署到 Kubernetes: