
相关技术介绍
演练

(3)触发Amazon Step Functions执行Amazon SageMaker训练与部署的步骤;
(4)Amazon SageMaker从ECR中加载docker image与Amazon S3中的数据进行训练;
2.2 前提条件
(1)本文示例所使用的区域为us-east-1;
(2)在该区域使用Ubuntu 18.04的AMI创建一台Amazon EC2,并确保与其绑定的IAM Role有AdministratorAccess权限,安全组放开8080端口供Jenkins web使用,后续章节有安装Jenkins的具体步骤;
(3)为了模拟用户的开发环境,请先在本地或远程服务器配置好git工具与y与亚马逊云科技的credentials,并确定其拥有AdministratorAccess权限。


(3)在Terminal中执行命令:
git clone https://github.com/micxyj/awsblog-lab-guide.git
(5)按照该notebook中的步骤执行一遍即可;
(6)执行完成后,打开Amazon Step Functions控制台,会看到多出一个状态机,如下图所示:


(1)登陆Amazon EC2,安装Java环境;
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install openjdk-8-jdk -y
(3)安装完成后,执行下列命令,记下初始密码;
sudo cat /var/lib/jenkins/secrets/initialAdminPassword






sudo su -
sudo vim /etc/sudoers
# 在文件中的User privilege specification下添加一行:jenkins ALL=(ALL) NOPASSWD: ALL,然后保存并关闭文件
su jenkins
sudo apt install python3-pip
pip3 install awscli --upgrade --user
vim ~/.bashrc
# 在文件中添加一行python路径:export PATH=$HOME/.local/bin:$PATH,然后保存并关闭文件
source ~/.bashrc
# 命令行输入aws configure,不需要设置access id与access key,在Default region name配置中输入us-east-1即可

(2)输入存储库名称并点击创建;





(5)从github上下载实验所需代码到本地,并上传到CodeCommit的代码仓库;
git clone https://github.com/micxyj/ml-ops.git
cp -r ml-ops/* ml-ops-codecommit
cd ml-ops-codecommit
git add .
git commit -m 'update'
git push

在cifar10文件夹中包含了使用tensorflow对cifar-10数据集进行训练与创建tersorflow serving的代码,会通过Dockerfile文件与build_and_push.sh打包封装成docker image并上传到ECR当中,上传完成后会执行invoke_sfn.py脚本,运行已经定义好的Amazon Step Functions状态机,从而完成Amazon SageMaker训练与部署的过程。
(6)打开Amazon CodeBuild控制台,按照下述信息创建项目;





- pip install boto3
- chmod 777 build_and_push.sh
- ./build_and_push.sh sagemaker-tf-cifar10-example
- python invoke_sfn.py


其他配置保持默认即可,点击创建构建项目。
(7)打开iam role的控制台,赋予codebuild-ml-ops-service-role角色Amazon EC2 ContainerRegistryFullAccess与Amazon StepFunctionsFullAccess的权限;


(2)搜索Amazon CodeCommit Trigger与Amazon CodeBuild插件并安装,安装完成之后点击restart;

(3)配置Amazon CodeCommit Trigger插件;
Amazon CodeCommit Trigger插件需要通过SQS与SNS来实现webhook的功能(即push代码到CodeCommit之后,触发Jenkins Pipeline),因此需要先对SQS与SNS进行配置。
创建一个新的SNS主题并输入名称。


{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:Publish",
"SNS:RemovePermission",
"SNS:SetTopicAttributes",
"SNS:DeleteTopic",
"SNS:ListSubscriptionsByTopic",
"SNS:GetTopicAttributes",
"SNS:Receive",
"SNS:AddPermission",
"SNS:Subscribe"
],
"Resource": "arn:aws:sns:us-east-1:your_account_id:your_sns_name",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "your_account_id"
}
}
}
]
}





{
"Version": "2012-10-17",
"Id": "arn:aws:sqs:us-east-1:your_account_id:your_sqs_name/SQSDefaultPolicy",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "sns.amazonaws.com"
},
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:us-east-1:your_account_id:your_sqs_name",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:sns:us-east-1:your_account_id:your_sns_name"
}
}
}
]
}







(4)创建Jenkins Item;
输入名称ml-ops-pipeline并选择Pipeline。





展示

(2)打开Jenkinsfile,将your_project_name替换为你的CodeBuild项目名称,从代码中可以看出,Jenkins安装完成Amazon CodeBuild插件之后,就可以以常见的Groovy语法定义需要执行的step,触发Amazon CodeBuild执行相应的构建编译的过程,因此,Jenkins在这里只起到调度的作用,编译构建的负载全部交给Amazon CodeBuild来完成,用户并不需要预置底层资源;









总结
参考资料
[2] Automated and continuous deployment of Amazon SageMaker models with Amazon Step Functions
[3] 将 Amazon CodeBuild 与 Jenkins 结合使用
[4] Building your own TensorFlow container
[5] Continuous Delivery for Machine Learning
本篇作者

肖元君
亚马逊云科技解决方案架构师
负责基于亚马逊云科技云计算方案的架构咨询和设计实现,同时致力于数据分析与人工智能的研究与应用

金忠敏
亚马逊云科技解决方案架构师
现在专注于云计算解决方案和架构的工作。具有超过15年的IT从业经验,曾从事软件开发,售后支持,系统交付,售前等工作。参与过很多大型项目架构设计和实施交付

Pan Xiankun
亚马逊云科技解决方案架构师
文章转载自亚马逊云开发者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




