5月のDeepRacerのF1 ProAm Event のタイムトライアルで3位になったので、EC2でのDeepRacerのローカルトレーニング 2020 環境構築手順を共有します

2020.06.04

梶原@福岡オフィスです。DeepRacerではMentaiko-DevelopersIOで参加しています。

5月のVirtual Circuit でまさかの3位表彰台に上がってしまいました。 DeepRacerには昨年から参戦しており、初の表彰台なので結構嬉しいです。

という事で脈略はあまりないですが、良い結果を残すことができた事はローカルトレーニング のおかげだと思っているので、良いものはすべからく情報発信するClassmethodの精神にのっとりDeepRacerのEC2でのローカルトレーニング環境の構築手順をご紹介したいと思います。

※※※ 注意 ※※※

無料利用枠の対象外のリソースを作成しますので課金が発生します。トレーニングも通常長い時間がかかりますので、実際にトレーニングを行う場合はスポットインスタンスのご利用を強くお勧めします。

また、今回ご紹介する、EC2でのDeepracer のローカルトレーニング方法はAWS ではサポートされていませんのでAWSへの問合せなどはお控えください。

https://aws.amazon.com/jp/deepracer/faqs/?nc1=h_ls

Q: AWS Cloud ではなく自分のコンピューターで、モデルをローカルにトレーニングすることはできますか?
現在のところ AWS DeepRacer ではローカルトレーニングはサポートされていません。

困った場合は AWS DeepRacer Community: https://deepracing.io/ などで(自分も参加しています)助けてもらえる事があるかもしれませんが、あくまで自己責任で実施ください。

また、5月は特に問題はありませんでしたが、6月、今後も含めて、ローカルトレーニングで作成したモデルで今後も参加できることは保証できません。

こんな状況なのですが、AWS DeepRacer Community の有志の方々でローカルトレーニングは日々、修正メンテされており、ほんと頭が上がりません、AWS DeepRacer Communityの皆さんにこの場を借りてお礼申し上げます。

DeepRacerとは

おそらく、このページが必要になってる方は説明不要だと思うので詳細割愛します。

私見ですが、

車が好きでレースに参加していたら、気が付くと機械学習に詳しくなってしまうそんなサービスです。

Developsers.IOの特集カテゴリもございますので、ご参考ください

DeepRacer – 特集カテゴリー –
https://dev.classmethod.jp/referencecat/aws-deepracer/

ローカルトレーニングとは

通常 DeepRacerはAWSのコンソール上から、お手軽にモデルのトレーニングを開始、レースに参加できます。(無料利用枠もあります)

DeepRacerは、AWSのマネージドサービスSageMaker, RoboMaker, S3, Kinesis等を組み合わせてAWSのコンソール上で実施できるようにサービスが提供されています。 DeepRacerの構築内容などはAWSから公開されています。それを単独の環境(EC2やローカルのPCなど)でモデルのトレーニングを実行できるように有志によって作成されたのがローカルトレーニングになります。

主なモチベーションはコストメリットになりますが、やはりマネージドサービスを使わないことによるトレードオフが発生します。具体的にはメモリ不足、ストレージの空き容量などのハード面の管理、個人的に一番大きいと思っているのがモデルの履歴管理を自分でしないといけません。これがSageMakerやDeepRacerのコンソールはよくできており、ローカルトレーニングをやっているとすぐモデルやハイパーパラメータが迷子になってしまいます。

とはいえ、ローカルトレーニング環境を触っていると、各サービスの連携やSageMaker,RoboMakerの実装方法などに詳しくなれます。そして自由にカスタマイズ(壊すこともよくありますが)もできます。

EC2でのDeepRacerのローカルトレーニング環境構築

環境作成にあたり

AWS DeepRacer Community のローカルトレーニングのWikiページ

https://wiki.deepracing.io/Local_Training

の情報をもとに構築を行っています。

使用するリポジトリ

