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

DeepRacer
Amazon EC2
0
0
{"value":"#### **写在最前**\n**由于博客中已经写了具体的方案,这里将里面的脚本提取出来,并对相应的问题做解决**\n\n这里采用 Deep Learning AMI (Ubuntu 18.04) Version 60.1\n\n实例准备,我看到文章中有提到使用 G 和 P 系实例,如下:\n\ng4dn.2xlarge:性价比较高的训练方式,基于 GPU 加速,训练速度稍快于 DeepRacer console 训练\n\np3.2xlarge:训练速度远快于 DeepRacer console 训练,快速迭代模型,取得训练成果\n\n本次实践还是使用的 g4dn.2xlarge 那么我这里使用的是spot请求实例,而不是使用的On-Demand,会减少 70% 及以上的成本,不过也会出现一些问题,那么就是 US-EAST-1区域的 G 和 P 系列的实例严重不足,可能运行一会就会停掉,那么我们可以先将基础环境部署好,直接制作镜像,那么在后面使用的时候可以快速拉起实例,不需要再对基础环境做过多的配置\n\n需要注意的是,你需要查看你的 EC2 limit,默认情况下是没有G和P系列的容量的,需要提交 case 提升 limit,在提交 limit 的时候不要提交太多请求,很可能会给你驳回\n\n为了方便,我这里制作了一个 EC2的启动模板,也是为后续的训练打个基础,以免每次都需要手动配置\n\n文章目录结构:\n\n一、为 EC2创建 IAM 角色\n1.首先进入 IAM 控制台\n2.选择 EC2,点击下一步\n3.添加权限\n4.命名、查看和创建\n5.查看创建的角色\n\n二、创建存储桶\n1.进入 S3控制台\n2.创建存储桶\n3.查看创建的存储桶\n\n三、创建启动模板\n1.首先需要选择镜像\n2.设置实例类型和密钥对\n3.定义子网和安全组\n4.配置存储\n5.高级详细信息\n6.查看摘要并创建模板\n\n四、创建实例\n1.选择从模板启动实例\n2.查看 spot 请求\n\n五、连接实例并构建基础环境\nBasic.连接你的实例\n\n- ①.SecureCRT 导入密钥\n- ②.SecureCRT 连接实例\n\n接下来进入基础环境的搭建\nStep-1.拉取代码\nStep-2.安装 DeepRacer 本地训练所需的基础组件\n\n错误场景一,解决方案\n错误场景二,解决方案\nStep-3.重新连接 EC2实例,并执行第二阶段的环境初始化代码\nStep-4.加载训练 DeepRacer 所需脚本\nStep-5.编辑奖励函数,训练信息,车俩信息\nStep-6.编辑环境文件 run.env\n\n- ①.添加存储桶信息\n- ②.编辑赛道信息\n\n\nStep-7.更新 python 版本\nStep-8.更新配置\nStep-9.上传 dr-upload-custom-files 到 S3存储桶\nStep-10.启动训练\n\n六、后续操作(再训练)\n1.若实例终止,重新拉取实例,接着上一次训练\n\n- ①.修改 run.env 文件\n- ②.更新,使本次配置生效\n- ③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传custom_files\n- ④.开始训练\n\n\n七、参数、命令释义\n八、遇到的问题\n1.NO PUBKEY\n2.Python3.6报错,更新 python 版本\n3.无法获得锁\n4.Sagemaker is not running\n\n以下为具体的操作方案\n\n### **一、为 EC2创建IAM角色**\n正如 Amazon 官方博客中所说的,我们使用 EC2去训练模型会用到如下3个服务\n\n- AmazonKinesisVideoStreams\n- CloudWatch\n- S3\n\n\n那么这里进行演示创建新的 EC2角色并赋权\n\n#### **1.首先进入 IAM 控制台**\nIAM 创建新角色控制台:[https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fiamv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523%252Froles%252Fcreate%253Fstep%253DselectEntities%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fiamv2&forceMobileApp=0&code_challenge=S4EeRVTRJ5sKS-ZV3snqSZl06blW5F-aGzj8sqcZBes&code_challenge_method=SHA-256](https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fiamv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523%252Froles%252Fcreate%253Fstep%253DselectEntities%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fiamv2&forceMobileApp=0&code_challenge=S4EeRVTRJ5sKS-ZV3snqSZl06blW5F-aGzj8sqcZBes&code_challenge_method=SHA-256)\n\n#### **2.选择 EC2,点击下一步**\n\n![image.png](1)\n\n*控制面板-1*\n\n#### **3.添加权限**\n依次搜索 S3,CloudWatch,AmazonKinesisVideoStreams,如下图 都需要 选择 FullAccess 结尾的,代表完全访问\n\n![image.png](2)\n\n![image.png](3)\n\n![image.png](4)\n\n3个权限都添加完成后,点击下一步\n\n#### **4.命名、查看和创建**\n\n- ①.设置角色名称\n\n![image.png](5)\n\nSetRoleName\n\n- ②.查看角色附加的权限\n\n![image.png](6)\n\n*CheckRole_policy*\n\n- ③.准备创建\n\n\n**根据自身需求是否添加标签(可选)**\n\n![image.png](7)\n\n#### **5.查看创建的角色**\n\n\n![image.png](8)\n\n*Check_Create_role*\n\n#### **### **二、创建存储桶**\n1.进入 S3控制台**\n\nS3存储桶控制面板:[https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fs3.console.aws.amazon.com%2Fs3%2F%3Fstate%3DhashArgs%2523%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fs3&forceMobileApp=0&code_challenge=2Dewsj2gE4EvXnmZNMyaPe7VF7yZgNqhQWLACXXUPek&code_challenge_method=SHA-256](https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fs3.console.aws.amazon.com%2Fs3%2F%3Fstate%3DhashArgs%2523%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fs3&forceMobileApp=0&code_challenge=2Dewsj2gE4EvXnmZNMyaPe7VF7yZgNqhQWLACXXUPek&code_challenge_method=SHA-256)\n\n\n![image.png](9)\n\n#### **2.创建存储桶**\n此处只需要设置存储桶名称和区域,其他设置保持默认即可\n\n![image.png](10)\n\n滑到最下面点击 创建存储桶\n\n#### **3.查看创建的存储桶**\n\n![image.png](11)\n\n*Check_bk*\n\n### **三、创建启动模板**\nEC2启动模板控制面板:[https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523LaunchTemplates%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&forceMobileApp=0&code_challenge=T8JREpKdgNEuxFi2p4bh3g7sShf57gqg2-JlAPOhkw0&code_challenge_method=SHA-256](https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523LaunchTemplates%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&forceMobileApp=0&code_challenge=T8JREpKdgNEuxFi2p4bh3g7sShf57gqg2-JlAPOhkw0&code_challenge_method=SHA-256)\n\n#### **1.首先需要选择镜像**\n请选择 Deep Learning AMI(Ubuntu 18.04) 镜像\n\n![image.png](12)\n\n#### **2.设置实例类型和密钥对**\n虽然官方给出的提示是不要在模板中包含这两个参数,但是本次实验是为了后面多次部署节省时间,就预先在模板中定义\n\n![image.png](13)\n\n#### **3.定义子网和安全组**\n由于本次我需要使用到 spot 请求,就不对子网进行设置,待会 spot 会在 us-east-1任意一个区域进行请求\n\n![image.png](14)\n\n#### **4.配置存储**\n官方博客给出配置说明为:根卷至少要高于150GiB 的空间,这里设置为160GiB,我们还可以看到,AMI 有一个存储卷,有225GB\n\n![image.png](15)\n\n#### **5.高级详细信息**\n这里我勾选了 请求 spot 实例,为了降低成本,这里可以根据用户的自身情况是否勾选 然后在 IAM 角色这里,要选择我们预先为 EC2创建的角色\n\n![image.png](16)\n\n#### **6.查看摘要并创建模板**\n\n![image.png](17)\n\n![image.png](18)\n\n### **四、创建实例**\nEC2实例控制台:[https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523Instances%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&forceMobileApp=0&code_challenge=YvHdi2FQqC5JIdOzDKEthL14aO4SZFGalQsi-cn8pGs&code_challenge_method=SHA-256](https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523Instances%26isauthcode%3Dtrue&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&forceMobileApp=0&code_challenge=YvHdi2FQqC5JIdOzDKEthL14aO4SZFGalQsi-cn8pGs&code_challenge_method=SHA-256)\n\n#### **1.选择从模板启动实例**\n这里选择之前创建的模板\n\n![image.png](19)\n\n确认无误后,启动实例\n\n![image.png](20)\n\n查看创建成功的实例 如果您勾选了 spot 请求实例,并且在启动实例报错,提示没有 spot 额度,并且您在确保您账号有足够的 limit,那么可能该区域的该时段没有可供您使用的 spot 实例,请使用按需实例进行创建\n\n![image.png](21)\n\n#### **2.查看 spot 请求**\n如果您在实例模板中勾选了 spot 请求实例,并且成功启动,那么您可以在 spot 请求控制面板看到您的实例\n\n![image.png](22)\n\n### **五、连接实例并构建基础环境**\n这里还是采用 Amazon 官方博客所给出的安装步骤\n\n还是做一个很基础的展示,如何连接 EC2,我这里采用的是 SecureCRT 连接工具\n\n**Basic.连接你的实例**\n\n这里只支持使用以.pem 类型的密钥(与 OpenSSH 共用),若您是.ppk类型的,请使用 putty 进行连接\n\n- ①.SecureCRT 导入密钥\n\n![image.png](23)\n\n![image.png](25)\n\n![image.png](24)\n\n- ②.SecureCRT连接实例\n\n\n请注意,因为我们使用的是 Ubuntu 的镜像,那么这里使用的用户名为 \n ubuntu\n\n![image.png](26)\n\n连接后,若弹出提示框,请点击 接受并保存\n\n![image.png](27)\n\n*SecureCRT 连接实例成功*\n\n接下来进入基础环境的搭建\n\n[AWS DeepRacer](https://aws.amazon.com/cn/deepracer/?trk=cndc-detail)-for-Cloud 安装训练脚本如下\n\n- Step-1.拉取代码\n\n\n进入创建的 EC2实例,并执行以下命令,从 GitHub 拉取代码:\n\ngit clone [https://github.com/aws-deepracer-community/deepracer-for-cloud](https://github.com/aws-deepracer-community/deepracer-for-cloud)\n\n![image.png](28)\n\n*git code*\n\n- Step-2.安装 DeepRacer 本地训练所需的基础组件\n\n\n执行第一阶段的环境预配置代码,这会安装 DeepRacer 本地训练所需的基础组件,之后重启 EC2实例: 这一步官方给出的只有2行代码,那么在实际的执行过程中,因为版本的变化,衍生出了一些新的问题\n\ncd deepracer-for-cloud && ./bin/prepare.sh\nsudo reboot\n\n![image.png](29)\n\n*本地基础环境-1*\n\n\n因为这里考虑到会出错的场景,在这里进行额外操作 这里贴出实际报错场景一,提示 NO_PUBKEY\n\n![image.png](30)\n\n错误场景一,解决方案\n\n```### 添加PUBKEY```\n\nwget -qO - [http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub](http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub) | sudo apt-key add -\n\n```### 更新```\n\nsudo apt-get update\n\n```\\n### 重新执行,请确保您不在 deepracer-for-cloud目录中,请回到ubuntu的home目录下\\n```\n\ncd deepracer-for-cloud && ./bin/prepare.sh\n\n```### 重启```\nsudo reboot\n\n![image.png](31)\n\n![image.png](32)\n\n若出现如下进度条,则表示错误已修复,正在安装基础环境\n\n![image.png](33)\n\n错误场景二,解决方案\n\n若没有出现进度条,并出现如下错误,可能会出现多次\n\nE: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?\n\n请运行一下代码解决,并重新执行基础环境安装命令\n\nsudo rm /var/lib/dpkg/lock-frontend\nsudo rm /var/lib/dpkg/lock\n\n```\\n### 重新执行,请确保您不在 deepracer-for-cloud目录中,请回到ubuntu的home目录下\\n```\n\ncd deepracer-for-cloud && ./bin/prepare.sh\n\n```### 重启```\n\nsudo reboot\n\n- Step-3.重新连接 EC2实例,并执行第二阶段的环境初始化代码\n\n\n```### 请确保您此时在ubuntu的home目录下```\n\n\ncd deepracer-for-cloud/ && bin/init.sh -c aws -a gpu\n此时环境初始化,需要拉取很多的容器镜像,请耐心等待完成\n\n![image.png](34)\n\n环境初始化完成,如下\n\n![image.png](35)\n\n- Step-4.加载训练 DeepRacer 所需脚本\n\n\nsource bin/activate.sh\n\n- Step-5.编辑奖励函数,训练信息,车俩信息\n\n\n在 deepracer-for-cloud 目录中有一个 custom_files 目录,里面带有3个文件,分别为:\n\nreward_function.py #奖励函数文件\nhyperparameters.json #训练信息文件\nmodel_metadata.json #车俩信息文件\n在deepracer-for-cloud/custom_files/reward_function.py文件中编辑奖励函数\n\n```\\ndef reward_function(params):\\n'''\\nExample of penalize steering, which helps mitigate zig-zag behaviors\\n'''\\n\\n# Read input parameters\\ndistance_from_center = params['distance_from_center']\\ntrack_width = params['track_width']\\nsteering = abs(params['steering_angle']) # Only need the absolute steering angle\\n\\n# Calculate 3 marks that are farther and father away from the center line\\nmarker_1 = 0.1 * track_width\\nmarker_2 = 0.25 * track_width\\nmarker_3 = 0.5 * track_width\\n\\n# Give higher reward if the car is closer to center line and vice versa\\nif distance_from_center <= marker_1:\\n reward = 1\\nelif distance_from_center <= marker_2:\\n reward = 0.5\\nelif distance_from_center <= marker_3:\\n reward = 0.1\\nelse:\\n reward = 1e-3 # likely crashed/ close to off track\\n\\n# Steering penality threshold, change the number based on your action space setting\\nABS_STEERING_THRESHOLD = 15\\n\\n# Penalize reward if the car is steering too much\\nif steering > ABS_STEERING_THRESHOLD:\\n reward *= 0.8\\n\\nreturn float(reward)\\n```\n\n在 deepracer-for-cloud/custom_files/hyperparameters.json 文件中编辑训练信息,例如:\n\n{\n \"batch_size\": 64,\n \"beta_entropy\": 0.01,\n \"discount_factor\": 0.995,\n \"e_greedy_value\": 0.05,\n \"epsilon_steps\": 10000,\n \"exploration_type\": \"categorical\",\n \"loss_type\": \"huber\",\n \"lr\": 0.0003,\n \"num_episodes_between_training\": 20,\n \"num_epochs\": 10,\n \"stack_size\": 1,\n \"term_cond_avg_score\": 350.0,\n \"term_cond_max_episodes\": 1000,\n \"sac_alpha\": 0.2\n}\n在deepracer-for-cloud/custom_files/model_metadata.json文件中编辑车辆信息,包括action space、传感器以及神经网络类型等,例如:\n ```\\n {\\n \\"action_space\\": [\\n {\\n \\"steering_angle\\": -30,\\n \\"speed\\": 0.6\\n },\\n {\\n \\"steering_angle\\": -15,\\n \\"speed\\": 0.6\\n },\\n {\\n \\"steering_angle\\": 0,\\n \\"speed\\": 0.6\\n },\\n {\\n \\"steering_angle\\": 15,\\n \\"speed\\": 0.6\\n },\\n {\\n \\"steering_angle\\": 30,\\n \\"speed\\": 0.6\\n }\\n ],\\n \\"sensor\\": [\\"FRONT_FACING_CAMERA\\"],\\n \\"neural_network\\": \\"DEEP_CONVOLUTIONAL_NETWORK_SHALLOW\\",\\n \\"training_algorithm\\": \\"clipped_ppo\\",\\n \\"action_space_type\\": \\"discrete\\",\\n \\"version\\": \\"3\\"\\n}\\n```\n\n- Step-6.编辑环境文件 run.env\n- ①.添加存储桶信息\n\n\n编辑 deepracer-for-cloud/run.env 文件,添加如下内容:\n\nDR_LOCAL_S3_BUCKET=<创建的bucket名字>\\nDR_UPLOAD_S3_BUCKET=<创建的bucket名字>\\n\\n也可以使用命令,请将 <创建的bucket名字> 替换为您之前创建的S3存储桶的名字\\n\\nsed -i '1i\\\\DR_LOCAL_S3_BUCKET=<创建的bucket名字>' run.env\\nsed -i '1i\\\\DR_UPLOAD_S3_BUCKET=<创建的bucket名字>' run.env\\n\\n这里我创建的存储桶名字为:deepracer-demo-bk,作为演示\\n\\n![image.png](36)\\n\\n- ②.编辑赛道信息\\n\\n\\n我这里使用的是 re:Invent 2018 赛道,其 DR_WORLD_NAME 为reinvent_base 请在 run.env 文件中找到 DR_WORLD_NAME 修改其值\\n\\n![image.png](37)\\n\\n*修改赛道信息*\\n\\n- Step-7.更新python版本\\n\\n\\n由于该镜像自带是 python 3.6,这里已经不支持了,所有需要更新 python 版本 请执行一下命令更新 python3\\n\\n```### 安装python 3.8```\\n\\n\\nsudo apt-get -y install python3.8\\n\\nsudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2\\n\\n![image.png](38)\\n\\n安装 python3.8\\n\\n- Step-8.更新配置\\n\\n\\n```### 执行如下代码,使此处配置生效```\\n\\ndr-update\\n\\n![image.png](39)\\n\\ndr-update\\n\\n- Step-9.上传 dr-upload-custom-files 到 S3存储桶\\n\\n\\ndr-upload-custom-files\\n\\n![image.png](40)\\n\\n此时 S3存储桶中的 custom-files 应该包含下图文件\\n\\n![image.png](41)\\n\\n- Step-10.启动训练\\n\\n\\n执行如下命令开始训练\\n\\ndr-start-training\\n\\n![image.png](42)\\n\\n*training-1*\\n\\n正常训练如图\\n\\n![image.png](43)\\n\\n至此,您的模型已经开始在EC2上训练\\n\\n### **五、后续操作**\\n#### **1.若实例终止,重新拉取实例,接着上一次训练**\\n\\n请进行如下操作 #### ①.修改run.env文件 修改如下参数\\n\\n```### 这是上一次训练存放文件夹,请查看S3存储桶中的文件夹名称```\\n\\nDR_LOCAL_S3_MODEL_PREFIX=<本次训练存放S3存储桶的目录>\\n\\n```### 确定培训或评估是否应基于在上一个会话中创建的模型```\\nDR_LOCAL_S3_PRETRAINED=True\\n\\n```### 设置本次训练的目录```\\n\\nDR_LOCAL_S3_PRETRAINED_PREFIX=<上一次训练存放S3存储桶的目录>\\n```### 本次训练从上一次训练的checkpoint设置 默认为 last```\\n\\nDR_LOCAL_S3_PRETRAINED_CHECKPOINT=best\\n\\n这是修改前的\\n\\n![image.png](44)\\n\\n这是修改后的\\n\\n![image.png](45)\\n\\n查看一下 s3存储桶的文件\\n\\n![image.png](46)\\n\\n- ②.更新,使本次配置生效\\n\\n\\ndr-update-env\\n\\n![image.png](47)\\n\\n*dr-increment-training*\\n\\n- ③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传custom_files\\n\\n\\ndr-upload-custom-files\\n\\n- ④.开始训练\\n\\n\\ndr-start-training\\n\\n![image.png](1)\\n\\n*training-again*\\n\\n如果提示 Sagemaker is not running 请执行 dr-start-training -w\\ndr-start-training -w\\n\\n![image.png](2)\\n\\ntraining-again-error-deal-1\\n\\nrun.evn 配置文件参数设置,dr-命令释义\\n\\n具体参数请参阅 Deepracer-for-Cloud GitHub\\n\\n### **遇到的问题**\\n#### **1.NO_PUBKEY**\\n\\nW: GPG error: [http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/](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\\nE: The repository '[http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/](http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/) Release' is not signed.\\nN: Updating from such a repository can't be done securely, and is therefore disabled by default.\\nN: See apt-secure(8) manpage for repository creation and user configuration details.\\n\\n处理方案 由于本次使用 ubuntu 18.04 所以使用以下方案解决\\n\\nwget -qO - [http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub](http://developer.download.nvi...) | sudo apt-key add -\\n\\nsudo apt-get update\\n\\n![image.png](3)\\n\\n#### **2.Python3.6报错,更新python版本**\\nsudo apt-get install python3.8\\nsudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2\\n\\n注:\\n第一个参数--install表示向update-alternatives注册服务名。\\n\\n第二个参数是注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链;\\n\\n( --install link name path priority)\\n\\n其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如java path为你所要使用新命令、新软件的所在目录 priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;# 整数 根据版本号设置的优先级(更改的优先级需要大于当前的)\\n\\n第三个参数:服务名,以后管理时以它为关联依据。\\n\\n第四个参数,被管理的命令绝对路径。\\n\\n第五个参数,优先级,数字越大优先级越高。\\n\\n#### **3.无法获得锁**\\nE: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)\\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?\\n\\n解决方法:\\n\$ sudo rm /var/lib/dpkg/lock-frontend\\n\$ sudo rm /var/lib/dpkg/lock\\n\\n![image.png](4)\\n\\n*问题3*\\n\\n#### **4.如果提示 Sagemaker is not running 请执行 dr-start-training -w**\\ndr-start-training -w\\n\\n![image.png](5)\\n\\ntraining-again-error-deal-1\\n\\n希望这个基础教程可以帮助到您!\\n\\n![image.png](6)","render":"<h4><a id=\\"_0\\"></a><strong>写在最前</strong></h4>\\n<p><strong>由于博客中已经写了具体的方案,这里将里面的脚本提取出来,并对相应的问题做解决</strong></p>\\n<p>这里采用 Deep Learning AMI (Ubuntu 18.04) Version 60.1</p>\n<p>实例准备,我看到文章中有提到使用 G 和 P 系实例,如下:</p>\n<p>g4dn.2xlarge:性价比较高的训练方式,基于 GPU 加速,训练速度稍快于 DeepRacer console 训练</p>\n<p>p3.2xlarge:训练速度远快于 DeepRacer console 训练,快速迭代模型,取得训练成果</p>\n<p>本次实践还是使用的 g4dn.2xlarge 那么我这里使用的是spot请求实例,而不是使用的On-Demand,会减少 70% 及以上的成本,不过也会出现一些问题,那么就是 US-EAST-1区域的 G 和 P 系列的实例严重不足,可能运行一会就会停掉,那么我们可以先将基础环境部署好,直接制作镜像,那么在后面使用的时候可以快速拉起实例,不需要再对基础环境做过多的配置</p>\n<p>需要注意的是,你需要查看你的 EC2 limit,默认情况下是没有G和P系列的容量的,需要提交 case 提升 limit,在提交 limit 的时候不要提交太多请求,很可能会给你驳回</p>\n<p>为了方便,我这里制作了一个 EC2的启动模板,也是为后续的训练打个基础,以免每次都需要手动配置</p>\n<p>文章目录结构:</p>\n<p>一、为 EC2创建 IAM 角色<br />\\n1.首先进入 IAM 控制台<br />\\n2.选择 EC2,点击下一步<br />\\n3.添加权限<br />\\n4.命名、查看和创建<br />\\n5.查看创建的角色</p>\n<p>二、创建存储桶<br />\\n1.进入 S3控制台<br />\\n2.创建存储桶<br />\\n3.查看创建的存储桶</p>\n<p>三、创建启动模板<br />\\n1.首先需要选择镜像<br />\\n2.设置实例类型和密钥对<br />\\n3.定义子网和安全组<br />\\n4.配置存储<br />\\n5.高级详细信息<br />\\n6.查看摘要并创建模板</p>\n<p>四、创建实例<br />\\n1.选择从模板启动实例<br />\\n2.查看 spot 请求</p>\n<p>五、连接实例并构建基础环境<br />\\nBasic.连接你的实例</p>\n<ul>\\n<li>①.SecureCRT 导入密钥</li>\n<li>②.SecureCRT 连接实例</li>\n</ul>\\n<p>接下来进入基础环境的搭建<br />\\nStep-1.拉取代码<br />\\nStep-2.安装 DeepRacer 本地训练所需的基础组件</p>\n<p>错误场景一,解决方案<br />\\n错误场景二,解决方案<br />\\nStep-3.重新连接 EC2实例,并执行第二阶段的环境初始化代码<br />\\nStep-4.加载训练 DeepRacer 所需脚本<br />\\nStep-5.编辑奖励函数,训练信息,车俩信息<br />\\nStep-6.编辑环境文件 run.env</p>\n<ul>\\n<li>①.添加存储桶信息</li>\n<li>②.编辑赛道信息</li>\n</ul>\\n<p>Step-7.更新 python 版本<br />\\nStep-8.更新配置<br />\\nStep-9.上传 dr-upload-custom-files 到 S3存储桶<br />\\nStep-10.启动训练</p>\n<p>六、后续操作(再训练)<br />\\n1.若实例终止,重新拉取实例,接着上一次训练</p>\n<ul>\\n<li>①.修改 run.env 文件</li>\n<li>②.更新,使本次配置生效</li>\n<li>③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传custom_files</li>\n<li>④.开始训练</li>\n</ul>\\n<p>七、参数、命令释义<br />\\n八、遇到的问题<br />\\n1.NO PUBKEY<br />\\n2.Python3.6报错,更新 python 版本<br />\\n3.无法获得锁<br />\\n4.Sagemaker is not running</p>\n<p>以下为具体的操作方案</p>\n<h3><a id=\\"_EC2IAM_87\\"></a><strong>一、为 EC2创建IAM角色</strong></h3>\\n<p>正如 Amazon 官方博客中所说的,我们使用 EC2去训练模型会用到如下3个服务</p>\n<ul>\\n<li>AmazonKinesisVideoStreams</li>\n<li>CloudWatch</li>\n<li>S3</li>\n</ul>\\n<p>那么这里进行演示创建新的 EC2角色并赋权</p>\n<h4><a id=\\"1_IAM__97\\"></a><strong>1.首先进入 IAM 控制台</strong></h4>\\n<p>IAM 创建新角色控制台:<a href=\\"https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fiamv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523%252Froles%252Fcreate%253Fstep%253DselectEntities%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fiamv2&amp;forceMobileApp=0&amp;code_challenge=S4EeRVTRJ5sKS-ZV3snqSZl06blW5F-aGzj8sqcZBes&amp;code_challenge_method=SHA-256\\" target=\\"_blank\\">https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fiamv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523%252Froles%252Fcreate%253Fstep%253DselectEntities%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fiamv2&amp;forceMobileApp=0&amp;code_challenge=S4EeRVTRJ5sKS-ZV3snqSZl06blW5F-aGzj8sqcZBes&amp;code_challenge_method=SHA-256</a></p>\\n<h4><a id=\\"2_EC2_100\\"></a><strong>2.选择 EC2,点击下一步</strong></h4>\\n<p><img src=\\"1\\" alt=\\"image.png\\" /></p>\n<p><em>控制面板-1</em></p>\\n<h4><a id=\\"3_106\\"></a><strong>3.添加权限</strong></h4>\\n<p>依次搜索 S3,CloudWatch,AmazonKinesisVideoStreams,如下图 都需要 选择 FullAccess 结尾的,代表完全访问</p>\n<p><img src=\\"2\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"3\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"4\\" alt=\\"image.png\\" /></p>\n<p>3个权限都添加完成后,点击下一步</p>\n<h4><a id=\\"4_117\\"></a><strong>4.命名、查看和创建</strong></h4>\\n<ul>\\n<li>①.设置角色名称</li>\n</ul>\\n<p><img src=\\"5\\" alt=\\"image.png\\" /></p>\n<p>SetRoleName</p>\n<ul>\\n<li>②.查看角色附加的权限</li>\n</ul>\\n<p><img src=\\"6\\" alt=\\"image.png\\" /></p>\n<p><em>CheckRole_policy</em></p>\\n<ul>\\n<li>③.准备创建</li>\n</ul>\\n<p><strong>根据自身需求是否添加标签(可选)</strong></p>\\n<p><img src=\\"7\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"5_138\\"></a><strong>5.查看创建的角色</strong></h4>\\n<p><img src=\\"8\\" alt=\\"image.png\\" /></p>\n<p><em>Check_Create_role</em></p>\\n<h4><a id=\\"__145\\"></a>**### <strong>二、创建存储桶</strong></h4>\\n<p>1.进入 S3控制台**</p>\n<p>S3存储桶控制面板:<a href=\\"https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fs3.console.aws.amazon.com%2Fs3%2F%3Fstate%3DhashArgs%2523%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fs3&amp;forceMobileApp=0&amp;code_challenge=2Dewsj2gE4EvXnmZNMyaPe7VF7yZgNqhQWLACXXUPek&amp;code_challenge_method=SHA-256\\" target=\\"_blank\\">https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fs3.console.aws.amazon.com%2Fs3%2F%3Fstate%3DhashArgs%2523%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fs3&amp;forceMobileApp=0&amp;code_challenge=2Dewsj2gE4EvXnmZNMyaPe7VF7yZgNqhQWLACXXUPek&amp;code_challenge_method=SHA-256</a></p>\\n<p><img src=\\"9\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"2_153\\"></a><strong>2.创建存储桶</strong></h4>\\n<p>此处只需要设置存储桶名称和区域,其他设置保持默认即可</p>\n<p><img src=\\"10\\" alt=\\"image.png\\" /></p>\n<p>滑到最下面点击 创建存储桶</p>\n<h4><a id=\\"3_160\\"></a><strong>3.查看创建的存储桶</strong></h4>\\n<p><img src=\\"11\\" alt=\\"image.png\\" /></p>\n<p><em>Check_bk</em></p>\\n<h3><a id=\\"_166\\"></a><strong>三、创建启动模板</strong></h3>\\n<p>EC2启动模板控制面板:<a href=\\"https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523LaunchTemplates%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&amp;forceMobileApp=0&amp;code_challenge=T8JREpKdgNEuxFi2p4bh3g7sShf57gqg2-JlAPOhkw0&amp;code_challenge_method=SHA-256\\" target=\\"_blank\\">https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523LaunchTemplates%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&amp;forceMobileApp=0&amp;code_challenge=T8JREpKdgNEuxFi2p4bh3g7sShf57gqg2-JlAPOhkw0&amp;code_challenge_method=SHA-256</a></p>\\n<h4><a id=\\"1_169\\"></a><strong>1.首先需要选择镜像</strong></h4>\\n<p>请选择 Deep Learning AMI(Ubuntu 18.04) 镜像</p>\n<p><img src=\\"12\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"2_174\\"></a><strong>2.设置实例类型和密钥对</strong></h4>\\n<p>虽然官方给出的提示是不要在模板中包含这两个参数,但是本次实验是为了后面多次部署节省时间,就预先在模板中定义</p>\n<p><img src=\\"13\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"3_179\\"></a><strong>3.定义子网和安全组</strong></h4>\\n<p>由于本次我需要使用到 spot 请求,就不对子网进行设置,待会 spot 会在 us-east-1任意一个区域进行请求</p>\n<p><img src=\\"14\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"4_184\\"></a><strong>4.配置存储</strong></h4>\\n<p>官方博客给出配置说明为:根卷至少要高于150GiB 的空间,这里设置为160GiB,我们还可以看到,AMI 有一个存储卷,有225GB</p>\n<p><img src=\\"15\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"5_189\\"></a><strong>5.高级详细信息</strong></h4>\\n<p>这里我勾选了 请求 spot 实例,为了降低成本,这里可以根据用户的自身情况是否勾选 然后在 IAM 角色这里,要选择我们预先为 EC2创建的角色</p>\n<p><img src=\\"16\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"6_194\\"></a><strong>6.查看摘要并创建模板</strong></h4>\\n<p><img src=\\"17\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"18\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"_200\\"></a><strong>四、创建实例</strong></h3>\\n<p>EC2实例控制台:<a href=\\"https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523Instances%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&amp;forceMobileApp=0&amp;code_challenge=YvHdi2FQqC5JIdOzDKEthL14aO4SZFGalQsi-cn8pGs&amp;code_challenge_method=SHA-256\\" target=\\"_blank\\">https://signin.aws.amazon.com/signin?redirect_uri=https%3A%2F%2Fus-east-1.console.aws.amazon.com%2Fec2%2Fv2%2Fhome%3Fregion%3Dus-east-1%26state%3DhashArgs%2523Instances%26isauthcode%3Dtrue&amp;client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fec2&amp;forceMobileApp=0&amp;code_challenge=YvHdi2FQqC5JIdOzDKEthL14aO4SZFGalQsi-cn8pGs&amp;code_challenge_method=SHA-256</a></p>\\n<h4><a id=\\"1_203\\"></a><strong>1.选择从模板启动实例</strong></h4>\\n<p>这里选择之前创建的模板</p>\n<p><img src=\\"19\\" alt=\\"image.png\\" /></p>\n<p>确认无误后,启动实例</p>\n<p><img src=\\"20\\" alt=\\"image.png\\" /></p>\n<p>查看创建成功的实例 如果您勾选了 spot 请求实例,并且在启动实例报错,提示没有 spot 额度,并且您在确保您账号有足够的 limit,那么可能该区域的该时段没有可供您使用的 spot 实例,请使用按需实例进行创建</p>\n<p><img src=\\"21\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"2_spot__216\\"></a><strong>2.查看 spot 请求</strong></h4>\\n<p>如果您在实例模板中勾选了 spot 请求实例,并且成功启动,那么您可以在 spot 请求控制面板看到您的实例</p>\n<p><img src=\\"22\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"_221\\"></a><strong>五、连接实例并构建基础环境</strong></h3>\\n<p>这里还是采用 Amazon 官方博客所给出的安装步骤</p>\n<p>还是做一个很基础的展示,如何连接 EC2,我这里采用的是 SecureCRT 连接工具</p>\n<p><strong>Basic.连接你的实例</strong></p>\\n<p>这里只支持使用以.pem 类型的密钥(与 OpenSSH 共用),若您是.ppk类型的,请使用 putty 进行连接</p>\n<ul>\\n<li>①.SecureCRT 导入密钥</li>\n</ul>\\n<p><img src=\\"23\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"25\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"24\\" alt=\\"image.png\\" /></p>\n<ul>\\n<li>②.SecureCRT连接实例</li>\n</ul>\\n<p>请注意,因为我们使用的是 Ubuntu 的镜像,那么这里使用的用户名为<br />\\nubuntu</p>\n<p><img src=\\"26\\" alt=\\"image.png\\" /></p>\n<p>连接后,若弹出提示框,请点击 接受并保存</p>\n<p><img src=\\"27\\" alt=\\"image.png\\" /></p>\n<p><em>SecureCRT 连接实例成功</em></p>\\n<p>接下来进入基础环境的搭建</p>\n<p>AWS DeepRacer-for-Cloud 安装训练脚本如下</p>\n<ul>\\n<li>Step-1.拉取代码</li>\n</ul>\\n<p>进入创建的 EC2实例,并执行以下命令,从 GitHub 拉取代码:</p>\n<p>git clone <a href=\\"https://github.com/aws-deepracer-community/deepracer-for-cloud\\" target=\\"_blank\\">https://github.com/aws-deepracer-community/deepracer-for-cloud</a></p>\\n<p><img src=\\"28\\" alt=\\"image.png\\" /></p>\n<p><em>git code</em></p>\\n<ul>\\n<li>Step-2.安装 DeepRacer 本地训练所需的基础组件</li>\n</ul>\\n<p>执行第一阶段的环境预配置代码,这会安装 DeepRacer 本地训练所需的基础组件,之后重启 EC2实例: 这一步官方给出的只有2行代码,那么在实际的执行过程中,因为版本的变化,衍生出了一些新的问题</p>\n<p>cd deepracer-for-cloud &amp;&amp; ./bin/prepare.sh<br />\\nsudo reboot</p>\n<p><img src=\\"29\\" alt=\\"image.png\\" /></p>\n<p><em>本地基础环境-1</em></p>\\n<p>因为这里考虑到会出错的场景,在这里进行额外操作 这里贴出实际报错场景一,提示 NO_PUBKEY</p>\n<p><img src=\\"30\\" alt=\\"image.png\\" /></p>\n<p>错误场景一,解决方案</p>\n<p><code>### 添加PUBKEY</code></p>\\n<p>wget -qO - <a href=\\"http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub\\" target=\\"_blank\\">http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub</a> | sudo apt-key add -</p>\\n<p><code>### 更新</code></p>\\n<p>sudo apt-get update</p>\n<pre><code class=\\"lang-\\">### 重新执行,请确保您不在 deepracer-for-cloud目录中,请回到ubuntu的home目录下\\n</code></pre>\\n<p>cd deepracer-for-cloud &amp;&amp; ./bin/prepare.sh</p>\n<p><code>### 重启</code><br />\\nsudo reboot</p>\n<p><img src=\\"31\\" alt=\\"image.png\\" /></p>\n<p><img src=\\"32\\" alt=\\"image.png\\" /></p>\n<p>若出现如下进度条,则表示错误已修复,正在安装基础环境</p>\n<p><img src=\\"33\\" alt=\\"image.png\\" /></p>\n<p>错误场景二,解决方案</p>\n<p>若没有出现进度条,并出现如下错误,可能会出现多次</p>\n<p>E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)<br />\\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?</p>\n<p>请运行一下代码解决,并重新执行基础环境安装命令</p>\n<p>sudo rm /var/lib/dpkg/lock-frontend<br />\\nsudo rm /var/lib/dpkg/lock</p>\n<pre><code class=\\"lang-\\">### 重新执行,请确保您不在 deepracer-for-cloud目录中,请回到ubuntu的home目录下\\n</code></pre>\\n<p>cd deepracer-for-cloud &amp;&amp; ./bin/prepare.sh</p>\n<p><code>### 重启</code></p>\\n<p>sudo reboot</p>\n<ul>\\n<li>Step-3.重新连接 EC2实例,并执行第二阶段的环境初始化代码</li>\n</ul>\\n<p><code>### 请确保您此时在ubuntu的home目录下</code></p>\\n<p>cd deepracer-for-cloud/ &amp;&amp; bin/init.sh -c aws -a gpu<br />\\n此时环境初始化,需要拉取很多的容器镜像,请耐心等待完成</p>\n<p><img src=\\"34\\" alt=\\"image.png\\" /></p>\n<p>环境初始化完成,如下</p>\n<p><img src=\\"35\\" alt=\\"image.png\\" /></p>\n<ul>\\n<li>Step-4.加载训练 DeepRacer 所需脚本</li>\n</ul>\\n<p>source bin/activate.sh</p>\n<ul>\\n<li>Step-5.编辑奖励函数,训练信息,车俩信息</li>\n</ul>\\n<p>在 deepracer-for-cloud 目录中有一个 custom_files 目录,里面带有3个文件,分别为:</p>\n<p>reward_function.py #奖励函数文件<br />\\nhyperparameters.json #训练信息文件<br />\\nmodel_metadata.json #车俩信息文件<br />\\n在deepracer-for-cloud/custom_files/reward_function.py文件中编辑奖励函数</p>\n<pre><code class=\\"lang-\\">def reward_function(params):\\n'''\\nExample of penalize steering, which helps mitigate zig-zag behaviors\\n'''\\n\\n# Read input parameters\\ndistance_from_center = params['distance_from_center']\\ntrack_width = params['track_width']\\nsteering = abs(params['steering_angle']) # Only need the absolute steering angle\\n\\n# Calculate 3 marks that are farther and father away from the center line\\nmarker_1 = 0.1 * track_width\\nmarker_2 = 0.25 * track_width\\nmarker_3 = 0.5 * track_width\\n\\n# Give higher reward if the car is closer to center line and vice versa\\nif distance_from_center &lt;= marker_1:\\n reward = 1\\nelif distance_from_center &lt;= marker_2:\\n reward = 0.5\\nelif distance_from_center &lt;= marker_3:\\n reward = 0.1\\nelse:\\n reward = 1e-3 # likely crashed/ close to off track\\n\\n# Steering penality threshold, change the number based on your action space setting\\nABS_STEERING_THRESHOLD = 15\\n\\n# Penalize reward if the car is steering too much\\nif steering &gt; ABS_STEERING_THRESHOLD:\\n reward *= 0.8\\n\\nreturn float(reward)\\n</code></pre>\\n<p>在 deepracer-for-cloud/custom_files/hyperparameters.json 文件中编辑训练信息,例如:</p>\n<p>{<br />\\n“batch_size”: 64,<br />\\n“beta_entropy”: 0.01,<br />\\n“discount_factor”: 0.995,<br />\\n“e_greedy_value”: 0.05,<br />\\n“epsilon_steps”: 10000,<br />\\n“exploration_type”: “categorical”,<br />\\n“loss_type”: “huber”,<br />\\n“lr”: 0.0003,<br />\\n“num_episodes_between_training”: 20,<br />\\n“num_epochs”: 10,<br />\\n“stack_size”: 1,<br />\\n“term_cond_avg_score”: 350.0,<br />\\n“term_cond_max_episodes”: 1000,<br />\\n“sac_alpha”: 0.2<br />\\n}<br />\\n在deepracer-for-cloud/custom_files/model_metadata.json文件中编辑车辆信息,包括action space、传感器以及神经网络类型等,例如:</p>\n<pre><code class=\\"lang-\\">{\\n &quot;action_space&quot;: [\\n {\\n &quot;steering_angle&quot;: -30,\\n &quot;speed&quot;: 0.6\\n },\\n {\\n &quot;steering_angle&quot;: -15,\\n &quot;speed&quot;: 0.6\\n },\\n {\\n &quot;steering_angle&quot;: 0,\\n &quot;speed&quot;: 0.6\\n },\\n {\\n &quot;steering_angle&quot;: 15,\\n &quot;speed&quot;: 0.6\\n },\\n {\\n &quot;steering_angle&quot;: 30,\\n &quot;speed&quot;: 0.6\\n }\\n ],\\n &quot;sensor&quot;: [&quot;FRONT_FACING_CAMERA&quot;],\\n &quot;neural_network&quot;: &quot;DEEP_CONVOLUTIONAL_NETWORK_SHALLOW&quot;,\\n &quot;training_algorithm&quot;: &quot;clipped_ppo&quot;,\\n &quot;action_space_type&quot;: &quot;discrete&quot;,\\n &quot;version&quot;: &quot;3&quot;\\n}\\n</code></pre>\\n<ul>\\n<li>Step-6.编辑环境文件 run.env</li>\n<li>①.添加存储桶信息</li>\n</ul>\\n<p>编辑 deepracer-for-cloud/run.env 文件,添加如下内容:</p>\n<p>DR_LOCAL_S3_BUCKET=&lt;创建的bucket名字&gt;<br />\\nDR_UPLOAD_S3_BUCKET=&lt;创建的bucket名字&gt;</p>\n<p>也可以使用命令,请将 &lt;创建的bucket名字&gt; 替换为您之前创建的S3存储桶的名字</p>\n<p>sed -i ‘1i\\\\DR_LOCAL_S3_BUCKET=&lt;创建的bucket名字&gt;’ run.env<br />\\nsed -i ‘1i\\\\DR_UPLOAD_S3_BUCKET=&lt;创建的bucket名字&gt;’ run.env</p>\n<p>这里我创建的存储桶名字为:deepracer-demo-bk,作为演示</p>\n<p><img src=\\"36\\" alt=\\"image.png\\" /></p>\n<ul>\\n<li>②.编辑赛道信息</li>\n</ul>\\n<p>我这里使用的是 re:Invent 2018 赛道,其 DR_WORLD_NAME 为reinvent_base 请在 run.env 文件中找到 DR_WORLD_NAME 修改其值</p>\n<p><img src=\\"37\\" alt=\\"image.png\\" /></p>\n<p><em>修改赛道信息</em></p>\\n<ul>\\n<li>Step-7.更新python版本</li>\n</ul>\\n<p>由于该镜像自带是 python 3.6,这里已经不支持了,所有需要更新 python 版本 请执行一下命令更新 python3</p>\n<p><code>### 安装python 3.8</code></p>\\n<p>sudo apt-get -y install python3.8</p>\n<p>sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2</p>\n<p><img src=\\"38\\" alt=\\"image.png\\" /></p>\n<p>安装 python3.8</p>\n<ul>\\n<li>Step-8.更新配置</li>\n</ul>\\n<p><code>### 执行如下代码,使此处配置生效</code></p>\\n<p>dr-update</p>\n<p><img src=\\"39\\" alt=\\"image.png\\" /></p>\n<p>dr-update</p>\n<ul>\\n<li>Step-9.上传 dr-upload-custom-files 到 S3存储桶</li>\n</ul>\\n<p>dr-upload-custom-files</p>\n<p><img src=\\"40\\" alt=\\"image.png\\" /></p>\n<p>此时 S3存储桶中的 custom-files 应该包含下图文件</p>\n<p><img src=\\"41\\" alt=\\"image.png\\" /></p>\n<ul>\\n<li>Step-10.启动训练</li>\n</ul>\\n<p>执行如下命令开始训练</p>\n<p>dr-start-training</p>\n<p><img src=\\"42\\" alt=\\"image.png\\" /></p>\n<p><em>training-1</em></p>\\n<p>正常训练如图</p>\n<p><img src=\\"43\\" alt=\\"image.png\\" /></p>\n<p>至此,您的模型已经开始在EC2上训练</p>\n<h3><a id=\\"_532\\"></a><strong>五、后续操作</strong></h3>\\n<h4><a id=\\"1_533\\"></a><strong>1.若实例终止,重新拉取实例,接着上一次训练</strong></h4>\\n<p>请进行如下操作 #### ①.修改run.env文件 修改如下参数</p>\n<p><code>### 这是上一次训练存放文件夹,请查看S3存储桶中的文件夹名称</code></p>\\n<p>DR_LOCAL_S3_MODEL_PREFIX=&lt;本次训练存放S3存储桶的目录&gt;</p>\n<p><code>### 确定培训或评估是否应基于在上一个会话中创建的模型</code><br />\\nDR_LOCAL_S3_PRETRAINED=True</p>\n<p><code>### 设置本次训练的目录</code></p>\\n<p>DR_LOCAL_S3_PRETRAINED_PREFIX=&lt;上一次训练存放S3存储桶的目录&gt;<br />\\n<code>### 本次训练从上一次训练的checkpoint设置 默认为 last</code></p>\\n<p>DR_LOCAL_S3_PRETRAINED_CHECKPOINT=best</p>\n<p>这是修改前的</p>\n<p><img src=\\"44\\" alt=\\"image.png\\" /></p>\n<p>这是修改后的</p>\n<p><img src=\\"45\\" alt=\\"image.png\\" /></p>\n<p>查看一下 s3存储桶的文件</p>\n<p><img src=\\"46\\" alt=\\"image.png\\" /></p>\n<ul>\\n<li>②.更新,使本次配置生效</li>\n</ul>\\n<p>dr-update-env</p>\n<p><img src=\\"47\\" alt=\\"image.png\\" /></p>\n<p><em>dr-increment-training</em></p>\\n<ul>\\n<li>③.若您修改了 custom_files 中的文件,那么请您再执行如下命令重新上传custom_files</li>\n</ul>\\n<p>dr-upload-custom-files</p>\n<ul>\\n<li>④.开始训练</li>\n</ul>\\n<p>dr-start-training</p>\n<p><img src=\\"1\\" alt=\\"image.png\\" /></p>\n<p><em>training-again</em></p>\\n<p>如果提示 Sagemaker is not running 请执行 dr-start-training -w<br />\\ndr-start-training -w</p>\n<p><img src=\\"2\\" alt=\\"image.png\\" /></p>\n<p>training-again-error-deal-1</p>\n<p>run.evn 配置文件参数设置,dr-命令释义</p>\n<p>具体参数请参阅 Deepracer-for-Cloud GitHub</p>\n<h3><a id=\\"_597\\"></a><strong>遇到的问题</strong></h3>\\n<h4><a id=\\"1NO_PUBKEY_598\\"></a><strong>1.NO_PUBKEY</strong></h4>\\n<p>W: GPG error: <a href=\\"http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/\\" target=\\"_blank\\">http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/</a> Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80<br />\\nE: The repository ‘<a href=\\"http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/\\" target=\\"_blank\\">http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/</a> Release’ is not signed.<br />\\nN: Updating from such a repository can’t be done securely, and is therefore disabled by default.<br />\\nN: See apt-secure(8) manpage for repository creation and user configuration details.</p>\n<p>处理方案 由于本次使用 ubuntu 18.04 所以使用以下方案解决</p>\n<p>wget -qO - <a href=\\"http://developer.download.nvi...\\" target=\\"_blank\\">http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub</a> | sudo apt-key add -</p>\\n<p>sudo apt-get update</p>\n<p><img src=\\"3\\" alt=\\"image.png\\" /></p>\n<h4><a id=\\"2Python36python_613\\"></a><strong>2.Python3.6报错,更新python版本</strong></h4>\\n<p>sudo apt-get install python3.8<br />\\nsudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2</p>\n<p>注:<br />\\n第一个参数–install表示向update-alternatives注册服务名。</p>\n<p>第二个参数是注册最终地址,成功后将会把命令在这个固定的目的地址做真实命令的软链,以后管理就是管理这个软链;</p>\n<p>( --install link name path priority)</p>\n<p>其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如java path为你所要使用新命令、新软件的所在目录 priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;# 整数 根据版本号设置的优先级(更改的优先级需要大于当前的)</p>\n<p>第三个参数:服务名,以后管理时以它为关联依据。</p>\n<p>第四个参数,被管理的命令绝对路径。</p>\n<p>第五个参数,优先级,数字越大优先级越高。</p>\n<h4><a id=\\"3_632\\"></a><strong>3.无法获得锁</strong></h4>\\n<p>E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)<br />\\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?</p>\n<p>解决方法:<br />\\n\$ sudo rm /var/lib/dpkg/lock-frontend<br />\\n\$ sudo rm /var/lib/dpkg/lock</p>\n<p><img src=\\"4\\" alt=\\"image.png\\" /></p>\n<p><em>问题3</em></p>\\n<h4><a id=\\"4_Sagemaker_is_not_running__drstarttraining_w_644\\"></a><strong>4.如果提示 Sagemaker is not running 请执行 dr-start-training -w</strong></h4>\\n<p>dr-start-training -w</p>\n<p><img src=\\"5\\" alt=\\"image.png\\" /></p>\n<p>training-again-error-deal-1</p>\n<p>希望这个基础教程可以帮助到您!</p>\n<p><img src=\\"6\\" alt=\\"image.png\\" /></p>\n"}
0
目录
关闭