免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

AWS 将 Amazon SageMaker Opeartors 正式引入 Kubernetes,开发者可轻松训练模型

  • 2019-12-06
  • 本文字数:6415 字

    阅读完需:约 21 分钟

AWS将Amazon SageMaker Opeartors正式引入Kubernetes,开发者可轻松训练模型

美国时间 2019 年 12 月 2 日,AWS 在 AWS re:Invent 大会现场宣布将 Amazon SageMaker Opeartors 正式引入 Kubernetes,这项新功能将帮助使用 Kubernetes 的开发人员与数据科学家轻松在 Amazon SageMaker 当中训练、调整以及部署机器学习模型。


客户现在可以在 Kubernetes 集群上安装这些 Amazon SageMaker Operators,并通过 Kubernetes API 以及命令行 Kubernetes 工具(例如「kubectl」)以本地方式创建 Amazon SageMaker 任务。


目前,众多 AWS 客户都在使用 Amazon Elastic Kubernetes 服务(EKS)等托管服务,旨在借助开源通用容器编排系统 Kubernetes 实现容器化应用程序的部署与管理。例如,数据科学家与开发人员可以借此建立起可复用机器学习流水线,同时更好地控制自己的训练与推理工作负载。但是,为了支持各类常见的机器学习工作负载,客户们仍然需要编写自定义代码以优化底层 ML 基础设施,确保高可用性与可靠性,从而获取各类数据科学生产力工具并遵循相关安全性与法规要求。例如,当 Kubernetes 客户利用 GPU 进行训练与推理时,往往需要变更 Kubernetes 调度以及 GPU 工作负载扩展的具体方式,从而尽可能提高资源利用率、吞吐量以及可用性。同样的,为了将训练完成的模型部署至生产环境当中,Kubernetes 客户也需要投入不少时间对跨越多个可用区的自动伸缩集群进行设置以及优化。


Amazon SageMaker Opeartors for Kubernetes 成功填补了这一空白。现在,客户已经不再需要面对 Amazon SageMaker 与 Kubernetes 工作流程间的繁琐整合工作。从今天开始,使用 Kubernetes 的客户可以轻松调用 Amazon SageMaker,利用这项模块化全托管服务快速构建、构建以及部署大规模机器学习(ML)模型。在 Amazon SageMaker 工作流的帮助下,用户将可实现计算资源的预配置与优化、仅在请求时进行配置、根据实际需要加以扩展,并在作业完成时自动关闭,从而提供近 100%资源利用率。而在最新 Amazon SageMaker Operator for Kubernets 的帮助下,客户既能够继续享受 Kubernetes 与 EKS 的可移植性与标准化优势,又能够将众多现有优势与 Amazon SageMaker 集成起来,且整个过程无需任何自定义代码。

Amazon SageMaker 与 Kubernetes

机器学习不仅仅是模型。机器学习工作流当中包含数据的摄取与准备、机器学习模型构建、模型训练与评估,以及模型的生产场景部署乃至持续性生产监控。Amazon SageMaker 是一项模块化全托管服务,可帮助数据科学家以及开发人员更快完成模型的构建、训练、部署以及维护等任务。


但模型构建相关工作流本身不可能孤立存在,其往往是更大规模流水线的一部分,而后者则跨越多种用于支持整体应用程序的工程团队与服务项目。Kubernetes 用户(包括 Amazon EKS 客户)通过编写配置文件进行工作负载部署,Kubernetes 则负责将该工作负载与用户 Kuberenetes 集群内的可用计算资源进行匹配。虽然具有良好的控制性与可移植性,但在 Kubernetes 集群之上运行机器学习工作负载同样会带来一系列独特的挑战。例如,基础设施需要额外管理,例如针对利用率、成本以及性能做出优化;遵循适当的安全与合规性要求;同时确保实现可高用性与可靠性等等。这一切都属于重复且相当繁琐的日常工作,往往会在发布 ML 应用程序的过程中耗费大量宝贵的时间与资源。Kubernetes 客户希望单纯控制编排与流水线,而不必分心于集群内的 ML 基础设施与服务管理工作。


