DeepRacerのSageMakerサンプルノートブックを動かすと、CWLogsに報酬関数のトレースログが吐かれます。これをLogsInsightsでパースしてみました。

サンプルノートブック 自体は下記の記事を参考に動かしています。

吐かれるログ

ログはデフォルトで以下のCloudWatchlogsに吐かれる。

ロググループ名

/aws/robomaker/SimulationJobs

対象ログイベント

  • SIM_TRACE_LOGで始まるログ
  • deepracer_env.py の def infer_reward_state の中で「入力パラメータ」と「結果の報酬」を出力している

ソースコードを見ると報酬関数に渡しているものとは若干違うパラメータもログ出力していますが、今回はそのままパースしてみます。

デフォルトの出力

どれがどのパラメータかパッと見ではわからない…

Logs Insights でパース

実装コードから、どの出力がどのパラメータなのか確認し、insightsのparseコマンドに反映。

トレースログをパースして100行表示

クエリ

fields @message
| filter @message like /^SIM_TRACE_LOG/
| parse @message "SIM_TRACE_LOG:*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*" as episodes,steps,x,y,car_orientation,steering,throttle,action_taken,reward,progress,waypoint_action,done,on_track,current_progress,initidxWayPoint,closest_waypoint_index,track_length,time
| sort by time
| limit 100

出力結果

これでまともに見れそうな気がしてきました。

条件に合うログのみ表示してみる

50steps以降で、スロットル0.5未満で1以上の報酬を与えたログを100行表示してみます。

クエリ

fields @message
| filter @message like /^SIM_TRACE_LOG/
| parse @message "SIM_TRACE_LOG:*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*" as episodes,steps,x,y,car_orientation,steering,throttle,action_taken,reward,progress,waypoint_action,done,on_track,current_progress,initidxWayPoint,closest_waypoint_index,track_length,time
| filter (steps>50 and throttle<0.5 and reward>=1)
| sort by time
| limit 100

出力結果

Insightsでは他にstatsなどのコマンドもあるので、いろいろできそうです。

補足

progress(コード上はtotal_progressという変数)はドキュメント上、0.0〜1.0が入るように読めたが

progress float [0,1] Percentage of track completed.

実際は0〜100のレンジっぽい値が出力された。コードを確認すると積算用の進捗をcurrent_progress *= 100.0 していたり気になりましたがパラメータの詳細についてはこの記事で触れません。

参考

元記事はこちら

AWS DeepRacerの報酬関数トレースログをCloudWatchLogs Insightsでパースして分析