使用 SagMaker 筆記型電腦訓練和評估 AWS 解析器模型 - AWS DeepRacer

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SagMaker 筆記型電腦訓練和評估 AWS 解析器模型

AWS DeepRacer 主控台提供整合體驗,來訓練和評估您的 AWS DeepRacer 模型。其整合的原因 AWS DeepRacer 在幕後使用 SagMaker 和 AWS RoboMaker。整合包含詳細的強化學習任務,以及讓新手可以立即進行訓練。

如果您是 SSageMaker 的資深使用者,或如果您確定要了解如何使用 SageMaker 和 AWS RoboMaker 來訓練和評估您的 AWS DeepRacer 模型,則可以手動建立 SagMaker 筆記本。然後,您可以複製強化學習範例筆記本執行個體,並將其用作範本來執行預先定義的任務,以訓練和評估 AWS DeepRacer 模型。

在訓練之後,您可以將訓練的模型成品複製到 AWS DeepRacer 車輛,以在實體環境中執行測試。

教學課程提供逐步指示,來引導您完成這些任務。

建立 SSageMaker 筆記本

若要在 SageMaker er 上直接訓練 AWS DeeVecer 模型,請依照下面步驟,並建立 SagMaker 筆記本執行個體。

建立 SageMaker 筆記本執行個體來訓練和評估您的 AWS DeepRacer 模型

  1. 前往登入 SSageMaker 主控台https://console.aws.amazon.com/sagemaker。選擇其中一個支援的區域。

  2. 從導覽窗格中,選擇 Notebook instances (筆記本執行個體),然後選擇 Create notebook instance (建立筆記本執行個體)

  3. Create notebook instance (建立筆記本執行個體) 頁面上,執行下列動作:

    1. 輸入名稱。例如,my-deepracer-model 代表 Notebook instance name (筆記本執行個體名稱)

    2. 如果 IAM role (IAM 角色) 下拉式功能表未填入現有的 IAM 角色,請選擇 Create a new role (建立新角色)Enter a custom IAM role ARN (輸入自訂 IAM 角色 ARN)Use existing role (使用現有角色),然後依照指示。

    3. 保留所有其他選項的預設選擇,然後選擇 Create notebook instance (建立筆記本執行個體)

    如需詳細資訊,請參閱「」建立 SSageMaker 筆記型電腦實體

  4. 等待筆記本執行個體的 Status (狀態)Pending 變更為 InService。然後選擇 Open Jupyter (開啟 Jupyter)

  5. Jupyter 頁面 (即新建立之筆記本的首頁) 上,執行下列動作:

    1. 選擇 SageMaker Examples (SageMaker 範例) 標籤。

    2. 從範例集合展開 Reinforcement Learning (強化學習) 範例群組。

    3. 在本練習中,請選擇使用旁邊的深層研究員項目。

    4. Create a copy in your home directory (在主目錄中建立副本) 對話方塊中,選擇 Create copy (建立複本)

    此時,筆記本執行個體正在執行中,而且您可以開始訓練模型。

    根據選取的執行個體類型,會向您收取執行中執行個體的費用。為了避免在您未準備好使用執行中執行個體時向您收費,請關閉此執行個體。

初始化 SagMaker 筆記本執行個體

若要使用 SSageMaker 筆記本執行個體來訓練 AWS DeepRacer 模型,首先適當地初始化所需工作的執行個體。初始化包含以下動作。

  • 匯入必要程式庫。

  • 設定訓練環境。

  • 授與 AWS RoboMaker 和 AWS RoboMaker 的存取許可。

  • 佈建 Docker 容器以託管訓練和評估工作。

  • 為 SageMaker er 和 AWS RoboMaker 設定 VPC,以彼此互動。

請依照下面詳細指示的步驟,來初始化筆記本執行個體。

