SageMaker で DeepRacer シミュレーションを始める方法

# はじめに

最近、社内の DeepRacer チームに入りました！

参加者には以下の導入手順が提供されているのですが、ここで共有します！

# DeepRacer シミュレーションの開始

## 概要

Amazon SageMakerとRoboMakerを利用したDeepRacerシミュレーションの開始手順です。

## 手順

### IAM ロールの作成

まず、Jupyter Notebookインスタンス用のIAMロールを作成します。

以下の内容のIAMロールを作成します。

   - AWSサービス：SageMaker
   - アクセス許可ポリシー（Permissions policies）：
     - AmazonSageMakerFullAccess
     - 以下の内容のポリシーをアタッチする

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

ロールの信頼関係に RoboMaker を追加します。

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "sagemaker.amazonaws.com",
          "robomaker.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

### SageMakerノートブック環境の作成

SageMakerのJupyter Notebookインスタンスを作成します。

1. Management ConsoleでAmazon SageMakerを開き、オレゴンリージョンに切り替えます。
2. ノートブックインスタンスの画面から「ノートブックインスタンスの作成」に進み、以下の内容でノートブックインスタンスを作成します。
   - ノートブックインスタンス設定
     - ノートブックインスタンス名：作成者がわかるように命名
     - ノートブックインスタンスのタイプ：ml.t2.medium
     - Elastic Inference：なし
     - IAMロール：カスタムIAMロールのARN
     - カスタムIAMロールのARN：作成したロール
     - VPC：非VPC
     - ライフサイクル設定：設定なし
     - 暗号化キー：カスタム暗号化なし
     - ボリュームサイズ：5
   - Gitリポジトリ
     - リポジトリ：なし
3. ノートブックインスタンスのステータスが「InService」になるまで待ち、「開く Jupyter」アクションからJupyter Notebookを開く。

### DeepRacerトレーニングノートブックの実行

DeepRacerトレーニング用のサンプルノートブックが配布されていますので、実行します。

1. 作成したJupyter Notebookを開き、SageMaker Examples > Reinforcement Learning > rl_deepracer_coach_robomaker.ipynb の 「Use」をクリックし、自分のホームディレクトリにコピーして開きます。![sagemaker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401048/f4970dfc-eb2e-b796-91dd-66bb543e90c0.png)

2. セルを上から順に実行します（実行ボタンを押すか、Shift+Enter）。以下の点に注意してください。
   - Permission setup for invoking AWS RoboMaker from this notebook は上記の手順で実施済みのため不要です
   - SageMaker、RoboMaker、S3 上のリソースについて、誰が作ったものかわかるように、以下の部分を編集してください。
     - 「Define Variables」に定義された「job_name_prefix」の値を以下のように編集してください。
       - "社員ID-rl-deepracer"
         - 例："foo-rl-deepracer"
     - 「Create Simulation Application」の３つめのセルに定義された「app_name」の値を以下のように編集してください。
       - "社員ID-deepracer-sample-application" + strftime("%y%m%d-%H%M%S", gmtime())
         - 例："foo-deepracer-sample-application" + strftime("%y%m%d-%H%M%S", gmtime())

### ラップタイムの表示

Evaluationの実行後、ラップタイムを表示するには、Jupyter Notebookに[こちら](https://qiita.com/dnp-hara/items/cb4081fa5bdfbe749c22)の内容のセルを追加し、実行します。

## ノートブックの詳細

ノートブックの各セルで実行される内容を説明します。

### Prequisites

トレーニングに必要な環境の設定等を実施します。

#### Permission setup for invoking AWS RoboMaker from this notebook

上で作成したノートブックインスタンス用IAMロールの信頼関係にRoboMakerを追加する内容です。既に追加済のため実施は不要です。

### Setup the environment

強化学習の環境（Environment）をセットアップします。環境はsrc/robomaker/environments/deepracer_env.pyに定義されています。報酬関数reward_functionもここに含まれます。

#### Configure the preset for RL algorithm

強化学習アルゴリズムのパラメータがsrc/robomaker/presets/deepracer.pyにプリセットされています。パラメータをチューニングする場合はこのファイルを編集します。

#### Train the RL model using the Python SDK Script mode

上記の環境とプリセットを使用して学習を実行します。学習はSageMakerのトレーニングジョブとして実行されます。

#### Launch the Simulation job on RoboMaker

RoboMakerでGazebo（OSSのロボットシミュレータ）シミュレーションを起動し、環境をシミュレートしてトレーニングジョブに提供します。

#### Visualizing the simulations in RoboMaker

実行するとRoboMakerのSimulation jobへのリンクが表示されます。リンク先でGazeboを開くと、コースとDeepRacerが表示され、走行の様子が参照できます。

#### Plot metrics for training job

トレーニング結果をグラフ化します。

#### Clean Up

トレーニングジョブをクリーンアップします。

#### Evaluation

学習したモデルを評価するために、RoboMakerのシミュレーションを実行します。

#### Clean Up Simulation Application Resource

RoboMakerシミュレーション環境を削除します。