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