5月のDeepRacerのF1 ProAm Event のタイムトライアルで3位になったので、EC2でのDeepRacerのローカルトレーニング 2020 環境構築手順を共有します
梶原@福岡オフィスです。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