Shortcuts

使用整体追踪分析进行追踪差异

创建于:2024年1月2日 | 最后更新:2024年1月5日 | 最后验证:未验证

作者: Anupam Bhatnagar

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

TraceDiff 类有以下方法:

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

  • ops_diff: 获取已被使用的操作符和内核:

    1. 添加到测试跟踪中,但在控制跟踪中不存在

    2. 已删除 从测试跟踪中,并存在于控制跟踪中

    3. 增加了测试轨迹中的频率,并存在于控制轨迹中

    4. 减少在测试轨迹中的频率并存在于控制轨迹中

    5. unchanged 两组轨迹之间没有变化

  • 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

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