Amazon SageMaker Operators for Kubernetes 将 Amazon SageMaker 与 Kubernetes 整合起来,希望切实满足这方面需求。立足 Kubernetes,数据科学家与开发人员将可以使用完全为 ML 工作流设计及优化的全托管服务。与此同时,基础设施与平台团队则可对 Kubernetes 内的工作负载进行编排,从而在保证可控制性与可移植性的同时,摆脱 ML 基础设施与服务管理带来的沉重负担。在向 Kubernetes 当中添加新功能的过程中,开发人员可以创建特定于应用程序或者域的逻辑与组件自定义资源,从而轻松完成对 Kubernetes API 的扩展。Kubernetes 中的 Operator 允许用户以本地方式调用这些自定义资源,同时自动执行相关工作流程。在 Kubernetes 集群之上安装 Amazon SageMaker Opeartors for Kubernetes 之后,大家即可立足集群将 Amazon SageMaker 添加为“自定义资源”,而后直接使用以下 Amazon SageMaker Operators:


  • 训练 – 在 Amazon SageMaker 当中训练 ML 模型,包括 Managed Spot Training,从而节约达 90%的训练成本;同时采取分布式训练方法,同时利用多个 GPU 节点以缩短训练周期。您只需要在作业执行过程内根据实际使用资源付费,从而获得接近 100%的资源利用率。

  • 调优 – 对 Amazon SageMaker 中的模型超参数进行调优,包括配合 Amazon EC2 竞价实例以实现高达 90%的成本节约。Amazon SageMaker Automatic Model Tuning 能够自动为模型搜索更准确的超参数范围,实现高效超参数优化,最终大大缩短模型调优的执行周期。

  • 推理 – 在 Amazon SageMaker 中,将经过训练的模型部署至全托管自动扩展集群当中,同时跨越多个可用区以实现高性能、高可用性实时或批量预测。


每一个 Amazon SageMaker Operator for Kubernetes 都将为用户提供本地化的作业创建与交互体验,包括调用 Kubernetes API 以及使用 Kubernetes 命令行工具(kubectl 等)两种具体方式。工程团队可以利用这些 operators 在 Kubernetes 当中为数据科学家构建起自动化、工具完备且定制化的界面,同时彻底摆脱 ML 基础设施的构建、维护与优化等恼人环节。熟悉 Kubernetes 的数据科学家与开发人员亦可本地编写代码,并与 Amazon SageMaker 的训练、调优以及推理作业进行交互,整个过程与本地 Kubernetes 作业执行毫无区别。来自 Amazon SageMaker 作业的日志流将传输回 Kubernetes,允许用户通过本地命令行查看模型训练、调优以及推理任务的当前状态。

联手 TensorFlow

美国国家标准与技术研究院(MNIST)正在利用 Amazon SageMaker Training Operators for Kubernetes 训练一套简单的卷积神经网络模型。MNIST 采用的数据集包含从 0 到 9 的手写数字图像,这是一种相当流行的 ML 问题。MNIST 数据集共包含 6 万张训练图像与 1 万张测试图像。


整个实验包含以下几个步骤:


  • 在 Kubernetes 集群上安装 Amazon SageMaker Operators for Kubernetes

  • 创建一个用于训练的 YAML 配置文件

  • 利用 Amazon SageMaker Operator 训练模型

先决条件

在本示例中,我们需要使用 EKS 中的现成 Kubernetes 集群。关于如何在 Amazon EKS 当中创建新的集群,请参阅Amazon EKS入门指南。大家还需要在负责控制该 Kubernetes 集群的设备(例如个人笔记本或者 EC2 实例)上完成以下操作:


  • 安装 kubectl(1.13 版本或者更高)。请确保您选择的 kubectl 主版本号与 Kubernetes 集群控制平面相统一。例如,1.13 版本的 kubetcl 可配合 Kubernetes 1.13 与 1.14 集群。关于更多细节信息,请参阅如何安装kubectl

  • AWS CLI(1.16.232 版本或者更高)。关于更多细节信息,请参阅如何安装AWS CLI版本1

  • AWS IAM Authenticator for Kubernetes。关于更多细节信息,请参阅 如何安装aws-iam-authenticator

  • 为 operator 分配现有 IAM 访问密钥,或者利用 IAM 权限允许其创建用户、为用户添加政策或者创建访问密钥。

