使用 Amazon SageMaker 筆記本訓練及評估 AWS DeepRacer 模型 - AWS DeepRacer

使用 Amazon SageMaker 筆記本訓練及評估 AWS DeepRacer 模型

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

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

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

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

建立 Amazon SageMaker 筆記本

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

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

  1. 登入 Amazon SageMaker 主控台,網址為 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 (建立筆記本執行個體)

    如需詳細資訊,請參閱建立 Amazon SageMaker 筆記本執行個體

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

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

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

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

    3. 對於本練習,選擇 deepracer_rl.ipynb 項目旁的 Use (使用)

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

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

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

初始化 Amazon SageMaker 筆記本執行個體

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

  • 匯入必要程式庫。

  • 設定訓練環境。

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

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

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

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

初始化 Amazon SageMaker 筆記本執行個體

  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. 若要為此筆記本執行個體設定適當的許可,以存取供 Amazon SageMaker 輸出的 S3 儲存體,請執行 Create an IAM role (建立 IAM 角色) 下的程式碼儲存格。

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

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

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

  5. 若要設定適當的許可供此筆記本執行個體叫用 AWS RoboMaker 以模擬訓練環境,請執行 Permission setup for invoking AWS RoboMaker from this notebook (從此筆記本叫用 AWS RoboMaker 的許可設定) 下的程式碼儲存格,並依照後續指示,將 robomaker.amazonaws.com 新增為先前建立的 IAM 角色的其他信任實體。

  6. 若要設定所需的許可供 Amazon SageMaker 存取 S3 儲存體,請執行 Permission setup for SageMaker to S3 bucket (SageMaker 對 S3 儲存貯體的許可設定) 下的程式碼儲存格,並依照後續指示,將 AmazonS3FullAccess 政策連接至之前建立的 IAM 角色。

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

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

  8. 若要啟用 Amazon SageMaker 和 AWS RoboMaker 的 VPC 模式,讓彼此可透過網路進行通訊,請執行 Configure VPC (設定 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 (儲存) 以儲存更新。

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

訓練您的 AWS DeepRacer 模型

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

訓練程序包含使用 AWS RoboMaker 來模擬環境中的駕駛體驗、將這些體驗以固定間隔轉送至 Amazon SageMaker 做為輸入來訓練深度神經網路,以及網路加權更新為 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。

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

    1. 執行 Train the RL model using the Python SDK Script mode (使用 Python 開發套件指令碼模式來訓練 RL 模型) 下的第一個程式碼儲存格,定義要在 CloudWatch Logs 或 AWS RoboMaker 主控台視窗中監看的訓練指標。

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

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

    2. 執行 Train the RL model using the Python SDK Script mode (使用 Python 開發套件指令碼模式來訓練 RL 模型) 下的第二個程式碼儲存格,為您的模型啟動 Amazon SageMaker 訓練工作。

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

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

      
                                影像:設定在訓練期間記錄的指標。
  3. 若要在 AWS RoboMaker 中建立環境模擬工作,請執行 Start the RoboMaker job (啟動 RoboMaker 工作)Create Simulation Application (建立模擬應用程式) 下的程式碼儲存格。

  4. 若要在 AWS RoboMaker 上啟動模擬,並共用模擬資料,請執行 Launch the Simulation job on RoboMaker (在 RoboMaker 上啟動模擬工作) 下的程式碼儲存格。

    
                        影像:在 SageMaker 筆記本中啟動模擬工作
  5. 若要監看 AWS RoboMaker 中的模擬,請執行 Visualizing the simulations in RoboMaker (視覺化 RoboMaker 中的模擬) 下的程式碼儲存格,然後從輸出中選擇 Simulation 1 (模擬 1) 連結。

    
                        影像:監看 AWS RoboMaker 中的模擬

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

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

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

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

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

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

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

      
                                影像:模擬工作 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 和 Amazon SageMaker 資源,請執行 Clean Up (清除) 下的兩個程式碼儲存格。

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

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

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