AWS DeepRacerで最初のモデルをトレーニングして仮想リーグに参加するまで

## はじめに
2019/4/29 に DeepRacer コンソールがリリースされ、仮想トラックでのタイムを競う
DeepRacer Virtual League に参加できるようになりました。

**Developers, start your engines! The AWS DeepRacer Virtual League kicks off today.**
https://aws.amazon.com/jp/about-aws/whats-new/2019/04/AWSDeepRacerVirtualLeague/

最初のモデルを作成し、仮想リーグでサーキットを走行するまでをやってみたいと思います。
DeepRacerで使用される各サービスに対しては利用料金が発生します。
詳細は以下から確認できます。

**AWS DeepRacer の料金**
https://aws.amazon.com/jp/deepracer/pricing/

## モデルの作成
以下のURLから DeepRacer コンソール にアクセスします。
2019/5/1 時点ではバージニア北部リージョンでのみ利用可能です。

https://console.aws.amazon.com/deepracer/home?region=us-east-1

コンソールメニューの Reinforcement learning から Ceate Model を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/8b2837e2-2a96-7ae7-1308-38790b109335.png)

Account resources からモデルの作成に必要な各種AWSリソースを作成します。
料金ページには記載されていませんが、作成されるVPCにはNATゲートウェイも
含まれるため、NATゲートウェイ標準の利用料金が発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/f613b461-196b-5843-424b-2c00345fdf52.png)
全てのリソースにチェックマークがつけば準備完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/75d31e42-7b1e-8159-dc40-8e4f43fb8ae6.png)
Model detailsで、作成するモデル名やその説明(オプション)を記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/91081bb7-c5dd-71a0-62cb-c4236f701763.png)
Environment simulation でモデルをトレーニングするための
仮想環境として利用するトラックを選択します。
ここでは2019/5/1現在で仮想レースが開催されている London Loop を選択してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/9175d44c-1bd9-3368-98cc-e1e9d1b7a67a.png)
Action spaceでは速度およびステアリング角度の範囲と粒度をトラックに合わせて
設定しますが、ここではすべてデフォルトとします。

Reward function については Follow the center line (Default) のままとしますが、
Stay inside the two borders、Prevent zig-zag、合計3つの例が用意されており
任意のものを選択したり、独自にカスタマイズしたりすることが可能です。

Hyperparameters についてもデフォルトのままとします。
実際にはこれらの設定値によりモデルをカスタマイズします。

※Action spaceは新規モデル作成時のみ指定可能です。
トレーニング済みモデルをcloneして新たにトレーニングを実行することができますが、
その場合、Action space は変更できません。

最後にトレーニング実行時間の最大値(ここでは60分)を選択したら、Start training を
クリックし、トレーニングを開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/173de589-aaa2-4200-3bd1-1348f13b96b5.png)

裏側では SageMaker でトレーニングインスタンス(ml.c4.2xlarge)によりジョブが実行され、
また RoboMaker のシミュレーションジョブにより選択した環境でのシミュレーションが行われます。

トレーニングの初期化には6分程度かかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/86fd6034-f10f-380e-4be8-faece035eaa5.png)
トレーニング中、Reward graph と Simulation の video stream を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/78fd7d73-9281-569e-55ac-0d45f66d1780.png)

SageMaker のトレーニングジョブ、RoboMaker のシミュレーションジョブは
それぞれのコンソールでも結果を確認することができます。
CloudWatch Logsにもジョブのログが保存されているので確認することが可能です。

## モデルの評価
60分後、トレーニングが完了したら Start evaluation をクリックし、
作成したモデルの評価を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/a900f490-cefc-e2f0-f0a4-1b1cda7453a3.png)
Select environment to start evaluation でトレーニング時に指定した
トラック(London Loop) を選択し、Number of Trials(試行回数)はデフォルト値(3 trials)
のまま Start evaluation をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/5734cd84-2059-3b72-f33e-4a602e8b6379.png)
Evaluationの初期化は3分ほどかかります。
ここではトレーニング時と同様に RoboMaker のシミュレーションジョブが動作しており、
Evaluation の画面から Video Stream を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/65096f94-f76b-d1fe-64a6-5216dcec4abe.png)
評価が完了したら Evaluation results でタイムを確認することができます。
全てデフォルト値のままトレーニングしたところ。1分32秒～35秒ほどかかっています。
Trial results (% track completed) が100%なので、トラックの完走はできているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/80ebf19e-8f2c-8c18-2b54-3a7af0040854.png)

## Virtual Leagueへの参加
作成したモデルの画面から Submit to virtual race を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/5fee30d4-0af0-eca1-d17c-ff0da3ac60fd.png)
最初にレーサー名を入力します。後から変更することはできないので注意してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/30cf7ea2-dd75-512a-86d5-e0f23605e947.png)
Model submission details では仮想レースに送信するモデルを確認、変更することができます。
最後にTerms and Conditionsに同意し、チェックを入れたらSubmit modelをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/066aae09-34f9-6337-9435-94d476d0ae5e.png)
モデルがアップロードされたら評価の完了を待ちます。
30分間はモデルの再送信ができないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/f89914e9-ef10-d909-d6c1-f1b6f2ec6af8.png)
2週連続で完走できると記録が認定され、ランク付けされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/d83bdddc-7e99-16e5-c467-a3fa71d4683b.png)
London Loopでの仮想レースは5月いっぱい開催されます！
5/1時点でのTopは12秒台です。。速い。。。
今回はすべてデフォルト値で試しましたが、自分なりにモデルのチューニングを
行って上位を目指したいと思います。

## 学習コンテンツ
AWS トレーニングと認定サイトのトレーニングライブラリから以下の E-Learning を
無料で受講することができるので、こちらを利用して理解を深めるのがよさそうです。

**AWS DeepRacer: Driven by Reinforcement Learning**
https://www.aws.training/learningobject/wbc?id=32143
※Amazon.com アカウントまたは APN パートナーセントラルアカウントが必要です。

## 参考資料
**DeepRacer Developer Guide**
https://docs.aws.amazon.com/deepracer/latest/developerguide/what-is-deepracer.html

以上です。
参考になれば幸いです。