设置 IAM 角色与权限

在将 operator 部署至 Kubernetes 集群之前,请关联 IAM 角色与 OpenID Connect(OIDC)提供程序以进行身份验证。具体参见以下代码:


# 设置区域与集群export CLUSTER_NAME="<your cluster name>"export AWS_REGION="<your region>"eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \      --region ${AWS_REGION} --approve
复制代码


您的输出结果应该如下所示:


    [_]  eksctl version 0.10.1    [_]  using region us-east-1    [_]  IAM OpenID Connect provider is associated with cluster "my-cluster" in "us-east-1"
复制代码


现在,EKS 中的 Kubernetes 集群已经拥有 OIDC 身份提供程序,您可以创建角色并为其授权权限。使用以下命令以获取 OIDC 发布 URL:


aws eks describe-cluster --name ${CLUSTER_NAME} --region ${AWS_REGION} \ --query cluster.identity.oidc.issuer --output text
复制代码


以上命令将返回呈下 URL:


https://oidc.eks.${AWS_REGION}.amazonaws.com/id/{Your OIDC ID}
复制代码


利用上条命令返回的 OIDC ID 进行角色创建。使用以下代码创建一个名为“trust.json”的新文件。请记得利用 OIDC ID、AWS 账户以及 EKS 集群区域替换其中的对应部分。


    {      "Version": "2012-10-17",      "Statement": [        {          "Effect": "Allow",          "Principal": {            "Federated": "arn:aws:iam::<AWS account number>:oidc-provider/oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>"          },          "Action": "sts:AssumeRoleWithWebIdentity",          "Condition": {            "StringEquals": {              "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:aud": "sts.amazonaws.com",              "oidc.eks.<EKS Cluster region>.amazonaws.com/id/<OIDC ID>:sub": "system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default"            }          }        }      ]    }
复制代码


现在,创建一个新的 IAM 角色:


aws iam create-role --role-name <role name> --assume-role-policy-document file://trust.json --output=text
复制代码


输出结果将返回“ROLE ARN”,我们将其传递至 operator 以安全从 Kubernetes 集群处调用


Amazon SageMaker。


    ROLE    arn:aws:iam::123456789012:role/my-role 2019-11-22T21:46:10Z    /       ABCDEFSFODNN7EXAMPLE   my-role    ASSUMEROLEPOLICYDOCUMENT        2012-10-17    STATEMENT       sts:AssumeRoleWithWebIdentity   Allow    STRINGEQUALS    sts.amazonaws.com       system:serviceaccount:sagemaker-k8s-operator-system:sagemaker-k8s-operator-default    PRINCIPAL       arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/
复制代码


最后,允许新角色访问 Amazon SageMaker 并为其添加AmazonSageMakerFullAccess 政策。


aws iam attach-role-policy --role-name <role name>  --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
复制代码

在 Kuberentes 集群上设置 operator

GitHub repo处下载 YAML 配置文件,即可安装可供使用的 Amazon SageMaker operator。


wget https://raw.githubusercontent.com/aws/amazon-sagemaker-operator-for-k8s/master/release/rolebased/installer.yaml
复制代码


在 installer.yaml 文件中,使用此前步骤中基于 OIDC 角色中的 ARN 更新 eks.amazonaws.com/role-arn。


现在,在您的 Kubernetes 集群上安装 Amazon SageMaker CRD 并设置您要使用的 operators。


kubectl -f apply installer.yaml
复制代码


验证您 Kubernetes 集群中的 Amazon SageMaker Operators 是否可用。详见以下代码:


$ kubectl get crd | grep sagemakerbatchtransformjobs.sagemaker.aws.amazon.com         2019-11-20T17:12:34Zendpointconfigs.sagemaker.aws.amazon.com            2019-11-20T17:12:34Zhostingdeployments.sagemaker.aws.amazon.com         2019-11-20T17:12:34Zhyperparametertuningjobs.sagemaker.aws.amazon.com   2019-11-20T17:12:34Zmodels.sagemaker.aws.amazon.com                     2019-11-20T17:12:34Ztrainingjobs.sagemaker.aws.amazon.com               2019-11-20T17:12:34Z
复制代码


