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

举报
指剑 发表于 2022/09/02 22:28:17 2022/09/02
【摘要】 CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:哪项人工智能技术使你感受到了神...

CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:哪项人工智能技术使你感受到了神奇?
话题描述:在你漫长炼丹之旅,哪一项人工智能技术最让你印象深刻?
创作模板


前言

Amazon DeepRacer 是一款 1:18 赛车,它提供了一种用强化学习 (RL) 解决自动驾驶技术的平台。RL 是一种先进的机器学习 (ML) 技术,它采用了与其他机器学习方法不同的方法来训练模型。它的强大之处在于,它不需要任何标记的训练数据就可以学习非常复杂的行为,并且可以在优化长期目标的同时做出短期决策。有了 Amazon DeepRacer,现在可通过自动驾驶亲身体验 RL、实验和学习。通过基于云的 3D 赛车模拟器开始使用虚拟汽车和赛道,并获得真实体验,可以将训练有素的模型部署到 Amazon DeepRacer 中与好友比赛,或参与全球 Amazon DeepRacer 联盟。

DeepRacer的训练成本约为3.5美元/小时,本文提供了一种基于开源DeepRacer在Amazon EC2主机上训练模型的方案,可以将DeepRacer的训练成本降低70%以上 (以us-east-1 g4dn.2xlarge机型为例)。本文的方案支持多种机型,使用者可以根据自己的需求选择。

一、技术介绍

  • 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 云服务接口非常简单,您可以最小的阻力轻松获取容量,随之配置容量。使用该服务,您将能完全控制您的计算资源,并能在亚马逊成熟且行之有效的计算环境中运行。

创建一个 AWS DeepRacing 训练环境,该环境可以部署在云中,也可以在本地部署在 Ubuntu Linux、Windows 或 Mac 上。

(本段引用自:利用Amazon EC2进一步降低DeepRacer训练成本

二、实现途径

使用 Azure N 系列虚拟机或AWS EC2 加速计算实例,或在您自己的台式机或服务器上本地启动和运行 AWS 或 Azure 中的 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

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

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

git clone https://github.com/aws-deepracer-community/deepracer-for-cloud.git

  
 
  • 1

Step-2
执行第一阶段的环境预配置代码,这会安装DeepRacer本地训练所需的基础组件,之后重启EC2实例:
这里可能会报错,请看文章末尾错误解决方案
因为这里考虑到会出错的场景 就重复执行了三行代码,请记住一定要预先 sudo apt-get update

wget -qO - http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub | sudo apt-key add -
sudo apt-get update
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
cd deepracer-for-cloud && ./bin/prepare.sh
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
cd deepracer-for-cloud && ./bin/prepare.sh
sudo reboot

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

cd deepracer-for-cloud/ && bin/init.sh -c aws -a gpu

  
 
  • 1

Step-4
启动训练
执行source bin/activate.sh 命令 加载训练DeepRacer所需的脚本;

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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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
  }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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"
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

编辑deepracer-for-cloud/run.env文件,添加如下内容:
DR_LOCAL_S3_BUCKET=<创建的bucket名字>
DR_UPLOAD_S3_BUCKET=<创建的bucket名字>

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

  
 
  • 1
  • 2

Step-5
更新python版本

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

  
 
  • 1
  • 2

Step-6
更新后,执行 dr-update 使此次配置生效;
执行 dr-upload-custom-files, 将自定义文件上传至 s3,此时 bucket 中的 custom_files 包括

Step-7
执行dr-start-training开始训练;

训练

遇到的问题

执行 sudo apt-get update 命令时遇到如下报错

W: GPG error: http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64  Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80
E: The repository 'http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64  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.

  
 
  • 1
  • 2
  • 3
  • 4

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

wget -qO - http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub | sudo apt-key add -

sudo apt-get update

  
 
  • 1
  • 2
  • 3

image.png

更新python版本

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


  
 
  • 1
  • 2
  • 3

注:

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

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

( --install link name path priority)

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

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

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

问题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?

  
 
  • 1
  • 2

解决方法:

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

  
 
  • 1
  • 2

问题3

四、总结

尽管官方博客已经写的很清楚了,但是由于环境的不停更新,导致某些细节会出现不可预知的效果,希望大家在进行学习的时候尽可能的随机应变,找出实验过程中的症结,将其记录并分享。希望这篇博客可以帮助到您。


CSDN话题挑战赛第1期活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f

文章来源: blog.csdn.net,作者:指剑,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fly1574/article/details/124744429

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。