使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作

AWS DeepRacer-for-Cloud的官方博客文档: 直达链接:https://aws.amazon.com/cn/blo...

写在最前

由于博客中已经写了具体的方案,这里将里面的脚本提取出来,并对相应的问题做解决

这里采用 Deep Learning AMI (Ubuntu 18.04) Version 60.1

实例准备,我看到文章中有提到使用G和P系实例,如下:

g4dn.2xlarge:性价比较高的训练方式,基于GPU 加速,训练速度稍快于 DeepRacer console 训练

p3.2xlarge:训练速度远快于DeepRacer console 训练,快速迭代模型,取得训练成果

本次实践还是使用的 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个服务

  • AmazonKinesisVideoStreams
  • CloudWatch
  • S3

那么这里进行演示创建新的EC2角色并赋权

1.首先进入IAM控制台

IAM创建新角色控制台:https://us-east-1.console.aws...

2.选择EC2,点击下一步

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第1张图片
控制面板-1

3.添加权限

依次搜索S3,CloudWatch,AmazonKinesisVideoStreams,如下图 都需要 选择FullAccess结尾的,代表完全访问

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第2张图片

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第3张图片

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第4张图片

3个权限都添加完成后,点击下一步

4.命名、查看和创建

  • ①.设置角色名称

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第5张图片
SetRoleName

  • ②.查看角色附加的权限

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第6张图片
CheckRole_policy

  • ③.准备创建

根据自身需求是否添加标签(可选)

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第7张图片

5.查看创建的角色

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第8张图片
Check_Create_role

二、创建存储桶

1.进入S3控制台

S3存储桶控制面板:https://s3.console.aws.amazon...

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第9张图片

2.创建存储桶

此处只需要设置存储桶名称和区域,其他设置保持默认即可

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第10张图片

滑到最下面点击 创建存储桶

3.查看创建的存储桶

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第11张图片
Check_bk

三、创建启动模板

EC2启动模板控制面板:https://us-east-1.console.aws...

1.首先需要选择镜像

请选择 Deep Learning AMI(Ubuntu 18.04) 镜像

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第12张图片

2.设置实例类型和密钥对

虽然官方给出的提示是不要在模板中包含这两个参数,但是本次实验是为了后面多次部署节省时间,就预先在模板中定义

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第13张图片

3.定义子网和安全组

由于本次我需要使用到spot请求,就不对子网进行设置,待会spot会在us-east-1任意一个区域进行请求

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第14张图片

4.配置存储

官方博客给出配置说明为:根卷至少要高于150GiB的空间,这里设置为160GiB,我们还可以看到,AMI有一个存储卷,有225GB

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第15张图片

5.高级详细信息

这里我勾选了 请求spot实例,为了降低成本,这里可以根据用户的自身情况是否勾选 然后在IAM角色这里,要选择我们预先为EC2创建的角色

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第16张图片

6.查看摘要并创建模板

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第17张图片

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第18张图片
启动模板-查看已创建的模板

四、创建实例

EC2实例控制台:https://us-east-1.console.aws...

1.选择从模板启动实例

这里选择之前创建的模板

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第19张图片

确认无误后,启动实例

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第20张图片

查看创建成功的实例 如果您勾选了spot请求实例,并且在启动实例报错,提示没有spot额度,并且您在确保您账号有足够的limit,那么可能该区域的该时段没有可供您使用的spot实例,请使用按需实例进行创建

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第21张图片

2.查看spot请求

如果您在实例模板中勾选了spot请求实例,并且成功启动,那么您可以在spot请求控制面板看到您的实例

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第22张图片

五、连接实例并构建基础环境

这里还是采用AWS官方博客所给出的安装步骤

还是做一个很基础的展示,如何连接EC2,我这里采用的是SecureCRT连接工具

Basic.连接你的实例

这里只支持使用以.pem类型的密钥(与 OpenSSH 共用),若您是.ppk类型的,请使用putty进行连接

  • ①.SecureCRT导入密钥

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第23张图片

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第24张图片

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第25张图片

  • ②.SecureCRT连接实例

请注意,因为我们使用的是Ubuntu的镜像,那么这里使用的用户名为 ubuntu

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第26张图片

连接后,若弹出提示框,请点击 接受并保存

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第27张图片
SecureCRT连接实例成功

接下来进入基础环境的搭建

AWS DeepRacer-for-Cloud安装训练脚本如下

  • Step-1.拉取代码

进入创建的EC2实例,并执行以下命令,从GitHub拉取代码:

