大澤勇斗(25)21こんにちは、大阪DI部の大澤です。SageMakerで学習させるサンプルノートブックを試してみました。今回はその内容をお伝えします。実機が無くてもノートブックに沿って進めていくことで、DeepRacerをシミュレーション上で走らせられます!概要SageMakerとRoboMakerを使うことでDeepRacerをシミュレーション上で動かし、モデルを学習させる事ができます。RoboMakerのシミュレーションジョブでDeepRacerを走らせ、その結果どうなったかをSageMakerで回しているモデルの学習ジョブにフィードバックします。そのフィードバックに基づいてモデルは学習し、更新されます。RoboMakerのシミュレーションジョブでDeepRacerが更新されたモデルを用いて再び走ります。これを繰り返すことで徐々にDeepRacerはコースに沿って走れるようになっていきます。awslabs/amazon-sagemaker-examples関係図に載っている用語はざっくり次のような感じです。車の前方に付いているカメラからの画像です。ステアリング角度(-1〜1)とスロットル(0〜1)の2つの値です。状態(画像)に基づいてエージェントが行動を決めます。現在の位置などの情報と行動に対する評価みたいなものです。いう状態の時はどういう行動が良いのかをエージェントに学習させるために主に使います。学習しないときやシミュレーション環境ではなく現実で動かす場合には報酬は不要です。(なので、シミュレーション上でしか取ることが出来ないデータを使って報酬を決められます。現在の状態(入力された画像)に基づいてどういう行動をとるかを決めます。DeepRacer自体とも言えます。SageMakerで学習されるモデルはエージェントを構成する1要素として考えられます。やってみたやってみた内容は主に次の通りです。RoboMakerは東京リージョンで使えないので、バージニア北部リージョンなどのRoboMakerが対応しているリージョンに移動する必要があります。今回はバージニア北部リージョンでやってみました。ノートブックインスタンス起動からサンプルノートブックの準備SageMakerのマネジメントコンソールを開き、バージニア北部リージョンへ移動後、ノートブック一覧ページからノートブックインスタンスを作成します。作成&起動が完了後、ノートブックを開きます。(JupyterLabでも問題ありません。Examplesタブからサンプルノートブック一覧を開きます。reinforcement_learningからrl_deepracer_robomaker_coach_gazeboを選択し、コピーします。rl_deepracer_robomaker_coach_gazeboは以下のようなファイルで構成されています。SageMakerとRoboMakerの設定やDeepRacerの強化学習を進めていくノートブックです。SageMakerとRoboMakerを連携してDeepRacerの学習を進める中で実行するスクリプトファイルを含んでいます。強化学習実行時のエントリポイントです。DeepRacerの強化学習を行う際のプリセット(設定)です。エピソード数や学習率から割引率といった学習時のパラメータが設定されています。DeepRacerの強化学習用の環境を定義するスクリプトです。行動や報酬などもここで定義されています。robomaker/environments/init.pyで読み込む環境定義クラスが指定されています。環境定義を変更する場合はこちらも確認が必要です。S3とのやり取りを楽にするためのユーティリティスクリプトファイルを含んでいます。ノートブックや学習を進めるにあたり便利なユーティリティスクリプトファイルを含んでいます。環境作成ここからは順次ノートブック上のスクリプトを実行していきます。enterによって、セルを1つずつ実行できます。)まずは使用するパッケージ/モジュールの読み込みを行います。*次に学習時に使用するS3バケットとパスを指定します。スクリプトのままだとデフォルトバケットを使用しますが、必要に応じて別のバケット名を指定しても問題ありません。SDKが学習時にジョブ名と出力フォルダ名を自動的に追加しますジョブ名とリージョン名を確認します。RoboMakerは東京リージョンでは使えないので、対応しているバージニア北部リージョンなどで実行する必要があるためです。学習時間を指定します。学習やシミュレーションなどを実行する際に使用するIAMロールです。ノートブック起動時に関連づけたIAMロールが使われます。{}".format(role))display(Markdown(generate_help_for_robomaker_trust_relationship(role)))今回はRoboMakerのシミュレーションを作成する必要があるので、表示される説明にしたがって信頼関係にRoboMakerを追加します。説明の中にあるIAMロール設定画面へのリンクを開き、信頼関係タブの信頼関係の編集から信頼関係に関するポリシーを編集することができます。学習ジョブを実行するSageMakerとシミュレーションジョブを実行するRoboMakerはお互いに通信を行う必要があります。通信が出来るように学習ジョブとシミュレーションジョブを実行するためのVPCとサブネット、セキュリティグループを取得します。今回はデフォルト設定のものを使います。default_subnets)先ほど取得したVPCにS3エンドポイントを作成します。default_vpc)))SageMakerの学習ジョブを回す一通りの環境設定が終わったらSageMakerで学習ジョブを実行します。強化学習の環境を定義したスクリプトとプリセットを定義したスクリプトをS3にアップロードします。"*.pyc"学習途中に獲得報酬や損失の値を確認できるようにメトリクスとして定義します。reward=(.*?),'},]強化学習用のEstimatorであるRLEstimatorを作成し、学習ジョブを実行します。wait=False)RoboMakerのシミュレーション環境の作成これでSageMakerで学習ジョブが作成されました。これだけではモデルの学習は行われません。学習を進めるためにはRoboMakerのシミュレーションジョブを動かす必要があります。シミュレーションを行う際に必要となるアプリケーションバンドルをダウンロードし、S3にアップロードします。simulation_ws.tar.gzRoboMakerのシミュレーションアプリケーションを作成します。シミュレーションアプリケーションはどういうシミュレーションを行うかの設定プリセット的なものです。eシミュレーションアプリケーションを基にシミュレーションジョブを作成します。今回の場合は次の3つから選択する必要があります。job_arn)学習中のDeepRacerを見てみるSageMakerで学習ジョブとRoboMakerでシミュレーションジョブを作成することができると、遂にDeepRacerが動き出します。以下の処理を実行することでRoboMakerのシミュレーションジョブのページへのリンクを作成してくれます。そのリンクからシミュレーションジョブページを開きます。aws_region)))まずはGazeboでDeepRacerが動いている様子をみてみます。GazeboのアイコンをクリックすることでGazeboが開きます。DeepRacerがコースを外れては何度もスタートから走り直す様子をみる事ができます。※コースアウトしても走り続けたり、ぐるぐる同じところを回っている事があります。狂った訳ではなくSageMakerでモデルの学習を行なっています。すると、再びコース上を走り始めます。Gazeboは環境をいじったりシミュレーション速度を変えたりなど、操作が可能です。試してみると面白そうです。GUI次にrqtを使ってDeepRacerの視点を見てみます。シミュレーションジョブのページに戻り、rqtのアイコンからrqtを開きます。はい、何も表示されません。View用の画面に変わるので、左上のプルダウンから/camera/zed/rgb/image_rect_colorを選ぶことで、画像を表示できます。DeepRacerの視点での画像が表示されます。更新間隔に従って自動的に画像は変わっていきます。この画像を使ってDeepRacerはどういう行動が良いかを選択します。獲得報酬の変化を見てみるでは次にノートブックに戻って学習時の獲得報酬の変化を見てみます。次に評価を行うので、十分に学習をした段階でDeepRacerの強化学習を終わらせます。学習を終了させる際には以下のコードでSageMakerの学習ジョブとRoboMakerのシミュレーションジョブを停止できます。robomaker.cancel_simulation_job(job=job_arn)sage_session.sagemaker_client.stop_training_job(TrainingJobName=estimator._current_job_name)評価RoboMakerのシミュレーションジョブを新たに作成することで、学習させたモデルがどれだけ賢いかを改めて確認することができます。response["arn"])ジョブの作成が完了したら学習時と同様にシミュレーションジョブの実行画面に移動し、DeepRacerの動いている様子をみることができます。今回のシミュレーションは20回の試行で終了するため、結構早くにシミュレーションが終わります。シミュレーションが作成中の間待っているとシミュレーションの状態が失敗になる事がありました。シミュレーションが完了すると、状態が失敗になる事があるようです。その場合はシミュレーションを作成し直すと良さそうです。確認が完了したらシミュレーションジョブを停止させます。robomaker.delete_simulation_application(application=simulation_app_arn)これで一通りの流れは終了となります。さいごに今回はSageMakerとRoboMakerを連携させて、仮想環境上で「DeepRacerを走らせる&強化学習させる」サンプルノートブックを試してみました。変な動きをしながらも少しずつ前に進めるようになっていくDeepRacerは可愛いかったです。文字だけ追ってみるとなんか難しそうに見えますが、ノートブックに沿ってぽちぽちするだけで、DeepRacerを仮想環境上で動かせることができます。src/robomaker/environments/deepracer_env.pyにある報酬関数やアクションの定義などを変更することで、学習の仕方やDeepRacerの行動の選択肢などを変えることができます。DeepRacerの高速化に向けてこれらのスクリプトの変更を試しつつ、機械学習に関連する学習率などのハイパーパラメータの変更なども試すことで、楽しみながら強化学習を学ぶことができます。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。〜ITエンジニアのお仕事とホンネ〜1月30日に新卒向けの会社説明会〜ITエンジニアのお仕事とホンネ〜を開催します。濱田孝治80EKS初心者の方向けに、EKS周辺のAWSリソースがどのように関連して動作しているのかをステップバイステップでEKSCTLが担っている役割を中心に説明しました。菊池修治45こんにちは、菊池です。VPNの冗長化について、最近何度か続けて社内で質問を受けましたのでまとめようと思います。大前諒祐26MediaLiveでの配信終了時に自動でアーカイブファイルをMediaConvertで変換する仕組みを作ってみました。武田隆志1179このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。クラスメソッドの関連会社であるアノテーション株式会社の研修として依頼を受け、チームと心理的安全性、それに礼節というテーマで話をしてきました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe328件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui328インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。濱田孝治272「ふわわぁ、眠いな。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。