写点什么

使用 Amazon SageMaker Operator 简化 Kubernetes 上的机器学习推理

  • 2020 年 4 月 05 日
  • 本文字数:3999 字

    阅读完需:约 13 分钟

使用 Amazon SageMaker Operator 简化 Kubernetes 上的机器学习推理

适用于 Kubernetes 的 Amazon SageMaker Operator使您可以用 SageMaker 托管的终端节点增强现有的 Kubernetes 集群。


创建一个可靠、高效的机器学习推理服务需要做很多的投入。拿一个基于 XGBoost 模型的服务来说,开发人员需要创建一个完善的应用程序,例如通过 Flask 来加载模型,然后运行终端节点。创建这个应用程序,开发人员需要考虑队列管理、无故障部署以及重新加载新训练的模型等等事宜。应用开发好后被打包成容器镜像,然后推送到镜像仓库。Kubernetes 从镜像仓库拉取该镜像在集群上进行部署,部署好后才可以对外提供服务。这些步骤需要您的数据科学家从事与提高模型准确性无关的任务,或引进 devops 工程师来做这些工作。这些过程加到开发计划中,必然会需要更多的时间进行服务迭代。


使用 SageMaker Operator,开发人员只需要编写 yaml 文件来指定所保存模型的 S3 存储位置,而实时预测通过安全的终端节点即可使用。重新配置终端节点与更新 yaml 文件一样简单。除了使用简单之外,该服务还具有以下特征:


  • 多模型终端节点 – 托管几十个或更多模型可能会给配置带来困难,并且会导致很多机器以低利用率运行。多模型终端节点通过动态加载用于服务的模型构件来设置一个实例

  • 弹性推理 – 在拆分开的 GPU 上运行较小的工作负载,您可以以较低的成本部署该 GPU

  • 高利用率和动态 Auto Scaling – 终端节点可以以 100% 的利用率运行,并基于您定义的自定义指标(如每秒钟的调用数量)来添加副本。或者,可以按预定义的客户端性能指标配置自动扩展

  • 可用区转移 – 如果发生中断,Amazon SageMaker 会将您的终端节点自动移动到 VPC 内的另一个可用区

  • A/B 测试– 设置多个模型,并导向与您在单个终端节点上设置的量成比例的流量

  • 安全性 – 终端节点使用 HTTPS 创建,可以配置为在私有 VPC(没有互联网出口)中运行并通过 AWS PrivateLink 访问

  • 合规性准备 – Amazon SageMaker 已经过认证,符合 HIPAA、PCI DSS 和 SOC (1, 2, 3) 规则和法规


AWS 为 Kubernetes 开发的 SageMaker Operator 将以上这些特性打包到一起。SageMaker Operator 大大缩短模型到应用的时间,并减少创建和维护生产环境的人力。这可以使单独使用 EKS 或 EC2 的总拥有成本下降 90%。


本博文演示如何设置适用于 Kubernetes 的 Amazon SageMaker Operator,以完全从 kubectl 为预先训练的 XGBoost 模型创建和更新终端节点。该解决方案包含以下步骤:


  • 创建 IAM Amazon SageMaker 角色,提供服务您的模型所需的 Amazon SageMaker 权限

  • 准备 YAML 文件,以将您的模型部署到 Amazon SageMaker

  • 将您的模型部署到 Amazon SageMaker

  • 查询终端节点以获取预测

  • 对部署的模型执行最终的一致性更新


先决条件

本博文假设您拥有以下先决条件:


  • 一个 Kubernetes 集群

  • 您的集群上已安装 Amazon SageMaker Operator

  • 一个您可以部署的 XGBoost 模型


有关将 Operator 安装到 Amazon EKS 集群上的信息,请参阅现已推出适用于 Kubernetes 的 Amazon SageMaker Operator。您可以自带 XGBoost 模型,但本教程使用前面所述博文中的现有模型。


创建一个 Amazon SageMaker 执行角色

Amazon SageMaker 需要一个 IAM 角色,它可以承担该角色来服务您的模型。如果您还没有该角色,请使用下面的 bash 代码创建一个:


Bash


export assume_role_policy_document='{  "Version": "2012-10-17",  "Statement": [{    "Effect": "Allow",    "Principal": {      "Service": "sagemaker.amazonaws.com"    },    "Action": "sts:AssumeRole"  }]}'aws iam create-role --role-name <execution role name> \    --assume-role-policy-document \    "$assume_role_policy_document"aws iam attach-role-policy --role-name <execution role name> \    --policy-arn \    arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
复制代码


将 替换为适用的角色名称。这将创建一个 IAM 角色,Amazon SageMaker 可以使用该角色来服务您的模型。


准备您的托管部署

