使用全局追踪分析进行追踪差异分析#
创建日期:2024年1月2日 | 最后更新:2024年1月5日 | 最后验证:未验证
作者: Anupam Bhatnagar
用户有时需要确定代码更改导致的 PyTorch 算子和 CUDA 内核的变化。为了支持这一需求,HTA 提供了追踪对比功能。该功能允许用户输入两组追踪文件,其中第一组可以被视为对照组,第二组视为测试组,类似于 A/B 测试。 TraceDiff 类提供了用于比较追踪差异的函数以及可视化这些差异的功能。特别是,用户可以查找每组中新增和移除的算子与内核,以及每个算子/内核的执行频率和累计耗时。
TraceDiff 类具有以下方法:
compare_traces:比较两组追踪文件中 CPU 算子和 GPU 内核的频率及总持续时间。
ops_diff:获取在两组追踪中具有以下状态的算子和内核:
新增(added):存在于测试追踪中但不存在于对照追踪中
删除(deleted):从测试追踪中删除但存在于对照追踪中
增加(increased):在测试追踪中频率增加且两组追踪中均存在
减少(decreased):在测试追踪中频率减少且两组追踪中均存在
未变(unchanged):两组追踪之间没有变化
后两种方法可以使用 compare_traces 方法的输出,对 CPU 算子和 GPU 内核的频率及持续时间的各种变化进行可视化。
例如,计算频率增加最多的前十个算子可以按如下方式进行:
df = compare_traces_output.sort_values(by="diff_counts", ascending=False).head(10)
TraceDiff.visualize_counts_diff(df)
同样,计算持续时间变化最大的前十个算子可以按如下方式进行:
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)
有关此功能的详细示例,请参阅存储库示例文件夹中的 trace_diff_demo 笔记本。