评价此页

使用整体跟踪分析跟踪差异#

创建日期:2024年01月02日 | 最后更新:2024年01月05日 | 最后验证:未验证

作者: Anupam Bhatnagar

有时,用户需要识别代码更改导致 PyTorch 算子和 CUDA 内核的变化。为了满足这一需求,HTA 提供了一个跟踪比较功能。该功能允许用户输入两组跟踪文件,其中第一组可以看作是对照组,第二组可以看作是测试组,类似于 A/B 测试。 TraceDiff 类提供了比较跟踪差异的函数以及可视化这些差异的功能。特别是,用户可以找到在每个组中添加和删除的算子和内核,以及每个算子/内核的频率和算子/内核所花费的累积时间。

TraceDiff 类具有以下方法

  • compare_traces:比较两组跟踪中 CPU 算子和 GPU 内核的频率和总持续时间。

  • ops_diff:获取已

    1. 添加到测试跟踪且在对照跟踪中不存在的算子和内核

    2. 测试跟踪中删除且存在于对照跟踪中的算子和内核

    3. 测试跟踪中频率增加且存在于对照跟踪中的算子和内核

    4. 测试跟踪中频率减少且存在于对照跟踪中的算子和内核

    5. 两个跟踪集之间未更改的算子和内核

  • visualize_counts_diff

  • visualize_duration_diff

最后两个方法可用于可视化 CPU 算子和 GPU 内核在频率和持续时间方面的各种变化,使用 compare_traces 方法的输出。

例如,频率增加的前十个算子可以这样计算:

df = compare_traces_output.sort_values(by="diff_counts", ascending=False).head(10)
TraceDiff.visualize_counts_diff(df)
../_images/counts_diff.png

同样,持续时间变化最大的前十个算子可以这样计算:

df = compare_traces_output.sort_values(by="diff_duration", ascending=False)
# The duration differerence can be overshadowed by the "ProfilerStep",
# so we can filter it out to show the trend of other operators.
df = df.loc[~df.index.str.startswith("ProfilerStep")].head(10)
TraceDiff.visualize_duration_diff(df)
../_images/duration_diff.png

有关此功能的详细示例,请参阅仓库中 examples 文件夹中的 trace_diff_demo notebook