AWS DeepRacerのログ分析ツールを使ってみた

# はじめに

AWSから提供されているAWS DeepRacerのログ分析ツールを会社の人たちと使ってみました。ログ分析ツールはノートブックの形式で以下のAWS DeepRacerワークショップのGitHubで公開されています。 
https://github.com/aws-samples/aws-deepracer-workshops

**注意**

以下の内容は 2019 年 6 月 6 日時点のサンプルノートブックを対象にしています。
その他のバージョンのノートブックでは利用できない可能性があります。


# 導入の手順

#### ポリシーの作成

Jupyter Notebookインスタンス用のIAMロールに以下のポリシーをアタッチしておきます。


```ruby:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "logs:FilterLogEvents",
            "Resource": "*"
        }
    ]
}
```

※IAMロールの作成方法はAWS DeepRacerシミュレーションと同じなのでこちらを参考にしてください。
[SageMakerでDeepRacerシミュレーションを始める方法　IAMロールの作成](https://qiita.com/dnp-kamiyama/items/46cfd85b7dee852eff03#iam-%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)

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

1.　Management ConsoleでAmazon SageMakerを開き、AWS DeepRacerコンソールと同じバージニア北部リージョンに切り替えます。
※ノートブックインスタンスの作成方法はAWS DeepRacerシミュレーションと同じなのでこちらを参考にしてください。
[SageMaker で DeepRacer シミュレーションを始める方法　SageMakerノートブック環境の作成](https://qiita.com/dnp-kamiyama/items/46cfd85b7dee852eff03#sagemaker%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%9C%E6%88%90)

2.　Jupyter Notebookを開いて「Files」タブの「New」プルダウンから「Terminal」を選択します。
![terminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/3f015242-719b-ccf4-0a6c-669294077d37.png)

3.　Terminal画面が開いたらGitHubからリポジトリのクローンをします。

```
$ cd SageMaker/
$ git clone https://github.com/aws-samples/aws-deepracer-workshops.git
```

4.　Jupyter Notebookの「Files」タブから
/aws-deepracer-workshops/log-analysis/DeepRacer Log Analysis.ipynb を開きます。

5.　環境選択画面が表示されるのでここでは「conda_tensorflow_p36」を選択します。
　※この後にある追加のパッケージを行う作業で、同じ環境を選択をします。


#### ノートブック環境に応じてパッケージのインストール

当社で確認した時点では、ノートブックの実行途中でshapelyのimportエラーが出ていたのであらかじめanacondaの環境に対してパッケージをインストールしておきます。

1. Jupyter Notebookの「Conda」タブから上部のリストボックスConda environmentsに環境一覧が表示されるので「tensorflow_p36」を選択します。（図中１－１）
右下のリストボックスの表示が「tensorflow_p36」に変わるのを確認します。（図中１－２）

2. 左下のリストボックスから「shapely」を選択します。（図中２）
テキストで絞り込み検索をすることもできます。

3. 中段の「→」を選択するとインストールが始まります。（図中３）
インストールされたかどうかは右下のリストボックス上部の「Refresh package list」アイコンを押すと確認ができます。

![package.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/2da54a95-71ec-83e7-9f78-022fc0cb3b90.png)

これで準備は整いました！


# ログ分析を実行してみた

ノートブックを開くことができたら、セルを上から実行します。（実行ボタンを押すか、Shift+Enter）

#### Download the desired log file given the simulation ID

AWS DeepRacerコンソールで評価したいトレーニングと紐づいているシミュレーションIDに書き換えます。シミュレーションIDはAWS RoboMakerのシミュレーションジョブから確認ができます。

```ruby:
stream_name = 'シミュレーションID' ## CHANGE This to your simulation application ID
fname = 'logs/deepracer-%s.log' %stream_name
cw_utils.download_log(fname, stream_prefix=stream_name)
```

#### Load waypoints for the track you want to run analysis on

トレーニングで利用したトラック名を入力します。
トラック情報は随時追加されているようです。aws-deepracer-workshops/log-analysis/tracks/　からファイル名（＝分析するトラック名）を確認することができます。
ここでは5月のバーチャルサーキットトラックのLondonLoopを指定します。

```ruby:
def get_track_waypoints(track_name):
    return np.load("tracks/%s.npy" % track_name)
waypoints = get_track_waypoints("London_Loop_Train")
waypoints.shape
```

#### Visualize the Track and Waypoints

先ほど選択したLondonLoopのコースが結果に表示されました
![visualtrack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/6017c631-f3f2-d251-14f8-a98471283cf6.png)


ノートブックの全てを紹介しきれないのですが、このように結果を確認しながら進めていきます。

**注意**

- ノートブックの途中でログファイル名が固定値になっている箇所や、トレーニングの内容や時間によって、パラメータがデフォルトのままではエラーになる箇所があるので、その都度修正や調整をしながら進めました。
- トレーニングのシミュレーションログだけでなく、モデルや評価時のシミュレーションIDが入力情報となる分析もありました。
- reInventコースしか対応されていない分析の種類も一部ありました。




# 分析結果

#### Plot rewards per Iteration

![toralreward.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/232f7e01-5ac1-4963-c9c5-d9dc94c17f90.png)
エピソードが進むにつれ報酬がどう変化していくのかがわかります。

#### Analyze the reward distribution for your reward function

![rewardallactions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/c9a1f01b-74ba-7976-4b88-873f9fff8044.png)
トレーニングの結果、どのルートをどれだけ多く通過しているのか視覚的にとらえやすいです。

#### Path taken in a particular episode

![pathepisode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/5f120ed6-f0b7-5833-ef6d-105a601ea921.png)
特定のエピソードの走行の軌跡を表示することもできました。

#### Grid World Analysis

![gridspeed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426326/80ea43e4-5031-77bb-9a4c-9211bfbb3750.png)
reInventコースでも試してみました。コース上でどのくらいのスピードが出ているのかわかります。

#### その他

この他、いくつかの分析の種類があり全てをご紹介できないのですが、中には結果が何を意味するものなのか、わからないものもありました。

# まとめ

ログ分析ツールを使って、全ての分析結果を出すことはできましたが、これらの結果から何を読み解いて、どう分析していくのか？　そこからどんな解を得てAWS DeepRacerに反映していくのか？　は、強化学習初心者にはなかなか難しい内容でした。
データサイエンティストやデータアナリストの仕事の一部に少しだけ触れることができて、その大変さとリスペクトを実感しました。

AWS DeepRacerの取り組みに対しては報酬関数を実装して強化学習トレーニングを進めるだけでなく、ログやデータを元に分析する、というスキルも必要そうだということがわかりました。