将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。
除了通用的pyfunc
部署方式(默认)外,SageMaker部署还支持mleap
风格。对于这种部署风格,端点仅接受split
方向的JSON序列化pandas数据框,例如data = pandas_df.to_json(orient='split')
。该格式通过使用值为application/json
的Content-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。
实用链接
- MLflow 快速入门第二部分:使用 Amazon SageMaker 部署模型 - 本分步教程演示了如何通过 Databricks 笔记本中的 MLflow Python API 将模型部署到 SageMaker。
- 使用MLflow和Amazon SageMaker管理您的机器学习生命周期 - 本综合教程涵盖将MLflow整个生命周期与SageMaker集成的全过程,从模型训练到部署。