AWS 使用 EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作
AWS DeepRacer-for-Cloud 的官方博客文档:直达链接:https://aws.amazon.com/cn/blogs/china/use-amazon-ec2-to-further-reduce-the-cost-of-deepracer-training/
写在最前
由于博客中已经写了具体的方案,这里将里面的脚本提取出来,并对相应的问题做解决
这里采用 Deep Learning AMI (Ubuntu 18.04) Version 60.1
实例准备,我看到文章中有提到使用 G 和 P 系实例,如下:
本次实践还是使用的 g4dn.2xlarge 那么我这里使用的是 spot 请求实例,而不是使用的 On-Demand,会减少 70% 及以上的成本,不过也会出现一些问题,那么就是 US-EAST-1 区域的 G 和 P 系列的实例严重不足,可能运行一会就会停掉,那么我们可以先将基础环境部署好,直接制作镜像,那么在后面使用的时候可以快速拉起实例,不需要再对基础环境做过多的配置
需要注意的是,你需要查看你的 EC2 limit,默认情况下是没有 G 和 P 系列的容量的,需要提交 case 提升 limit,在提交 limit 的时候不要提交太多请求,很可能会给你驳回
为了方便,我这里制作了一个 EC2 的启动模板,也是为后续的训练打个基础,以免每次都需要手动配置
文章目录结构:
一、为 EC2 创建 IAM 角色
1.首先进入 IAM 控制台
2.选择 EC2,点击下一步
3.添加权限
4.命名、查看和创建
5.查看创建的角色
二、创建存储桶
1.进入 S3 控制台
2.创建存储桶
3.查看创建的存储桶
三、创建启动模板
1.首先需要选择镜像
2.设置实例类型和密钥对
3.定义子网和安全组
4.配置存储
5.高级详细信息
6.查看摘要并创建模板
四、创建实例
1.选择从模板启动实例
2.查看 spot 请求
五、连接实例并构建基础环境
Basic.连接你的实例
①.SecureCRT 导入密钥
②.SecureCRT 连接实例
接下来进入基础环境的搭建
Step-1.拉取代码
Step-2.安装 DeepRacer 本地训练所需的基础组件
错误场景一,解决方案
错误场景二,解决方案
Step-3.重新连接 EC2 实例,并执行第二阶段的环境初始化代码
Step-4.加载训练 DeepRacer 所需脚本
Step-5.编辑奖励函数,训练信息,车俩信息
Step-6.编辑环境文件 run.env
①.添加存储桶信息
②.编辑赛道信息
Step-7.更新 python 版本
Step-8.更新配置
Step-9.上传 dr-upload-custom-files 到 S3 存储桶
Step-10.启动训练
六、后续操作(再训练)
1.若实例终止,重新拉取实例,接着上一次训练
①.修改 run.env 文件
②.更新,使本次配置生效
③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传 custom_files
④.开始训练
七、参数、命令释义
八、遇到的问题
1.NO PUBKEY
2.Python3.6 报错,更新 python 版本
3.无法获得锁
4.Sagemaker is not running
以下为具体的操作方案
一、为 EC2 创建 IAM 角色
正如 AWS 官方博客中所说的,我们使用 EC2 去训练模型会用到如下 3 个服务
那么这里进行演示创建新的 EC2 角色并赋权
1.首先进入 IAM 控制台
IAM创建新角色控制台:https://us-east-1.console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities
2.选择 EC2,点击下一步
3.添加权限
依次搜索 S3,CloudWatch,AmazonKinesisVideoStreams,如下图都需要 选择 FullAccess 结尾的,代表完全访问
3 个权限都添加完成后,点击下一步
4.命名、查看和创建
①.设置角色名称
②.查看角色附加的权限
③.准备创建
根据自身需求是否添加标签(可选)
5.查看创建的角色
二、创建存储桶
1.进入 S3 控制台
S3存储桶控制面板:https://s3.console.aws.amazon.com/s3/
2.创建存储桶
此处只需要设置存储桶名称和区域,其他设置保持默认即可
滑到最下面点击 创建存储桶
3.查看创建的存储桶
三、创建启动模板
EC2 启动模板控制面板:https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchTemplates
1.首先需要选择镜像
请选择 Deep Learning AMI(Ubuntu 18.04) 镜像
2.设置实例类型和密钥对
虽然官方给出的提示是不要在模板中包含这两个参数,但是本次实验是为了后面多次部署节省时间,就预先在模板中定义
3.定义子网和安全组
由于本次我需要使用到 spot 请求,就不对子网进行设置,待会 spot 会在 us-east-1 任意一个区域进行请求
4.配置存储
官方博客给出配置说明为:根卷至少要高于 150GiB 的空间,这里设置为 160GiB,我们还可以看到,AMI 有一个存储卷,有 225GB
5.高级详细信息
这里我勾选了 请求 spot 实例,为了降低成本,这里可以根据用户的自身情况是否勾选然后在 IAM 角色这里,要选择我们预先为 EC2 创建的角色
6.查看摘要并创建模板
检查一下创建的模板,若无误点击创建即可
四、创建实例
EC2 实例控制台:https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1#Instances
1.选择从模板启动实例
这里选择之前创建的模板
确认无误后,启动实例
查看创建成功的实例如果您勾选了 spot 请求实例,并且在启动实例报错,提示没有 spot 额度,并且您在确保您账号有足够的 limit,那么可能该区域的该时段没有可供您使用的 spot 实例,请使用按需实例进行创建
2.查看 spot 请求
如果您在实例模板中勾选了 spot 请求实例,并且成功启动,那么您可以在 spot 请求控制面板看到您的实例
五、连接实例并构建基础环境
这里还是采用 AWS 官方博客所给出的安装步骤
还是做一个很基础的展示,如何连接 EC2,我这里采用的是 SecureCRT 连接工具
Basic.连接你的实例
这里只支持使用以.pem 类型的密钥(与 OpenSSH 共用),若您是.ppk 类型的,请使用 putty 进行连接
①.SecureCRT 导入密钥
②.SecureCRT 连接实例
请注意,因为我们使用的是 Ubuntu 的镜像,那么这里使用的用户名为 ubuntu
连接后,若弹出提示框,请点击 接受并保存
接下来进入基础环境的搭建
AWS DeepRacer-for-Cloud 安装训练脚本如下
Step-1.拉取代码
进入创建的 EC2 实例,并执行以下命令,从 GitHub 拉取代码:
Step-2.安装 DeepRacer 本地训练所需的基础组件
执行第一阶段的环境预配置代码,这会安装 DeepRacer 本地训练所需的基础组件,之后重启 EC2 实例:这一步官方给出的只有 2 行代码,那么在实际的执行过程中,因为版本的变化,衍生出了一些新的问题
因为这里考虑到会出错的场景,在这里进行额外操作这里贴出实际报错场景一,提示 NO_PUBKEY
错误场景一,解决方案
若出现如下进度条,则表示错误已修复,正在安装基础环境
错误场景二,解决方案
若没有出现进度条,并出现如下错误,可能会出现多次
请运行一下代码解决,并重新执行基础环境安装命令
Step-3.重新连接 EC2 实例,并执行第二阶段的环境初始化代码
此时环境初始化,需要拉取很多的容器镜像,请耐心等待完成
环境初始化完成,如下
Step-4.加载训练 DeepRacer 所需脚本
Step-5.编辑奖励函数,训练信息,车俩信息
在 deepracer-for-cloud 目录中有一个 custom_files 目录,里面带有 3 个文件,分别为:
在 deepracer-for-cloud/custom_files/reward_function.py 文件中编辑奖励函数
在 deepracer-for-cloud/custom_files/hyperparameters.json 文件中编辑训练信息,例如:
在 deepracer-for-cloud/custom_files/model_metadata.json 文件中编辑车辆信息,包括 action space、传感器以及神经网络类型等,例如:
Step-6.编辑环境文件 run.env
①.添加存储桶信息
编辑 deepracer-for-cloud/run.env 文件,添加如下内容:
也可以使用命令,请将 <创建的bucket名字>
替换为您之前创建的 S3 存储桶的名字
这里我创建的存储桶名字为:deepracer-demo-bk,作为演示
②.编辑赛道信息
我这里使用的是 re:Invent 2018 赛道,其 DR_WORLD_NAME 为 reinvent_base 请在 run.env 文件中找到 DR_WORLD_NAME
修改其值
Step-7.更新 python 版本
由于该镜像自带是 python 3.6,这里已经不支持了,所有需要更新 python 版本请执行一下命令更新 python3
Step-8.更新配置
Step-9.上传 dr-upload-custom-files 到 S3 存储桶
此时 S3 存储桶中的 custom-files 应该包含下图文件
Step-10.启动训练
执行如下命令开始训练
正常训练如图
至此,您的模型已经开始在 EC2 上训练
五、后续操作
1.若实例终止,重新拉取实例,接着上一次训练
请进行如下操作
①.修改 run.env 文件
修改如下参数
这是修改前的
这是修改后的
查看一下 s3 存储桶的文件
②.更新,使本次配置生效
③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传 custom_files
④.开始训练
如果提示 Sagemaker is not running
请执行 dr-start-training -w
run.evn 配置文件参数设置,dr-命令释义
具体参数请参阅Deepracer-for-Cloud GitHub
遇到的问题
1.NO_PUBKEY
处理方案由于本次使用 ubuntu 18.04 所以使用以下方案解决
2.Python3.6 报错,更新 python 版本
注:
3.无法获得锁
解决方法:
4.如果提示 Sagemaker is not running
请执行 dr-start-training -w
希望这个基础教程可以帮助到您
版权声明: 本文为 InfoQ 作者【指剑】的原创文章。
原文链接:【http://xie.infoq.cn/article/2d5436fd473af600340435919】。文章转载请联系作者。
评论