初始化 SagMaker 筆記本執行個體

  1. 若要匯入必要程式庫來進行訓練,請選擇筆記本執行個體的第一個程式碼區塊。例如,在 Imports (匯入) 標題下選擇一個。接著,從筆記本執行個體的功能表列中選擇 Run (執行) 來執行程式碼區塊。您可以使用 Shift-Enter 按鍵命令快速鍵來開始執行程式碼區塊。

    
                        映像:在筆記本中匯入程式庫。

    在程式碼執行開始之前,程式碼區塊狀態會顯示 In [ ]。當執行進行時,狀態就會變成 In [*]。在程式碼執行完成之後,狀態就會變成In [n],其中 n 對應於調用的順序。由於匯入程式碼儲存格是第一個,n=1。如果您在初次執行之後再次執行命令,狀態就會變成 In [2]

    若為非同步執行,程式碼儲存格會立即返回,以顯示完成狀態。若為同步執行,後續呼叫會遭到封鎖,直到目前程式碼儲存格執行完成,這時狀態會從 In [*] 變為 In [n]

  2. 若要初始化基本參數,請依原樣執行初始化基本參數程式碼區塊。

    範例筆記本執行個體預設會將工作持續時間設定為 1 小時。若要加速或擴展訓練,您可以在執行程式碼儲存格之前減少或增加 job_duration_in_seconds 值。

  3. 若要設定訓練輸出儲存體,請在 Setup S3 bucket (設定 S3 儲存貯體) 下選擇程式碼區塊,然後從筆記本執行個體功能表中選擇 Run (執行),或按 Shift+Enter 鍵。

    
                        映像:在筆記本中設定 S3 儲存貯體。

    當執行完成時,您就可以在 Amazon S3 主控台中驗證這個儲存貯體。

    若要檢視 s3_output_path 變數值,請將 print(s3_output_path) 附加到上述程式碼儲存格,並重新執行程式碼。

  4. 若要為此筆記本執行個體設定適當的許可,以存取供 S3 儲存體,以供 SSageMaker 輸出的程式碼儲存格,請執行建立 IAM 角色

    執行時,此程式碼區塊會建立新的 IAM 角色,其中包含以下 IAM 政策。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*" ] } ] }

    建立的 IAM 角色具有 SageMaker 做為其信任實體。

  5. 若要為此筆記本執行個體設定適當的許可,以叫用 AWS RoboMaker 來模擬訓練環境,請執行從此筆記型電腦叫用 AWS RoboMaker 的權限設定,並遵循指示在之後添加robomaker.amazonaws.com做為先前建立的 IAM 角色的另一個信任實體。

  6. 若要設定必要許可,讓 SSageMaker 存放體,以存取 S3 儲存體,請執行S3 存儲桶的權限設置並在之後放下指示以附加AmazonS3FullAccess原則設定為先前建立的 IAM 角色。

  7. 若要佈建 Docker 容器以用於執行訓練和評估工作,請執行 Build and push docker image (建置和推送 Docker 映像) 下的程式碼儲存格。

    建置和推送 Docker 映像需要一些時間才能完成。

  8. 若要啟用 VPC 模式,讓彼此可透過 AWS RoboMaker 行通訊,讓彼此可透過網路進行通訊,請執行設定 VPC。根據預設,筆記本執行個體會使用您的預設 VPC、安全群組和子網路來設定 VPC 模式。如果您不想要為其他流量開啟 VPC,請確保為指定的安全群組設定 Inbound Rules (傳入規則)Outbound Rules (傳出規則),以只允許來自本身的傳入流量。

    
                        映像:將 VPC 流量限制為筆記本中的本身。
  9. 若要啟用 SageMaker 訓練工作以存取 S3 資源,請執行 Create Route Table (建立路由表) 下的程式碼儲存格,以建立 VPC S3 端點。

此時,您已完成訓練的初始化,並準備好移至設定訓練環境

設定訓練環境

設定用來訓練 AWS DeepRacer 模型的環境需要選擇賽道、獎勵函數和關聯的動作空間,以及用於訓練的超參數。