DeepRacerのローカルトレーニングのリポジトリはいくつかありますが、今年度のDeepRacerの仕様(デュアルカメラ、H2Hなど)に対応している以下のリポジトリを使用しています

https://github.com/mattcamp/deepracer-local

EC2インスタンスの作成

インターネットにアクセス可能な以下のEC2インスタンスを作成ください

項目 備考
AMI AWS Deep Learning AMI (Ubuntu 18.04) Version 29.0 (ami-0423232d1433f88e6)
ディスク容量 100GB 必要に応じて拡張してください
EIP aaa.bbb.ccc.ddd 必須ではありませんが、アクセスするIPアドレスを固定するため割り当ててください
インスタンスタイプ c5.2xlarge GPU使用したい場合はG系のインスタンスを選択ください
ポート開放 22 SSHアクセス用(接続元は制限してください)
ポート開放 8888 シミュレーション画面用(接続元は制限してください)
Role AWSDeepRacerServiceRolePolicyを割り当てたRoleを付与します 作成したモデルをアップロードするために必要です。

環境構築

SSHで対象のインスタンスに接続して、以下コマンドを実行していきます。 AWS Deep Learning AMI (Ubuntu 18.04) を使用しているので ユーザ名は 'ubuntu'です。

DockerComposeの導入

$sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$sudo chmod +x /usr/local/bin/docker-compose
$docker-compose version

Docker networkの作成

$docker network create sagemaker-local

リポジトリの複製

$git clone https://github.com/mattcamp/deepracer-local
$cd deepracer-local

次以降の手順はクローンした deepracer-local のフォルダで行います

設定情報の書き換え

GPUなしのc5.2xlarge でやるため、GPUの使用設定を変更します

config.env の以下設定を変更してください
awsdeepracercommunity/deepracer-sagemaker:cpu が使用されます
trueのままであれば awsdeepracercommunity/deepracer-sagemaker:gpu が使用されます

$vi config.env
GPU_AVAILABLE=false
ENABLE_GPU_TRAINING=false

GPUを使用する場合

ENABLE_GPU_TRAINING=true

さらにRobomakerでもGPUを使用したい場合、使用するDocker Imageを変更します
(GPUを使用する場合でもRoboMakerはCPUの使用でも問題ないかとおもいます また、要求されるGPUのメモリが多く必要となります)

$vi docker-compose.yml
robomaker:
    image: awsdeepracercommunity/deepracer-robomaker:gpu

コンテナイメージの取得

docker pull mattcamp/dr-coach
docker pull minio/minio
# USE CPU
docker pull awsdeepracercommunity/deepracer-sagemaker:cpu
docker pull awsdeepracercommunity/deepracer-robomaker:cpu

# USE GPU
docker pull awsdeepracercommunity/deepracer-sagemaker:gpu
docker pull awsdeepracercommunity/deepracer-robomaker:gpu

上記は初回トレーニング開始時に必要なイメージが自動でpullされますが、pullに時間がかかりトレーニングを開始できないことがありますので、事前にダウンロードすることをお勧めします。また、新しいトラックがリリースされた場合、イメージを取得しなおす必要があります

実はこれで、主だった環境構築は終わりです。

去年までのローカルトレーニングの環境構築を知っている方は結構驚くかと思います。 AWS Deep Learning AMI (Ubuntu 18.04) に必要なものが全部含まれている。& AWS DeepRacer Community の皆さんのおかげです。

トレーニングの開始

一旦、報酬関数やハイパーパラメータ、トラックなどは変更せずに動作確認をおこなってみてください。

初回は起動は時間がかかる、また起動に失敗することもありますので、シミュレーション画面が見れなかった場合や、トレーニングが開始してない場合は一度トレーニングを終了し再度開始してください。

特にエラーが発生せず、ログが進みだして、シミュレーションが開始されれば成功です。

$ ./start-training.sh

