使用整体追踪分析进行追踪差异#
创建日期:2024年1月2日 | 最后更新:2024年1月5日 | 最后验证:未验证
作者: Anupam Bhatnagar
有时,用户需要识别代码更改导致的 PyTorch 算子和 CUDA 内核的变化。为了支持此需求,HTA 提供了追踪比较功能。此功能允许用户输入两组追踪文件,其中第一组可以被认为是对照组,第二组可以被认为是测试组,类似于 A/B 测试。 TraceDiff 类提供了比较追踪差异的功能,以及可视化这些差异的功能。特别是,用户可以找到从每组中添加和删除的算子和内核,以及每个算子/内核的频率和算子/内核的累积执行时间。
TraceDiff 类具有以下方法
compare_traces:比较两组追踪中 CPU 算子和 GPU 内核的频率和总时长。
ops_diff:获取已
添加到测试追踪中,但在对照追踪中不存在的算子和内核
删除自测试追踪中,但在对照追踪中存在的算子和内核
频率增加在测试追踪中,且存在于对照追踪中的算子和内核
频率降低在测试追踪中,且存在于对照追踪中的算子和内核
未改变在两组追踪之间
最后两个方法可用于可视化 CPU 算子和 GPU 内核的频率和持续时间的变化,使用 compare_traces 方法的输出。
例如,频率增加最多的前十个算子可以如下计算
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)
有关此功能的详细示例,请参阅仓库 examples 文件夹中的 trace_diff_demo notebook。