はじめに
AWSから提供されているAWS DeepRacerのログ分析ツールを会社の人たちと使ってみました。ログ分析ツールはノートブックの形式で以下のAWS DeepRacerワークショップのGitHubで公開されています。
https://github.com/aws-samples/aws-deepracer-workshops
注意
以下の内容は 2019 年 6 月 6 日時点のサンプルノートブックを対象にしています。
その他のバージョンのノートブックでは利用できない可能性があります。
導入の手順
ポリシーの作成
Jupyter Notebookインスタンス用のIAMロールに以下のポリシーをアタッチしておきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:FilterLogEvents",
"Resource": "*"
}
]
}
※IAMロールの作成方法はAWS DeepRacerシミュレーションと同じなのでこちらを参考にしてください。
SageMakerでDeepRacerシミュレーションを始める方法 IAMロールの作成
Amazon SageMakerノートブック環境の作成
1. Management ConsoleでAmazon SageMakerを開き、AWS DeepRacerコンソールと同じバージニア北部リージョンに切り替えます。
※ノートブックインスタンスの作成方法はAWS DeepRacerシミュレーションと同じなのでこちらを参考にしてください。
SageMaker で DeepRacer シミュレーションを始める方法 SageMakerノートブック環境の作成
2. Jupyter Notebookを開いて「Files」タブの「New」プルダウンから「Terminal」を選択します。
3. Terminal画面が開いたらGitHubからリポジトリのクローンをします。
$ cd SageMaker/
$ git clone https://github.com/aws-samples/aws-deepracer-workshops.git
4. Jupyter Notebookの「Files」タブから
/aws-deepracer-workshops/log-analysis/DeepRacer Log Analysis.ipynb を開きます。
5. 環境選択画面が表示されるのでここでは「conda_tensorflow_p36」を選択します。
※この後にある追加のパッケージを行う作業で、同じ環境を選択をします。
ノートブック環境に応じてパッケージのインストール
当社で確認した時点では、ノートブックの実行途中でshapelyのimportエラーが出ていたのであらかじめanacondaの環境に対してパッケージをインストールしておきます。
-
Jupyter Notebookの「Conda」タブから上部のリストボックスConda environmentsに環境一覧が表示されるので「tensorflow_p36」を選択します。(図中1-1)
右下のリストボックスの表示が「tensorflow_p36」に変わるのを確認します。(図中1-2) -
左下のリストボックスから「shapely」を選択します。(図中2)
テキストで絞り込み検索をすることもできます。 -
中段の「→」を選択するとインストールが始まります。(図中3)
インストールされたかどうかは右下のリストボックス上部の「Refresh package list」アイコンを押すと確認ができます。
これで準備は整いました!
ログ分析を実行してみた
ノートブックを開くことができたら、セルを上から実行します。(実行ボタンを押すか、Shift+Enter)
Download the desired log file given the simulation ID
AWS DeepRacerコンソールで評価したいトレーニングと紐づいているシミュレーションIDに書き換えます。シミュレーションIDはAWS RoboMakerのシミュレーションジョブから確認ができます。
stream_name = 'シミュレーションID' ## CHANGE This to your simulation application ID
fname = 'logs/deepracer-%s.log' %stream_name
cw_utils.download_log(fname, stream_prefix=stream_name)
Load waypoints for the track you want to run analysis on
トレーニングで利用したトラック名を入力します。
トラック情報は随時追加されているようです。aws-deepracer-workshops/log-analysis/tracks/ からファイル名(=分析するトラック名)を確認することができます。
ここでは5月のバーチャルサーキットトラックのLondonLoopを指定します。
def get_track_waypoints(track_name):
return np.load("tracks/%s.npy" % track_name)
waypoints = get_track_waypoints("London_Loop_Train")
waypoints.shape
Visualize the Track and Waypoints
先ほど選択したLondonLoopのコースが結果に表示されました
ノートブックの全てを紹介しきれないのですが、このように結果を確認しながら進めていきます。
注意
- ノートブックの途中でログファイル名が固定値になっている箇所や、トレーニングの内容や時間によって、パラメータがデフォルトのままではエラーになる箇所があるので、その都度修正や調整をしながら進めました。
- トレーニングのシミュレーションログだけでなく、モデルや評価時のシミュレーションIDが入力情報となる分析もありました。
- reInventコースしか対応されていない分析の種類も一部ありました。
分析結果
Plot rewards per Iteration
エピソードが進むにつれ報酬がどう変化していくのかがわかります。
Analyze the reward distribution for your reward function
トレーニングの結果、どのルートをどれだけ多く通過しているのか視覚的にとらえやすいです。
Path taken in a particular episode
Grid World Analysis
reInventコースでも試してみました。コース上でどのくらいのスピードが出ているのかわかります。
その他
この他、いくつかの分析の種類があり全てをご紹介できないのですが、中には結果が何を意味するものなのか、わからないものもありました。
まとめ
ログ分析ツールを使って、全ての分析結果を出すことはできましたが、これらの結果から何を読み解いて、どう分析していくのか? そこからどんな解を得てAWS DeepRacerに反映していくのか? は、強化学習初心者にはなかなか難しい内容でした。
データサイエンティストやデータアナリストの仕事の一部に少しだけ触れることができて、その大変さとリスペクトを実感しました。
AWS DeepRacerの取り組みに対しては報酬関数を実装して強化学習トレーニングを進めるだけでなく、ログやデータを元に分析する、というスキルも必要そうだということがわかりました。