Operator 提供名为 HostingDeployment自定义资源定义 (CRD)。您可以使用 HostingDeployment 在 Amazon SageMaker 托管上配置您的模型部署。


要准备您的托管部署,请使用以下内容创建名为 hosting.yaml 的文件:


YAML


apiVersion: sagemaker.aws.amazon.com/v1kind: HostingDeploymentmetadata:  name: hosting-deploymentspec:  region: us-east-2  productionVariants:    - variantName: AllTraffic      modelName: xgboost-model      initialInstanceCount: 1      instanceType: ml.r5.large      initialVariantWeight: 1  models:    - name: xgboost-model      executionRoleArn: SAGEMAKER_EXECUTION_ROLE_ARN      containers:        - containerHostname: xgboost          modelDataUrl: s3://BUCKET_NAME/model.tar.gz          image: 825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
复制代码


SAGEMAKER_EXECUTION_ROLE_ARN 替换为您在上一步中创建的执行角色的 ARN。将 BUCKET_NAME 替换为包含模型的存储桶。


确保存储桶区域 HostingDeployment 区域和映像 ECR 区域一致。


将您的模型部署到 Amazon SageMaker

您现在可以通过运行 kubectl apply -f hosting.yaml 来启动部署。请参阅以下代码:


Bash


$ kubectl apply -f hosting.yamlhostingdeployment.sagemaker.aws.amazon.com/hosting-deployment created
复制代码


您可以使用 kubectl get hostingdeployments 跟踪部署状态。请参阅以下代码:


Bash


$ kubectl get hostingdeploymentsNAME                 STATUS     SAGEMAKER-ENDPOINT-NAMEhosting-deployment   Creating   hosting-deployment-38ecac47487611eaa81606fc3390e6ba
复制代码


您的模型终端节点最多可能需要十五分钟才能部署好。 您可以使用以下命令查看状态。 终端节点达到 InService 状态后便可以立即用于查询。


Bash


$ kubectl get hostingdeploymentsNAME                 STATUS      SAGEMAKER-ENDPOINT-NAMEhosting-deployment   InService   hosting-deployment-38ecac47487611eaa81606fc3390e6ba
复制代码


查询终端节点

终端节点投入使用后,您可以测试它是否能与以下示例代码结合使用:


Bash


$ aws sagemaker-runtime invoke-endpoint \  --region us-east-2 \  --endpoint-name SAGEMAKER-ENDPOINT-NAME \  --body $(seq 784 | xargs echo | sed 's/ /,/g') \  >(cat) \  --content-type text/csv > /dev/null
复制代码


bash 命令使用 AWS CLI 与 HTTPS 终端节点连接。您创建的模型基于 MNIST 位数据集,您的预测工具会读取图像中的数字。当您进行此调用时,它会以 CSV 格式发送包含 784 项特征的推理负载,这些特征代表图像中的像素。您将在负载中看到模型所认为的预测数字。请参阅以下代码:


Bash


$ aws sagemaker-runtime invoke-endpoint \  --region us-east-2 \  --endpoint-name hosting-deployment-38ecac47487611eaa81606fc3390e6ba \  --body $(seq 784 | xargs echo | sed 's/ /,/g') \  >(cat) \  --content-type text/csv > /dev/null8.0
复制代码


此代码确认您的终端节点已启动并在运行。


最终一致的更新

部署好模型后,您可以对 Kubernetes YAML 进行更改,SageMaker Operator 将更新终端节点。这些更新将以最终一致的方式传播到 Amazon SageMaker。这样一来,您便可以以声明式的方式配置您的终端节点,并让 SageMaker Operator 处理细节。


证明这一点,您可以将模型的实例类型从 ml.r5.large 更改为 ml.c5.2xlarge。请执行以下步骤:


  1. hosting.yaml 中的实例类型修改为 ml.c5.2xlarge。请参阅以下代码:

  2. YAML


   apiVersion: sagemaker.aws.amazon.com/v1   kind: HostingDeployment   metadata:     name: hosting-deployment   spec:     region: us-east-2     productionVariants:       - variantName: AllTraffic         modelName: xgboost-model         initialInstanceCount: 1         instanceType: ml.c5.2xlarge         initialVariantWeight: 1     models:       - name: xgboost-model         executionRoleArn: SAGEMAKER_EXECUTION_ROLE_ARN         containers:           - containerHostname: xgboost             modelDataUrl: s3://BUCKET_NAME/model.tar.gz             image: 825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest
复制代码


  1. 将更改应用至 Kubernetes 集群。请参阅以下代码:

  2. Bash


   $ kubectl apply -f hosting.yaml   hostingdeployment.sagemaker.aws.amazon.com/hosting-deployment configured
