首页 > 解决方案 > Amazon SageMaker notebook rl_deepracer_coach_robomaker - 模拟后在 S3 上写入日志 CSV

问题描述

我在 Amazon SageMaker 上创建了我的第一个笔记本实例。接下来,我打开了 Jupyter notebook,并在 Reinforcement Learning 部分中使用了 SageMaker 示例rl_deepracer_coach_robomaker.ipynb。这个问题主要针对那些熟悉这个笔记本的人。

在那里,您可以启动训练过程和 RoboMaker 模拟应用程序来启动自动驾驶汽车的学习过程。

启动模拟作业时,可以访问日志文件,该文件默认在 CloudWatch 控制台中可视化。日志文件中出现的一些信息可以deepracer_env.py/src/robomaker/environments子目录的脚本中进行修改。

我想“绕过” CloudWatch 控制台,将日志文件信息(如情节、总奖励、步数、汽车坐标、转向和油门等)保存在要写入 S3 上某处的数据帧或 csv 文件中模拟结束。

在主笔记本中进行了类似的操作rl_deepracer_coach_robomaker.ipynb来绘制训练作业的指标,即每集的训练奖励。那里可以看到

csv_file_name = "worker_0.simple_rl_graph.main_level.main_level.agent_0.csv"

从 S3 调用,但我根本找不到生成此 csv 以模拟该过程的位置。

标签: amazon-s3reinforcement-learningamazon-sagemaker

解决方案


您可以在文件夹中创建一个csv文件/opt/ml/output/intermediate/,该文件将保存在以下目录中:

s3://<s3_bucket>/<s3_prefix>/output/intermediate/<csv_file_name>

但是,我不清楚您将在哪里创建这样的文件。DeepRacer notebook 使用两台机器,一台用于训练(SageMaker 实例),一台用于模拟(RoboMaker 实例)。上述方法仅适用于 SageMaker 实例,但您想要记录的大部分内容(例如(一集中的“总奖励”)实际上都在 RoboMaker 实例中。对于 RoboMaker 实例,中间文件夹功能不存在,您必须使用 boto 库自己将文件保存到 s3。这是一个这样做的例子:https ://qiita.com/hengsokvisal/items/329924dd9e3f65dd48e7

有一种方法可以将 CloudWatch 日志下载到文件中。这样您就可以打印、保存日志并对其进行解析。假设您正在从笔记本单元执行:

STREAM_NAME= <your stream name as given by RoboMaker CloudWatch logs>
task = !aws logs create-export-task --task-name "copy_deepracer_logs" --log-group-name "/aws/robomaker/SimulationJobs" --log-stream-name-prefix $STREAM_NAME --destination "<s3_bucket>" --destination-prefix "<s3_prefix>" --from <unix timestamp in milliseconds> --to <unix timestamp in milliseconds>
task_id = json.loads(''.join(task))['taskId']

导出是一个异步调用,所以请花几分钟时间下载。如果可以打印 task_id,则导出完成。


推荐阅读