利用这些 oepartors,全部 Amazon SageMaker 安全托管 ML 基础设施与软件优化方案都将以定制化资源的形式供您的 Kubernetes 集群使用。


要通过命令行使用 kubetcl 查看 Amazon SageMaker 日志,我们还需要安装以下客户端:


export os="linux"wget https://amazon-sagemaker-operator-for-k8s-us-east-1.s3.amazonaws.com/kubectl-smlogs-plugin/latest/${os}.amd64.tar.gztar xvzf ${os}.amd64.tar.gz# 将二进制代码移动至您的homedir目录中。mkdir ~/sagemaker-k8s-bincp ./kubectl-smlogs.${os}.amd64/kubectl-smlogs ~/sagemaker-k8s-bin/.# 这一行将二进制代码添加至您的.bashrc路径内。echo 'export PATH=$PATH:~/sagemaker-k8s-bin' >> ~/.bashrc# 指定.bashrc源以更新环境变量:source ~/.bashrc
复制代码

准备训练任务

在为 Amazon SageMaker 训练任务创建 YAML 配置文件之前,我们需要首先创建一套容器,用于容纳您的 Python 训练代码(可通过tensorflow_distributed_mnist GitHub repo 下载)。另外,大家也可以使用 AWS Deep Learning Containers提供的 TensorFlow GPU 镜像创建 Dockerfile。详见以下代码:


# 使用AWS深度学习容器镜像FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-training:1.13-gpu-py3## 添加训练脚本COPY train.py /opt/ml/code/train.py ENV SAGEMAKER_PROGRAM train.pyENV SM_MODEL_DIR=/opt/ml/model
复制代码


在本示例中,我们将 MNIST 训练数据集上传至 S3 存储桶。接下来,创建 train.yaml YAML 配置文件即可开始训练。另外,请将 TrainingJob 指定为 Amazon SageMaker 模型训练的自定义资源,以供 Kubernetes 集群随时调用。


apiVersion: sagemaker.aws.amazon.com/v1kind: TrainingJobmetadata:  name: tf-mnistspec:    algorithmSpecification:        trainingImage: 578276202366.dkr.ecr.us-west-2.amazonaws.com/mnist-demo:latest        trainingInputMode: File    roleArn: {YOUR ROLE:ARN}    region: us-west-2    outputDataConfig:        s3OutputPath: s3://{YOUR OUTPUT PATH}    resourceConfig:        instanceCount: 1        instanceType: ml.p2.8xlarge        volumeSizeInGB: 30    stoppingCondition:        maxRuntimeInSeconds: 86400    inputDataConfig:        - channelName: train          dataSource:            s3DataSource:                s3DataType: S3Prefix                s3Uri: s3://sagemaker-us-west-2-578276202366/data/DEMO-mnist                s3DataDistributionType: FullyReplicated          contentType: text/csv          compressionType: None
复制代码

模型训练

现在,我们可以使用以下命令开始模型训练了:


$ kubectl apply -f training.yamltrainingjob.sagemaker.aws.amazon.com/tf-mnist created
复制代码


Amazon SageMaker Operator 会利用您在 train.yaml 文件中指定的规范在 Amazon SageMaker 中创建一项训练任务。大家可以与该训练任务交互,具体方法与常规 Kubernetes 使用完全相同。详见以下代码:


$ kubectl describe trainingjob tf-mnist$ kubectl get trainingjob tf-mnist$ kubectl smlogs trainingjob tf-mnisttf-mnist-fa964bf80e4b11ea89d40e3ef2d156bc/algo-1-1574553166 1574553266153 2019-11-23 23:54:25,480 sagemaker-containers INFO     Reporting training SUCCESS
复制代码


在训练任务结束之后,我们在 Amazon SageMaker 中用于训练工作的所有计算实例都将立即中止。


关于更多相关示例,请参阅 GitHub repo