复制代码


  1. 获取托管部署的状态。该状态将显示为正在更新,然后在准备好以后更改为 InService。请参阅以下代码:

  2. Bash


   $ kubectl get hostingdeployments   NAME                 STATUS     SAGEMAKER-ENDPOINT-NAME   hosting-deployment   Updating   hosting-deployment-38ecac47487611eaa81606fc3390e6ba
复制代码


终端节点在整个更新过程中保持实时状态且完全可用。有关更多信息和其他示例,请参阅 GitHub 存储库


清理

要删除终端节点而不会产生更多使用费用,请运行 kubectl delete -f hosting.yaml。请参阅以下代码:


Bash


$ kubectl delete -f hosting.yamlhostingdeployment.sagemaker.aws.amazon.com "hosting-deployment" deleted
复制代码


结论

本博文演示了适用于 Kubernetes 的 Amazon SageMaker Operator 如何支持实时推理。它还支持训练和超参数调整。


希望您能分享您的经验和反馈,或者提交其他示例 YAML 规范或 Operator 改进信息。您可以分享您使用适用于 Kubernetes 的 Amazon SageMaker Operator 的相关情况,您可以在 AWS 论坛中的 Amazon SageMaker 的板块下发布帖子,在 GitHub 存储库中创建问题,或发送给您的 AWS Support 联系人并由其代为转达。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/simplify-machine-learning-inference-on-kubernetes-with-amazon-sagemaker-operators/


2020 年 4 月 05 日 08:00230

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

区块链社交即时通许系统开发,区块链社交app开发价格

13530558032

接口测试学习之json

测试人生路

json 接口测试

媲美物理机,裸金属云主机如何轻松应对11.11大促

京东科技开发者

云计算 容器 服务器 云主机

公众号高频被调整,它不是企业生产文章的机器

Linkflow

客户数据平台 CDP 私域流量

万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)

是龙台呀

架构 AQS ReentrantLock JUC CLH

DataPipeline CPO 陈雷:实时数据融合之法,便捷可管理

DataPipeline数见科技

数据融合

DataPipeline CTO 陈肃:构建批流一体数据融合平台的一致性语义保证

DataPipeline数见科技

数据融合

数字货币交易所开发有哪些模式?区块链交易平台

13530558032

DataPipeline CPO 陈雷:实时数据融合之法,稳定高容错

DataPipeline数见科技

数据融合

合约跟单源码案例,合约跟单模式开发

13530558032

微信官方将打击恶意营销号:自媒体不可过度消费粉丝

石头IT视角

MySQL主从数据库没有同步怎么办?

冰河

MySQL 数据库 分布式 微服务

深入浅出 Go - sync.Once 源码分析

helbing

Go 语言

强化学习入门必看之强化学习导识

Alocasia

人工智能 学习

区块链数字钱包系统开发方案,区块链钱包APP源码

13530558032

前嗅教你大数据——史上最全代理IP服务商对比

前嗅大数据

大数据 数据采集 动态代理 静态代理 代理IP

深入浅出 Go - sync.Map 源码分析

helbing

Go 语言

UNISKIN COO Kevin|营销数字化:数据沉淀和数据系统化运营一定要趁早!

Linkflow

营销数字化 客户数据平台 CDP

11月阿里Spring全家桶+MQ微服务架构笔记:源码+实战

小Q

Java 学习 程序员 面试 微服务

快进收藏吃灰!字节跳动大佬用最通俗方法讲明白了红黑树算法

小Q

Java 学习 架构 面试 算法

一致性hash算法

天涯若海

架构师训练营第九周作业

我是谁

极客大学架构师训练营

DataPipeline CPO 陈雷:实时数据融合之道,博观约取,价值驱动

DataPipeline数见科技

数据融合

Springboot过滤器和拦截器详解及使用场景

996小迁

Java 编程 架构 面试 springboot

Istio 1.8 发布——用户至上的选择

Jimmy Song

开源 云原生 Service Mesh istio

深入理解h2和r2dbc-h2

程序那些事

响应式编程 R2DBC 程序那些事 响应式架构 r2dbc-h2

《JAVA多线程设计模式》.pdf

田维常

多线程

架构师训练营第九周作业

_

极客大学架构师训练营 第九周作业

面试官问:如何排除GC引起的CPU飙高?我脱口而出5个步骤

田维常

cpu飙满

阿里达摩院副院长亲自所写Java架构29大核心知识体系+大厂面试真题+微服务

Java架构追梦

Java 学习 阿里巴巴 架构 面试

Scrum指南这么改,我看要完蛋!

华为云开发者社区

Scrum 敏捷 改版

如何行之有效地参与开源?

如何行之有效地参与开源?

使用 Amazon SageMaker Operator 简化 Kubernetes 上的机器学习推理-InfoQ