Edited at

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

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

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


吐かれるログ

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


ロググループ名

/aws/robomaker/SimulationJobs


対象ログイベント


  • SIM_TRACE_LOGで始まるログ


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

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


デフォルトの出力

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

logs.png


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


出力結果

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

query1.png


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

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


出力結果

query2.png

Insightsでは他にもstatsなどの集計コマンドが使えるので、いろいろできそうです。


補足

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

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

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


参考