git clone https://github.com/aws-deepra...

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第28张图片
git code

  • Step-2.安装DeepRacer本地训练所需的基础组件

执行第一阶段的环境预配置代码,这会安装DeepRacer本地训练所需的基础组件,之后重启EC2实例: 这一步官方给出的只有2行代码,那么在实际的执行过程中,因为版本的变化,衍生出了一些新的问题

cd deepracer-for-cloud && ./bin/prepare.sh
sudo reboot

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第29张图片
本地基础环境-1

因为这里考虑到会出错的场景,在这里进行额外操作 这里贴出实际报错场景一,提示 NO_PUBKEY

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第30张图片

错误场景一,解决方案
### 添加PUBKEY
wget -qO - http://developer.download.nvi... | sudo apt-key add -
### 更新
sudo apt-get update

### 重新执行,请确保您不在 deepracer-for-cloud目录中,请回到ubuntu的home目录下

cd deepracer-for-cloud && ./bin/prepare.sh
### 重启
sudo reboot

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第31张图片

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第32张图片

若出现如下进度条,则表示错误已修复,正在安装基础环境

image.png

错误场景二,解决方案

若没有出现进度条,并出现如下错误,可能会出现多次

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

请运行一下代码解决,并重新执行基础环境安装命令

sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock

### 重新执行,请确保您不在 deepracer-for-cloud目录中,请回到ubuntu的home目录下

cd deepracer-for-cloud && ./bin/prepare.sh

### 重启

sudo reboot

  • Step-3.重新连接EC2实例,并执行第二阶段的环境初始化代码

### 请确保您此时在ubuntu的home目录下

cd deepracer-for-cloud/ && bin/init.sh -c aws -a gpu
此时环境初始化,需要拉取很多的容器镜像,请耐心等待完成

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第33张图片

环境初始化完成,如下

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第34张图片

  • Step-4.加载训练DeepRacer所需脚本

source bin/activate.sh

  • Step-5.编辑奖励函数,训练信息,车俩信息

在deepracer-for-cloud目录中有一个custom_files目录,里面带有3个文件,分别为:

reward_function.py #奖励函数文件
hyperparameters.json #训练信息文件
model_metadata.json #车俩信息文件
在deepracer-for-cloud/custom_files/reward_function.py文件中编辑奖励函数

def reward_function(params):
'''
Example of penalize steering, which helps mitigate zig-zag behaviors
'''

# Read input parameters
distance_from_center = params['distance_from_center']
track_width = params['track_width']
steering = abs(params['steering_angle']) # Only need the absolute steering angle

# Calculate 3 marks that are farther and father away from the center line
marker_1 = 0.1 * track_width
marker_2 = 0.25 * track_width
marker_3 = 0.5 * track_width

# Give higher reward if the car is closer to center line and vice versa
if distance_from_center <= marker_1:
    reward = 1
elif distance_from_center <= marker_2:
    reward = 0.5
elif distance_from_center <= marker_3:
    reward = 0.1
else:
    reward = 1e-3  # likely crashed/ close to off track

# Steering penality threshold, change the number based on your action space setting
ABS_STEERING_THRESHOLD = 15

# Penalize reward if the car is steering too much
if steering > ABS_STEERING_THRESHOLD:
    reward *= 0.8

return float(reward)

在deepracer-for-cloud/custom_files/hyperparameters.json文件中编辑训练信息,例如:

{
  "batch_size": 64,
  "beta_entropy": 0.01,
  "discount_factor": 0.995,
  "e_greedy_value": 0.05,
  "epsilon_steps": 10000,
  "exploration_type": "categorical",
  "loss_type": "huber",
  "lr": 0.0003,
  "num_episodes_between_training": 20,
  "num_epochs": 10,
  "stack_size": 1,
  "term_cond_avg_score": 350.0,
  "term_cond_max_episodes": 1000,
  "sac_alpha": 0.2
}
在deepracer-for-cloud/custom_files/model_metadata.json文件中编辑车辆信息,包括action space、传感器以及神经网络类型等,例如:
  {
  "action_space": [
      {
          "steering_angle": -30,
          "speed": 0.6
      },
      {
          "steering_angle": -15,
          "speed": 0.6
      },
      {
          "steering_angle": 0,
          "speed": 0.6
      },
      {
          "steering_angle": 15,
          "speed": 0.6
      },
      {
          "steering_angle": 30,
          "speed": 0.6
      }
  ],
  "sensor": ["FRONT_FACING_CAMERA"],
  "neural_network": "DEEP_CONVOLUTIONAL_NETWORK_SHALLOW",
  "training_algorithm": "clipped_ppo",
  "action_space_type": "discrete",
  "version": "3"
}
  • Step-6.编辑环境文件run.env
  • ①.添加存储桶信息

