使用 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\nAWS DeepRacer-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
目录
关闭
contact-us