筆記本會對這些使用預設設定。若要檢視預設設定,請取消註解相關部分,然後執行 Configure the preset for RL algorithm (設定 RL 演算法的預設集) 下的程式碼儲存格。例如,若要檢視獎勵函數的程式碼清單,請執行程式碼儲存格,如下所示:

如果您決定使用預設設定,請將檔案複製到 S3 儲存貯體。若要修改任何檔案,請依照下面的步驟,變更預設獎勵函數以外項目的檔案名稱和目錄。

若要修改 default.py 檔案中的獎勵函數:

  1. 選擇筆記本執行個體頁面頂端的 File (檔案) 功能表,然後選擇 Open... (開啟 ...)

  2. 導覽至 src/markov/rewards,然後選擇 default.py 以開啟檔案。

  3. 依您認為合適的方式編輯檔案。完成編輯檔案後,選擇 File (檔案) -> Save (儲存) 以儲存更新。

請注意,環境檔案是由 SageMaker 和 AWS RoboMaker 兩者共用,也稱為節點。當它被 SSageMaker 使用時,node_typeSAGEMAKER_TRAINING_WORKER。當 AWS RoboMaker 使用它時,node_typeSIMULATION_WORKER

訓練您的 AWS DeepRacer 模型

使用 SageMaker Maker 和 AWS RoboMaker 來訓練您的模型等同於執行程式碼,而此等同於執行training_worker.py文件下的筆記本src目錄。training_worker.py 檔案被指定為訓練工作的進入點。

訓練程序包含使用 AWS RoboMaker 來模擬環境中的駕駛體驗、將這些體驗以固定間隔轉送給 SSageMaker 做為輸入來訓練深度神經網路,以及網路加權更新為 S3 位置。

當訓練進行中時,您可以將指定的訓練指標記錄到 Amazon CloudWatch Logs 或顯示到 AWS RoboMaker 終端機。

