PyTorch 入门指南
学习 PyTorch
图像和视频
音频
后端
强化学习
在生产环境中部署 PyTorch 模型
Profiling PyTorch
代码变换与FX
前端API
扩展 PyTorch
模型优化
并行和分布式训练
边缘端的 ExecuTorch
推荐系统
多模态

使用全链路追踪分析进行差异追踪

作者: Anupam Bhatnagar

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

TraceDiff 类包含以下方法:

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

  • ops_diff: 获取已被更改的操作符和内核:

  1. 新增到测试跟踪中,但在控制跟踪中不存在

  2. 删除自测试跟踪中,但在控制跟踪中存在

  3. 在测试跟踪中频率增加,且在控制跟踪中存在

  4. 在测试跟踪中频率减少,且在控制跟踪中存在

  5. 两组跟踪之间未发生变化

最后两种方法可用于可视化 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

本页目录