亚马逊AWS官方博客

自建 Kubernetes 集群提交和管理 Amazon SageMaker 训练任务(一)SageMaker Operator 安装及任务提交

自建Kubernetes集群提交和管理Amazon SageMaker训练任务

(一)SageMaker Operator安装及任务提交

摘要

SageMaker Operator 是Kubernetes的开源插件。可以用于提交和管理Amazon SageMaker的训练任务。在Kubernetes集群中,通过向API Server提交yaml 文件,SageMaker Operator负责将Yaml文件中的内容转化为对Amazon  SageMaker的调用,从而对任务进行管理。

应用场景

用户可以轻松使用Amazon Elastic Kubernetes Service(EKS)对SageMaker 进行任务提交。但是如果考虑混合云的场景或者线下数据中心向云上提交任务的场景,则需要对之前的方案进行一定程度的修改,主要集中在权限认证的方式上。

技术背景

本文主要基于之前文档的技术要点(参考文档一),在中国区自建的K8S集群上进行SageMaker Operator的部署及任务管理。SageMaker Operator Controllor会以Pod的方式,运行在K8S的集群上,并且注册一些相关的CRD到K8S平台上。SageMaker Controllor会监听K8S API Server上的请求,解析请求后,在进行SageMaker的调度。

技术要点分析:

在EKS 调用SageMaker Operator中,SageMaker的Pod会用过OIDC Provider获取提交SageMaker 任务的role。在本地集群中,我们可以使用AK/SK的方式进行替换,从而能让本地集群的SageMaker Operator Pod节点有权限提交训练任务。

此外,中国区SageMaker Operator镜像目前已经发布,可以从参考文档(4)中找到SageMaker Operator镜像仓库地址。

操作步骤:

  1. 配置IAM用户:附加SageMaker Full Access 权限,并生成AK/SK。(后续第5步会使用到AK/SK)
  2. 创建一个S3存储桶,用于存储SageMaker的数据集和模型文件。(后续第6步会使用到)
  3. 下载SageMaker 安装yaml文件:

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

  1. 修改yaml中的参数 (原配置中,SageMaker Operator创建的Pod会以OIDC的方式向AWS获取权限并负责提交SageMaker任务,修改以后,Service Account 会使用容器中的环境变量配置的AK/SK去AWS提交SageMaker任务)

4.1 注释掉创建ServiceAccount中Metadata所使用的Role

4.2 将第一步中创建的AK/SK维护到其中

4.3 根据参考文档(4),将operator的镜像地址进行替换。

5. 使用kubectl apply -f Installer.yaml 安装Operator。 (可使用kubectl logs NAME –namespace NameSpace 查看Operator安装和运行日志)

6. 根据参考文档1里面的步骤,下载训练使用的数据和提交任务的脚本。(样例中使用的提交任务脚本为全托管镜像,如果算法和程序需要使用自定义方式,后续文档会相继介绍BYOC或BYOS方式自定义算法+框架)将训练数据以文档1中的结构上传至步骤2中创建的S3存储桶中

7. 修改对应的角色和region,在算法镜像中可以使用参考文档3中的地址获取,建议使用:1 版本确保是稳定版本。

8. 修改完提交任务脚本后,在k8s 集群上执行kubctl apply -f training.yaml即可看到任务执行。(参考文档1中查询命令查询任务执行状态)

9. 任务完成后可去yaml文件中维护的output地址下载对应的模型文件


参考文档:

1. EKS 集成SageMaker Operator:

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

https://aws.amazon.com/cn/blogs/china/simplify-machine-learning-task-management-on-kubernetes-with-sagemaker-operator/

2. 中国区部署K8S集群:

https://aws.amazon.com/cn/blogs/china/how-to-build-kubernetes-based-on-ec2-in-aws-china/ 注意:中国区安装K8S集群需要进行账号进行备案

3. 内置镜像参考文档详见:

https://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html

4. SageMaker Operator 中国区镜像地址:(https://www.amazonaws.cn/en/new/2020/introducing-amazon-sagemaker-operators-for-kubernetes-in-beijing-sinnet-ningxia-nwcd/

099223943020.dkr.ecr.cn-northwest-1.amazonaws.com.cn/amazon-sagemaker-operator-for-k8s:v1

本篇作者

田原

AWS 解决方案架构师,专注于DevOps, 加入AWS之前一直从事运维相关的工作。在自动化运维方面有丰富的经验。

朱晓阳

AWS 资深解决方案架构师, 负责基于AWS云计算的解决方案的架构设计和咨询,同时致力于AWS云计算服务在数字广告和社交应用领域的应用和推广. 在加入AWS之前,曾任IBM Cloud资深软件架构师. 在OpenStack, Docker, Kubernetes和DevOps领域有多年实战经验. 现致力于容器和服务网格相关领域的研究。