Amazon DeepRacer 是一款 1:18 赛车,它提供了一种用强化学习 (RL) 解决自动驾驶技术的平台。强化学习 (RL) 是一种先进的机器学习 (ML) 技术,它采用了与其他机器学习方法不同的方法来训练模型。它的强大之处在于,它不需要任何标记的训练数据就可以学习非常复杂的行为,并且可以在优化长期目标的同时做出短期决策。有了 Amazon DeepRacer,现在可通过自动驾驶亲身体验强化学习 (RL)、实验和学习。通过基于云的 3D 赛车模拟器开始使用虚拟汽车和赛道,并获得真实体验,可以将训练有素的模型部署到 Amazon DeepRacer 中与好友比赛,或参与全球 Amazon DeepRacer 联盟。
Amazon DeepRacer的训练成本约为3.5美元/小时,本文提供了一种基于开源Amazon DeepRacer在Amazon EC2主机上训练模型的方案,可以将 Amazon DeepRacer的训练成本降低92%以上 (以ca-central-1 g4dn.2xlarge机型为例)。本文的方案支持多种机型,使用者可以根据自己的需求选择。
1 相关服务介绍
1.1 Amazon DeepRacer
使用 Amazon DeepRacer,您可以创建自己的机器学习模型(“训练”流程),并驾驶这些模型比赛(“评估”流程)。您需要支付训练、评估和存储机器学习模型的费用。费用基于您训练和评估新模型的时间和该模型的存储大小。此外,您还可以购买一款全自动 1/18 比例 Amazon DeepRacer 赛车,从而在真正的赛道上试验您的模型。进入 Amazon DeepRacer League 无需购买。
1.2 Amazon SageMaker
Amazon SageMaker 通过整合专门为机器学习(ML) 构建的广泛功能集,帮助数据科学家和开发人员快速准备、构建、训练和部署高质量的机器学习 (ML) 模型。利用 Amazon SageMaker,可以在云上以无服务器的方式训练 Amazon DeepRacer 模型。
Amazon RoboMaker是用于运行在云上模拟和部署机器人应用程序,利用Gazebo模拟器在训练Amazon DeepRacer时模拟真实实际。Amazon RoboMaker 是最全面的云解决方案,可供机器人开发者大规模模拟、测试和安全部署机器人应用程序。Amazon RoboMaker 提供完全托管的可扩展模拟基础设施,客户可用它进行多机器人模拟并在模拟中与回归测试进行 CI/CD 集成。此外,Amazon RoboMaker 提供 IDE、应用程序部署功能、ROS 扩展工具以及与各种 Amazon 服务的无缝集成,使客户能够创新并提供一流的机器人解决方案。Amazon RoboMaker 的托管 ROS 和 Gazebo 软件堆栈释放了很多工程资源,使您能够快速开始构建。
1.4 Amazon EC2
Amazon Elastic Compute Cloud(Amazon EC2 云服务器)是一种 Web 云服务,能在云中提供安全且可调整大小的计算能力。该服务旨在让开发人员能够更轻松地进行 Web 规模的云计算。Amazon EC2 云服务器的 Web 云服务接口非常简单,您可以最小的阻力轻松获取容量,随之配置容量。使用该服务,您将能完全控制您的计算资源,并能在亚马逊成熟且行之有效的计算环境中运行。
2 配置 Amazon EC2 训练环境
2.1 Amazon S3 Bucket创建
创建用于存放 Amazon DeepRacer 模型及训练记录的 Amazon S3 Bucket。
2.2 创建 Amazon IAM
1. 在 Amazon console 进入 Amazon IAM 服务;
2. 进入 Policies界面,点击 Create Policy 按钮;
3. 在 Service选项下,选择 Amazon S3,并添加之前创建的 Amazon S3 Bucket 的全部权限;
4. 进入Role界面,点击Create Role按钮;
5. 在 Choose a use case 选项下, 选择 Amazon EC2;
6. 在Attach permissions policies 选项下,为Amazon DeepRacer赋予以下权限:之前创建的Policy,AmazonKinesisVideoStreamsFullAccess 与 CloudWatchFullAccess
2.3 启动 Amazon EC2服务器
1. 从 Amazon EC2 界面启动 Amazon EC2 服务器,选择 Amazon Deep Learning AMI (Ubuntu 18.04);
2. 在 Choose Instance Type页面,根据自身需求选择对应机型,本文推荐选项:
g4dn.2xlarge:性价比较高的训练方式,基于GPU 加速,训练速度稍快于 Amazon DeepRacer console 训练
p3.2xlarge:训练速度远快于Amazon DeepRacer console 训练,快速迭代模型,取得训练成果
3. 在 3. Configure Instance页面,在 Amazon IAM Role 选项中,选择 2.1 中创建的 Amazon IAM Role;
4. 在 4. Add Storage页面,为 Root Volume 选择高于150GiB 的存储空间;
2.4 配置 Amazon DeepRacer 运行环境
1. 进入3创建的 Amazon EC2实例,并执行以下命令,从GitHub拉取代码:
git clone https://github.com/aws-deepracer-community/deepracer-for-cloud.git
2. 执行第一阶段的环境预配置代码,这会安装 Amazon DeepRacer本地训练所需的基础组件,之后重启 Amazon EC2实例:
cd deepracer-for-cloud && ./bin/prepare.sh
sudo reboot
*左滑查看更多
3.重新连接 Amazon EC2 实例,并执行第二阶段的环境初始化代码:
cd deepracer-for-cloud/ && bin/init.sh -c aws -a gpu
3 启动训练
1. 执行source bin/activate.sh加载训练 Amazon DeepRacer 所需的脚本;
2. 在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)
*左滑查看更多
3. 在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
}
*左滑查看更多
4. 在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"
}
*左滑查看更多
5. 编辑env文件,需要配置的内容包括:
DR_LOCAL_S3_BUCKET=<2.1中创建的bucket名字>
DR_UPLOAD_S3_BUCKET=<2.1中创建的bucket名字>
1.此外,可以在env配置训练的信息,例如:
DR_WORLD_NAME:地图名称,例如reInvent2019_track
DR_RACE_TYPE:比赛类型,例如TIME_TRIAL或HEAD_TO_MODEL
DR_EVAL_OPP_S3_MODEL_PREFIX=:模型在S3中的文件夹名
DR_CAR_COLOR=Red:小车颜色
除了常见 Amazon console中的配置,也可以配置 Amazon console中无法定义的环境变量,例如:
DR_EVAL_OFF_TRACK_PENALTY:出界惩罚分数
DR_EVAL_COLLISION_PENALT:碰撞惩罚分数
2. 更新后,执行 dr-update 使此次配置生效;
3. 执行 dr-upload-custom-files, 将自定义文件上传至 Amazon s3,此时 bucket 中的 custom_files 包括:
4. 执行dr-start-training开始训练;
5. 训练完成后,可以执行scripts/upload/upload-model.sh,该脚本会将模型上传至 Amazon S3 (训练中途停止,也可以上传checkpoint模型);
6. 如需将模型导入 Amazon DeepRacer物理小车中,可以执行scripts/upload/upload-car.sh,该脚本会将选出最优模型,并打包为适合小车读取的格式,并上传至 Amazon S3 bucket,文件名为tar.gz
4 常见问题
启动训练时报错信息:Sagemaker is not running”
解决建议
Docker 容器可能由于某些错误自动停止,执行 docker -ps a查看容器是否已停止。如果已停止,可以执行 docker logs -f查看具体错误信息
启动训练时报错信息:Selected path s3://xxx exists. Delete it, or use -w option. Exiting.
解决建议
改为执行 dr-start-training -w,强制覆盖
本篇作者
刘明
亚马逊云科技专业服务团队数据科学家
在机器学习、深度学习、数据挖掘及模型部署开发拥有扎实经验。深度参与过能源、医疗、教育、媒体等行业的机器学习应用搭建及数据平台建设。
听说,点完下面4个按钮
就不会碰到bug了!