编辑deepracer-for-cloud/run.env文件,添加如下内容:

DR_LOCAL_S3_BUCKET=<创建的bucket名字>
DR_UPLOAD_S3_BUCKET=<创建的bucket名字>

也可以使用命令,请将 <创建的bucket名字> 替换为您之前创建的S3存储桶的名字

sed -i '1i\DR_LOCAL_S3_BUCKET=<创建的bucket名字>' run.env
sed -i '1i\DR_UPLOAD_S3_BUCKET=<创建的bucket名字>' run.env

这里我创建的存储桶名字为:deepracer-demo-bk,作为演示

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第35张图片

  • ②.编辑赛道信息

我这里使用的是 re:Invent 2018 赛道,其DR_WORLD_NAME为reinvent_base 请在run.env文件中找到 DR_WORLD_NAME 修改其值

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第36张图片
修改赛道信息

  • Step-7.更新python版本

由于该镜像自带是python 3.6,这里已经不支持了,所有需要更新python版本 请执行一下命令更新python3

### 安装python 3.8

sudo apt-get -y install python3.8

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2

image.png

安装python3.8

  • Step-8.更新配置

### 执行如下代码,使此处配置生效

dr-update

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第37张图片
dr-update

  • Step-9.上传dr-upload-custom-files到S3存储桶

dr-upload-custom-files

image.png

此时S3存储桶中的custom-files应该包含下图文件

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第38张图片

  • Step-10.启动训练

执行如下命令开始训练

dr-start-training

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第39张图片
training-1

正常训练如图

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第40张图片

至此,您的模型已经开始在EC2上训练

五、后续操作

1.若实例终止,重新拉取实例,接着上一次训练

请进行如下操作 #### ①.修改run.env文件 修改如下参数
### 这是上一次训练存放文件夹,请查看S3存储桶中的文件夹名称
DR_LOCAL_S3_MODEL_PREFIX=<本次训练存放S3存储桶的目录>
### 确定培训或评估是否应基于在上一个会话中创建的模型
DR_LOCAL_S3_PRETRAINED=True
### 设置本次训练的目录
DR_LOCAL_S3_PRETRAINED_PREFIX=<上一次训练存放S3存储桶的目录>
### 本次训练从上一次训练的checkpoint设置 默认为 last
DR_LOCAL_S3_PRETRAINED_CHECKPOINT=best

这是修改前的

image.png

这是修改后的

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第41张图片

查看一下s3存储桶的文件

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第42张图片

  • ②.更新,使本次配置生效

dr-update-env

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第43张图片
dr-increment-training

  • ③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传custom_files

dr-upload-custom-files

  • ④.开始训练

dr-start-training

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第44张图片
training-again

如果提示 Sagemaker is not running 请执行 dr-start-training -w
dr-start-training -w

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第45张图片
training-again-error-deal-1

run.evn配置文件参数设置,dr-命令释义

具体参数请参阅 Deepracer-for-Cloud GitHub

遇到的问题

1.NO_PUBKEY

W: GPG error: http://developer.download.nvi... Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80
E: The repository 'http://developer.download.nvi... Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

处理方案 由于本次使用 ubuntu 18.04 所以使用以下方案解决

wget -qO - http://developer.download.nvi... | sudo apt-key add -

sudo apt-get update

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第46张图片

image.png

2.Python3.6报错,更新python版本

sudo apt-get install python3.8
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2

注:
第一个参数--install表示向update-alternatives注册服务名。

第二个参数是注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链;

( --install link name path priority)

其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如java path为你所要使用新命令、新软件的所在目录 priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;# 整数 根据版本号设置的优先级(更改的优先级需要大于当前的)

第三个参数:服务名,以后管理时以它为关联依据。

第四个参数,被管理的命令绝对路径。

第五个参数,优先级,数字越大优先级越高。

3.无法获得锁

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

解决方法:
$ sudo rm /var/lib/dpkg/lock-frontend
$ sudo rm /var/lib/dpkg/lock

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第47张图片
问题3

4.如果提示 Sagemaker is not running 请执行 dr-start-training -w

dr-start-training -w

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第48张图片

training-again-error-deal-1

希望这个基础教程可以帮助到您!

使用 Amazon EC2 降低 DeepRacer 的训练成本 DeepRacer-for-cloud 的实践操作_第49张图片

你可能感兴趣的:(ec2amazon-ec2)