使用整体跟踪分析进行跟踪差异¶
作者: 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)
有关此功能的详细示例,请参阅存储库示例文件夹中的 trace_diff_demo 笔记本。