全新 Amazon SageMaker 功能上线

Amazon SageMaker Operators for Kubernetes 目前已经在美国东区(俄亥俄州)、美国东区(北弗吉尼亚州)、美国西区(俄勒冈州)以及欧盟区(爱尔兰)等 AWS 区域正式上线。关于更多细节信息及操作指南,请参阅我们的用户指南


我们也欢迎大家分享您的体验与反馈,或者提交更多 YAML 规范示例或者 operator 改进建议。您可以联系 Amazon SageMaker 分论坛、GitHub repo 或者 AWS 客户代表提供意见,帮助我们进一步完善 Amazon SageMaker Operators for Kubernetes。


原文链接:


https://aws.amazon.com/cn/blogs/machine-learning/introducing-amazon-sagemaker-operators-for-kubernetes/


2019-12-06 09:532224

评论

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

Web Components 系列(十一)—— 实现 MyCard 的可复用

编程三昧

前端 组件化 2月月更 webComponents

百度AI融通创新工坊招生中!

百度大脑

大模型应用新范式:统一特征表示优化(UFO)

百度大脑

百年奥运的凌空之美,AI云智剪背后的新算法

阿里云视频云

35款FL插件免费下载

懒得勤快

自我认为挺全面的【Web Service渗透测试总结】

H

网络安全 渗透测试

关于 AI 边云协同解决方案的研究与讨论 | 社区征文

liuzhen007

AI 新春征文 2月月更

解密体育背后AI黑科技:花样滑冰动作识别、多模视频分类和精彩片段剪辑

百度大脑

人才短缺、成本高昂,制造企业智能化转型路径如何破局?

百度大脑

一文带你使用 Python 实现Socket编程

宇宙之一粟

Python socket 2月月更

基于STM32设计的环境检测设备

DS小龙哥

2月月更 STM32环境检测仪

1分钟了解Prometheus的WAL机制

johncming

Prometheus WAL

Flink on K8s 企业生产化实践|社区征文

张浩_house

flink 特征平台 新春征文

netty系列之:channelHandlerContext详解

程序那些事

Java Netty nio 程序那些事 2月月更

SQL注入如何预防?

喀拉峻

网络安全

政企机构用户注意!蠕虫病毒Prometei正在针对局域网横向渗透传播

火绒安全

局域网共享 渗透 蠕虫 病毒 政企

一文搞懂MySQL体系架构

程序猿阿星

架构 MySQL 数据库 MySQL InnoDB

PingCode与Jira 敏捷开发管理能力的对比

PingCode

面试突击:说一下线程生命周期,以及转换过程?

CRMEB

WeOpen Good 开源公益计划正式启动!聚开源智慧·行科技向善

腾源会

开源 公益 腾源会

龙蜥下游发行版 Alibaba Cloud Linux 3 安全基线正式通过 CIS 认证,云上企业安全性保障更上层楼

OpenAnolis小助手

Linux 开源 cis

3步教你把个人应用服务部署到云服务器ECS上

阿里云弹性计算

Docker 征文投稿 玩转ECS

罗马建立在水渠上:为什么需要优先建设绿色光网?

脑极体

基于飞桨实现的“太空保卫战士”——地球同步静止轨道空间目标检测系统

百度大脑

大咖说|《商业评论》主编颜杰华:如何看待未来商业的管理趋势?

大咖说

大咖说 财经 数智化 商业评论

开源每周问答精选:PolarDB for PostgreSQL 是专门面向 OLAP 场景吗?

阿里云数据库开源

数据库 阿里云 开源 polarDB

网络安全kali渗透学习 web渗透入门 NMAP高级使用技巧和漏洞扫描

学神来啦

剑指Offer——JVM 这些基础知识点你全掌握了吗

No Silver Bullet

JVM 垃圾回收 offer 2月月更

使用goby检测log4j漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

PaddleDTX v1.0版本发布,安全性灵活性全面提升!

百度大脑

AWS将Amazon SageMaker Opeartors正式引入Kubernetes,开发者可轻松训练模型_语言 & 开发_AWS Blog_InfoQ精选文章