跳到主要内容

将 MLflow 模型部署到 Amazon SageMaker

Amazon SageMaker 是一项完全托管的服务,专为扩展 ML 推理容器而设计。MLflow 通过提供易于使用的命令,无需编写容器定义,从而简化了部署过程。

如果您是 MLflow 模型部署的新手,请先阅读MLflow 部署,以了解 MLflow 模型和部署的基本概念。

工作原理

SageMaker 具有一项称为自带容器 (BYOC) 的功能,该功能允许您在推理终端节点上运行自定义 Docker 容器。这些容器必须满足特定要求,例如运行公开某些 REST 终端节点的 Web 服务器、具有指定的容器入口点、设置环境变量等。编写满足这些要求的 Dockerfile 和服务脚本可能是一项繁琐的任务。

MLflow 代表您自动执行此过程,从 MLflow 模型构建 Docker 镜像。随后,它将镜像推送到 Elastic Container Registry (ECR),并使用此镜像创建 SageMaker 终端节点。它还将模型 artifact 上传到 S3 存储桶,并配置终端节点从那里下载模型。

容器提供了与本地推理服务器相同的 REST 终端节点。例如,/invocations 终端节点接受 CSV 和 JSON 输入数据并返回预测结果。有关终端节点的更多详细信息,请参阅本地推理服务器

注意

除了通用的 pyfunc 部署(默认)之外,SageMaker 部署还支持 mleap flavor。对于这种部署 flavor,终端节点仅接受采用 split 方向的 JSON 序列化 pandas DataFrame,例如 data = pandas_df.to_json(orient='split')。此格式使用 Content-Type 请求头值 application/json 进行指定。

将模型部署到 SageMaker 终端节点

本节概述了使用 MLflow CLI 将模型部署到 SageMaker 的过程。有关 Python API 参考和教程,请参阅有用链接部分。

步骤 0:准备工作

安装工具

确保已安装以下工具(如果尚未安装)

权限设置

正确设置 AWS 账户和权限。您需要一个拥有创建 SageMaker 终端节点、访问 S3 存储桶和使用 ECR 仓库权限的 IAM 角色。执行部署的用户也应该能够代入此角色。有关此设置的更多信息,请参阅在 AWS CLI 中使用 IAM 角色

创建 MLflow 模型

在部署之前,您必须有一个 MLflow 模型。如果您没有,可以按照MLflow Tracking 快速入门创建一个示例 scikit-learn 模型。请记住记下模型 URI,例如 runs:/<run_id>/<artifact_path>(如果您已在MLflow 模型注册表中注册模型,则为 models:/<model_name>/<model_version>)。

步骤 1:本地测试模型

建议在将模型部署到生产环境之前先在本地测试模型。mlflow deployments run-local 命令将模型部署在具有相同镜像和环境配置的 Docker 容器中,这使得它成为部署前测试的理想选择。

mlflow deployments run-local -t sagemaker -m runs:/<run_id>/model -p 5000

然后,您可以通过向终端节点发送 POST 请求来测试模型

curl -X POST -H "Content-Type:application/json; format=pandas-split" --data '{"columns":["a","b"],"data":[[1,2]]}' http://localhost:5000/invocations

步骤 2:构建 Docker 镜像并推送到 ECR

步骤 2:构建 Docker 镜像并推送到 ECR

$ mlflow sagemaker build-and-push-container  -m runs:/<run_id>/model

mlflow sagemaker build-and-push-container 命令构建与 SageMaker 兼容的 Docker 镜像并将其上传到 ECR。

步骤 3:部署到 SageMaker 终端节点

mlflow deployments create 命令将模型部署到 Amazon SageMaker 终端节点。MLflow 将 Python 函数模型上传到 S3 并自动启动一个提供该模型的 Amazon SageMaker 终端节点。

可以使用各种命令行选项来自定义部署,例如实例类型、数量、IAM 角色等。有关选项的完整列表,请参阅CLI 参考

$ mlflow deployments create -t sagemaker -m runs:/<run_id>/model \
-C region_name=<your-region> \
-C instance-type=ml.m4.xlarge \
-C instance-count=1 \
-C env='{"DISABLE_NGINX": "true"}''

API 参考

您有两种将模型部署到 SageMaker 的选项:使用 CLI 或 Python API。

有用链接

故障排除