

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

# 合并多个配置文件跟踪文件的时间轴
<a name="debugger-merge-timeline"></a>

 SMDebug 客户端库提供了分析分析和可视化工具，用于合并调试器收集的系统指标、框架指标和 Python 分析数据的时间表。

**提示**  
在继续操作之前，您需要设置一个将在本页示例中使用的 TrainingJob 对象。有关设置 TrainingJob 对象的更多信息，请参阅[访问分析数据](debugger-analyze-data-profiling.md)。

`MergedTimeline` 类提供了工具，用于在单个时间轴中集成和关联不同的分析信息。Debugger 从训练作业的不同阶段捕获分析数据和注释之后，跟踪事件的 JSON 文件默认保存在 `tracefolder` 目录中。
+ 对于 Python 层中的注释，跟踪文件保存在 `*pythontimeline.json`。
+ 对于 TensorFlow C\$1\$1 层中的注释，跟踪文件保存在中`*model_timeline.json`。
+ TensorFlow 探查器将事件保存在 `*trace.json.gz` 文件中。

**提示**  
如果要列出所有 JSON 跟踪文件，请使用以下 AWS CLI 命令：  

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

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

![\[合并时间轴的示例\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/debugger/debugger-merged-timeline.gif)


**提示**  
要使用键盘在跟踪应用程序上与合并的时间轴进行交互，请使用 `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 AI 估算器类方法或对象来定位。 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 文件。您可以浏览输出来绘制合并的时间轴。