SageMaker RL と RoboMakerのサンプルを試す ~ 頑張れDeepRacer ~


# SageMaker RLとは
Amazon SageMaker RL – Amazon SageMakerを使ったマネージドな強化学習
https://aws.amazon.com/jp/blogs/news/amazon-sagemaker-rl-managed-reinforcement-learning-with-amazon-sagemaker/

# RoboMakerとは
AWS RoboMaker-インテリジェントなロボットアプリケーションの開発、テスト、デプロイと管理
https://aws.amazon.com/jp/blogs/news/aws-robomaker-develop-test-deploy-and-manage-intelligent-robotics-apps/

# DeepRacerとは
AWS DeepRacer – 強化学習のハンズオン at re:Invent
https://aws.amazon.com/jp/blogs/news/aws-deepracer-go-hands-on-with-reinforcement-learning-at-reinvent/


# サンプルドキュメント
こちらが本投稿で試してみたサンプルとなります。
https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning/rl_deepracer_robomaker_coach_gazebo

AWSのgithubが更新が激しいため、私が試したコードと内容が変わる可能性があるため、今のスナップショットとして、以下にも同じものを保存しています
https://github.com/asahi0301/sagemaker-demo/tree/master/reinforcement_learning/rl_deepracer_robomaker_coach_gazebo

SageMaker Notebookを起動するとサンプルコードがすでにダウンロードされているため、すぐに試せます。便利です。
まずは、そのサンプルコードで試してみて、動かなければ私のレポジトリをCloneしてください。

# 事前準備
## SageMaker Notebookを起動します
VPC外でもVPC内でもどっちでも大丈夫です。
RoboMakerが2018/12/04時点では東京リージョンにないため、SageMaker Notebookは「バージニア北部リージョン」で作成しています。
インスタンスタイプは、t2の一番小さいものでも大丈夫です。
SageMaker Notebookの割り当てているIAMロール（下図の赤枠の部分)の修正が必要になります
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/b5a3a517-2d7f-5fc1-874b-342dc7a25bfd.png)
また、SageMaker NotebookはVPC外でもVPC内でもどちらでもいいのですが、
サンプルコードではSagemakerのTraining JobやRoboMakerはdefault VPC内で作成されるようになっているため、
Default VPCを消している人は再作成しておく必要があります

## IAMロールの修正
IAMロール名は各環境で異なるためSageMaker Notebookのマネジメントコンソールより確認してください
「Permissions」で「AmazonSageMakerFullAccess 」がアタッチされていることを確認します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/f57c77d9-1fa5-1539-5320-2a0eeb5bd15f.png)
「Trusted entities」が「The identity provider(s) sagemaker.amazonaws.com 」となっていることを確認します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/fdc3409d-eec0-af17-ca71-1155dfd59666.png)
「Edit Trust Relationship」を押して、以下のようにPolicy Documentを編集して、更新します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/4ef63edc-abd2-2a9d-2563-9666021b68dc.png)
更新後に「Trusted entities」が「The identity provider(s) sagemaker.amazonaws.com と robomaker.amazonaws.com 」になっていることを確認します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/c419d54c-e7f0-a23b-99c3-2721001dcced.png)

以上で事前準備は終わりです。

## サンプルノートブック(コード)を開きます
`rl_deepracer_coach_robomaker.ipynb`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/d762b4d5-d51e-31dc-9b64-ba47690aecfd.png)

## Not TrustedをTrustedへ変更します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/bf9c63a8-d739-3cde-2a73-aba5ef583cd6.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/b6ab56da-f044-d83d-a284-9bb1c4fb1951.png)

## コードを順番に実行します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/0402a010-a6a1-4cb0-578d-87a9e9ae2d52.png)

## RoboMakerのコンソールへ移動します
コードを順番に実行して「Clean Up」直前まで進めます。
以下の部分で、RoboMakerへのリンクが表示されるので、クリックします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/6c4f700b-0c78-d531-3ef0-5a3788128f2a.png)

「Status」がRunningになっていることを確認して、`Gazebo`を開きます
Gazeboのチェックボックスを選択して、Action - Open を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/736a8cac-0c74-d2f4-ea67-978b26ad4775.png)

すると画面が切り替わり、以下のようにDeepRacerが走り出しているのを確認できます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/659a2258-a12d-e4f8-e07c-b804e2f234b7.png)

# リソースの確認
## SageMakerのトレーニングジョブ
ml.c5.4xlargeを1インスタンス使って、5時間(18000s)のトレーニングが実行されています
5時間経過すると自動的にトレーニングが停止(Stopped)します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/5ed39fa9-ee5a-05fc-e9bb-e5c90f800ab8.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/2c9d7bf1-9953-b16e-eaff-ae0abc8f443b.png)

## RoboMakerの確認
Simulation Application と Simuation Job が作成されていることを確認できます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/7c627a6d-99d3-474c-b343-e2cd9b91c1d8.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/107953/39870ee6-29cf-2ce7-b98f-fc7078a62d23.png)


# まとめ
サンプルコードを触っただけですが、見事SageMaker RLとRoboMakerを利用して、DeepRacerを走らせることができました。
次回は、サンプルコードの解説を私の理解できる範囲で行いたいと思います

# 最後の削除
5時間待ってリソースを削除してもいいですが、すぐに削除したい場合は
SageMakerのトレーニングジョブの停止
SageMaker Notebookの停止（必要なら削除)
RoboMakerのSimulation Applicatio と Simuation Jobの削除
S3に保存してデータの削除
を行いましょう。