跳至主内容

将MLflow模型部署到Amazon SageMaker

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

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

工作原理

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

MLflow通过代表您从MLflow模型构建Docker镜像来自动化这一流程。随后,它将镜像推送到Elastic Container Registry (ECR),并使用该镜像创建SageMaker端点。它还会将模型工件上传到S3存储桶,并配置端点从该处下载模型。

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

note

除了通用的pyfunc部署方式(默认)外,SageMaker部署还支持mleap风格。对于这种部署风格,端点仅接受split方向的JSON序列化pandas数据框,例如data = pandas_df.to_json(orient='split')。该格式通过使用值为application/jsonContent-Type请求头来指定。

将模型部署到SageMaker端点

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

步骤 0: 准备工作

安装工具

如果尚未安装,请确保安装以下工具:

权限设置

正确设置AWS账户和权限。您需要一个具有创建SageMaker终端节点、访问S3存储桶和使用ECR存储库权限的IAM角色。 该角色还应可由执行部署的用户承担。了解更多关于此设置的信息,请参阅 Use an IAM role in the AWS CLI

创建一个MLflow模型

在部署之前,您必须拥有一个MLflow模型。如果没有,您可以按照MLflow Tracking Quickstart创建一个示例scikit-learn模型。 请记住记下模型URI,例如runs://(如果您在MLflow Model Registry中注册了模型,则可能是models://)。

步骤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

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

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

或者,您可以使用官方MLflow Docker镜像创建自定义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。

实用链接

故障排除