シミュレーション画面の確認

ブラウザでインスタンスに割り当てたパブリックIPにアクセスしてみます

http://aaa.bbb.ccc.ddd:8888

にアクセスしてみてください。 鳥観視点や、車のカメラ等のストリームを見ることができるかと思います。 AWS DeepRacerのコンソールと同じ画面は

http://aaa.bbb.ccc.ddd:8888/stream_viewer?topic=/racecar/deepracer/kvs_stream

になります。

トレーニングの終了

以下コマンドを実行するとトレーニングが終了します

$ ./stop-training.sh

各種パラメータの設定

ここまでいけば、コンソール上でトレーニングするようにアクション、報酬関数、ハイパーパラメータ、トラックなどを変更してトレーニングを実施してみてください

詳しくは https://wiki.deepracing.io/Customise_Local_Training

をご参照ください

主だった設定ファイルのパスを記載します。

項目 備考
アクションスペース data/minio/bucket/custom_files/model_metadata.json
センサー data/minio/bucket/custom_files/model_metadata.json カメラ、LIDARの有無など
トラック config.env WORLD_NAME トラックは2か所変更する必要があります
トラック data/minio/bucket/custom_files/training_params.yaml WORLD_NAME トラックは2か所変更する必要があります
レースの種類 data/minio/bucket/custom_files/training_params.yaml RACE_TYPE
報酬関数 data/minio/bucket/custom_files/reward.py
ハイパーパラメータ src/rl_coach_2020_v2/rl_deepracer_coach_robomaker.py

作成したモデルのアップロード

以下コマンドで s3://<S3_BUCKET>/<S3_PREFIX>/model/ 配下に作成したモデルがアップロードされます

$ ./upload-current.sh <S3_BUCKET> <S3_PREFIX>

アップロード先のS3のバケットとプレフィクスですが、上書きしてもよいモデル(ローカルトレーニングのアップロード用に5分程度で作成されることをお勧めします)の SageMakerのパイパーパラメータ部分を参照してください。

上書きするモデルのシミュレーションの下記部分をクリックします

SageMakerのハイパーパラメータ部分を確認します

具体対的には下記のようになります。

$ ./upload-current.sh aws-deepracer-xxxxxxx DeepRacer-SageMaker-RoboMaker-comm-xxxxxx

アップロードした後は上書きしたモデルを指定して、レースにエントリーしてください。

まとめ

なお、6/14に行われるDeepRacerの仮想サーキットのF1イベントの決勝レースにも出場します。 いい結果がでれば、報酬関数を公開しちゃおっかなって思ってるので、応援してください

DeepRacerおもしろそうだなと思ったら、ぜひ参戦してみてください。今月もオンラインサミットレースは開催されていますので、ローカルトレーニングでなくても、コンソールから気軽に参加できチャンピオンシップへの出場のチャンスがあるかと思います。

そうすると、近い将来ローカルトレーニングが必要な状況も出てくると思うので、そっと思い出してもらえたらとおもいます。

おまけ

実は自宅PCでも以下Specで24H耐久レースでトレーニングをしています。ただ、いや、もうはっきり言いますが、ドライバとか、CUDAとかcudnnとか環境構築がめちゃ大変なのでAWS Deep Learning AMI 最高です。

項目 備考
OS Ubuntu 18.04
CPU Intel CPU Core i7-6700
Memory 48GB
GPU Nvidia GPU RTX2060 Super

おまけ2

Nvidia Jetson でも動きそうなんですが、ARMのコンテナイメージがうまくできない&Ubuntu18のRobomakerがmelodicで、コンテナで使用されているものはUbuntu16 Kineticなので詰まってます。知見のあるかたコミュニティで連絡ください。

参考情報

AWS DeepRacer Community Wiki - Local Training https://wiki.deepracing.io/Local_Training

AWS DeepRacer Community Wiki https://wiki.deepracing.io/Main_Page