合并多个配置文件跟踪文件的时间轴 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

合并多个配置文件跟踪文件的时间轴

SMDebug 客户端库提供了用于分析的分析工具和可视化工具,以便合并 Debugger 收集的系统指标、框架指标和 Python 分析数据的时间轴。

提示

在继续操作之前,您需要设置一个将在本页示例中使用的 TrainingJob 对象。有关设置 TrainingJob 对象的更多信息,请参阅访问分析数据

MergedTimeline 类提供了工具,用于在单个时间轴中集成和关联不同的分析信息。Debugger 从训练作业的不同阶段捕获分析数据和注释之后,跟踪事件的 JSON 文件默认保存在 tracefolder 目录中。

  • 对于 Python 层中的注释,跟踪文件保存在 *pythontimeline.json

  • 对于 TensorFlow C++ 层中的注释,跟踪文件保存在中*model_timeline.json

  • TensorFlow 探查器将事件保存在 *trace.json.gz 文件中。

提示

如果要列出所有 JSON 跟踪文件,请使用以下 AWS CLI 命令:

! aws s3 ls {tj.profiler_s3_output_path} --recursive | grep '\.json$'

如以下屏幕截图动画所示,将从不同分析源捕获的跟踪事件放在一个图中并对齐,可以概要了解在训练作业的不同阶段发生的整个事件。

合并时间轴的示例
提示

要使用键盘在跟踪应用程序上与合并的时间轴进行交互,请使用 W 键来放大,使用 A 键来向左移动,使用 S 键来缩小,使用 D 键来向右移动。

使用 smdebug.profiler.analysis.utils.merge_timelines 模块中的以下 MergedTimeline API 操作和类方法,可以将多个事件跟踪 JSON 文件合并为一个跟踪事件 JSON 文件。

from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline combined_timeline = MergedTimeline(path, file_suffix_filter, output_directory) combined_timeline.merge_timeline(start, end, unit)

MergedTimeline API 操作传递以下参数:

  • path(字符串)– 指定根文件夹 (/profiler-output),其中包含系统和框架分析跟踪文件。你可以profiler-output使用 SageMaker估算器类方法或对象来找到。 TrainingJob 例如,estimator.latest_job_profiler_artifacts_path()tj.profiler_s3_output_path

  • file_suffix_filter(列表)– 指定要合并时间轴的文件后缀筛选条件列表。可用的后缀筛选条件为 ["model_timeline.json", "pythontimeline.json", "trace.json.gz"].,如果未手动指定此参数,则默认情况下将合并所有跟踪文件。

  • output_directory(字符串)– 指定保存合并的时间轴 JSON 文件的路径。默认值是为 path 参数指定的目录。

merge_timeline() 类方法传递以下参数用于执行合并进程:

  • start(整数)– 指定合并时间轴的开始时间(以微秒为单位,采用 Unix 时间格式)或开始步骤。

  • end(整数)– 指定合并时间轴的结束时间(以微秒为单位,采用 Unix 时间格式)或结束步骤。

  • unit(字符串)– 在 "time""step" 之间选择。默认值为 "time"

使用以下示例代码,执行 merge_timeline() 方法并下载合并的 JSON 文件。

  • 使用 "time" 单位选项合并时间轴。以下示例代码合并了在 Unix 开始时间(绝对零 Unix 时间)与当前 Unix 时间之间的所有可用跟踪文件,这意味着您可以合并整个训练期间的时间轴。

    import time from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline from smdebug.profiler.profiler_constants import CONVERT_TO_MICROSECS combined_timeline = MergedTimeline(tj.profiler_s3_output_path, output_directory="./") combined_timeline.merge_timeline(0, int(time.time() * CONVERT_TO_MICROSECS))
  • 使用 "step" 单位选项合并时间轴。以下示例代码合并了步骤 3 和步骤 9 之间的所有可用时间轴。

    from smdebug.profiler.analysis.utils.merge_timelines import MergedTimeline combined_timeline = MergedTimeline(tj.profiler_s3_output_path, output_directory="./") combined_timeline.merge_timeline(3, 9, unit="step")

在 Chrome 浏览器上,通过 chrome://tracing 打开 Chrome 跟踪应用程序,然后打开 JSON 文件。您可以浏览输出来绘制合并的时间轴。