訓練您的 AWS DeepRacer 模型

  1. 執行 Copy custom files to S3 bucket so that sagemaker & robomaker can pick it up (將自訂檔案複製到 S3 儲存貯體,讓 sagemaker 和 robomaker 可以挑選檔案) 下的程式碼儲存格,將環境檔案複製到 S3。

    
                        映像:將 DeDeepRacer 訓練工作環境檔案複製到 S3。
  2. 若要啟動 SSageMaker 工作來訓練您的 AWS DeepRacer 模型,請執行下列動作:

    1. 執行下的第一個程式碼儲存格使用 Python 軟體開發套件指令碼模式訓練 RL 模型,定義要在 CloudWatch 日誌或 AWS RoboMaker 主控台視窗中觀看的訓練指標。

      
                                映像:設定在訓練期間記錄的指標。

      您可以監看指定的指標來監控訓練,並在 CloudWatch Logs 或使用 AWS RoboMaker 終端機了解您所選擇之獎勵函數的效益。

    2. 執行下的第二個程式碼儲存格使用 Python 軟體開發套件指令碼模式訓練 RL 模型,為您的模型開始 SageMaker 的訓練工作。

      
                                映像:在 SM 中建立訓練工作。

      此 SSageMaker 訓練工作會使用 TensorFlow 架構,並在指定的 EC2 運算執行個體類型上執行。輸出會列出工作名稱。您可以在 SageMaker 中追蹤這項訓練工作的狀態。

      
                                映像:設定在訓練期間記錄的指標。

  3. 若要在 AWS RoboMaker 中建立環境模擬工作,請執行開始 RoboMaker 工作建立模擬應用程式

  4. 若要在 AWS RoboMaker 上啟動模擬,並共用模擬資料,請執行在 RoboMaker 製作師上啟動模擬工作

    
                        映像:在 SageMaker 筆記本中啟動模擬工作
  5. 若要在 AWS RoboMaker 中觀看模擬,請在將 RoboMaker 模擬的模擬視覺化,然後選擇模擬 1從輸出連結。

    
                        映像:觀看 AWS RoboMaker 中的模擬

    或者,您可以直接前往 AWS RoboMaker 主控台來開啟模擬工作。

    在初始化模擬工作之後,AWS RoboMaker 主控台會提供下面視覺化公用程式:

    • Gazebo:3D 世界的模擬,用於模擬在選擇的賽道自動駕駛車輛。

    • rqt:適用於 ROS GUI 開發的 Qt 型架構和外掛程式。

    • IVIS:ROS 視覺化工具,用於顯示車輛前置相機所擷取的視野。

    • 終端機:一種終端機應用程式,可在模擬工作主機上提供命令列存取。

    1. 若要檢視在 3D 模擬中學習的車輛,請按兩下或點選 Gazebo

      
                                映像:模擬工作涼亭

      您可以監看模擬的車輛在從起點開始的重複試驗中沿著賽道導航,並在偏離賽道或到達終點線時結束。開始時,車輛可以短暫地保持在賽道上。隨著時間的推移,它學會保持在賽道上更長的時間。

    2. 若要存取 rqt 公用程式,請按兩下或點選 rqt 並選擇外掛程式。

      
                                映像:ROS Qt

      如需外掛程式的詳細資訊,請參閱 AWS RoboMaker 外掛程式。

    3. 若要檢視車輛的前視圖,請按兩下或點選 rvis。選擇 Add (新增) 來建立視覺化。然後,選擇 By topic (依主題) 標籤、向下捲動以選擇 /camera/zed/rgb/image_rec_color/Image,再選擇 OK (確定)。

      
                                映像:ROS 視覺化檢視
    4. 若要使用終端機,請按兩下 Terminal (終端機),以在模擬工作主機上開啟終端機視窗,並輸入適當的 shell 命令。

      
                                映像:模擬工作主機終端機

      當模擬工作主機終端機開啟時,您可以呼叫 Linux shell 命令,來檢視 (moretail) 日誌或執行其他操作。

      若要檢視模擬日誌中最後 10 個步驟的獎勵,請在終端機中輸入以下 shell 命令:

      tail /tmp/simulation-logs/stdout_and_stderr
  6. 若要視覺化訓練效能,請執行 Plot metrics for training job (繪製訓練工作的指標) 下的兩個程式碼儲存格。當一切成功完成時,您會看到 Training reward (訓練獎勵)Episode # (分集編號) 的繪圖,如下所示。

    
                        映像:繪製訓練指標

    在這個特別範例中,訓練獎勵似乎開始停滯不前。可能需要更多資料,來驗證是否屬實。如果訓練工作執行中,則您可以重新執行 Plot metrics for training job (繪製訓練工作的指標) 下的程式碼儲存格,將更多最新資料併入繪圖中。如果它們持續存在,則開始大幅波動可能表示獎勵函數存在特定缺陷。因此,您可能會更新獎勵函數定義。在任何情況下,您需要利用更多的訓練來收集更多的資料。

    在訓練經過指定的時間量之後,您可以訓練工作的 S3 儲存貯體 (例如,s3://<bucket>/<sagemaker-training-job-name>/output/model.tar.gz。下載模式成品檔案、將其複製到 USB 隨身碟,然後將檔案傳輸到 AWS DeepRacer 車輛的運算模組。

    • 若要在完成訓練時進行清除,且不再需要 AWS RoboMaker 和 SageMaker Maker 資源,請執行清除

    • 若要評估迄今已訓練的模型,請執行 Evaluation (評估) 下的程式碼儲存格。

      如果成功,則會針對 AWS RoboMaker 中的工作建立模擬工作。請記下程式碼儲存格底下輸出中的工作名稱。您可能需要此名稱,才能在 AWS RoboMaker 主控台中開啟模擬工作。此模擬工作與用於訓練的模擬工作類似。它提供相同的公用程式,讓您在 AWS RoboMaker 主控台中檢視進行中的評估。尤其,您可以監看 Gazebo 中的評估試驗。

    • 當您完成模型的評估,並想要終止模擬應用程式,請執行 Clean Up Simulation Application Resource (清除模擬應用程式資源) 下的程式碼儲存格。