全面跟踪分析
全面跟踪分析(HTA)是一个性能分析工具,用于识别分布式训练工作负载中的性能瓶颈。HTA通过分析使用PyTorch Profiler(又称Kineto)收集的跟踪数据来实现这一目标。
特性
HTA提供以下特性:
- 时间分解 - 按计算、通信、内存事件和空闲时间在所有设备上分解GPU所用的时间。
- 内核分解 - 找出每个设备上持续时间最长的内核。
- 内核持续时间分布 - 不同设备上最长内核平均时间的分布。
- 空闲时间分解 - 将GPU空闲时间分解为等待主机、等待另一个内核或归因于未知原因。
- 通信计算重叠 - 计算通信与计算重叠的时间百分比。
- 频繁CUDA内核模式 - 找出任何给定PyTorch或用户定义操作最频繁启动的CUDA内核。
- CUDA内核启动统计 - 持续时间很短、很长和启动时间过长的GPU内核分布。
- 增强计数器(队列长度、内存带宽) - 增强的跟踪文件,提供每个CUDA流的内存带宽利用率和未完成操作数量的洞察。
- 跟踪比较 - 用于识别和可视化跟踪之间差异的跟踪比较工具。
- CUPTI计数器分析 - 获取GPU性能计数器的实验性API。通过将内核的性能测量归因于PyTorch操作,可以执行屋顶线分析并优化内核。
安装
HTA在Linux和Mac上运行,需要Python >= 3.8。
设置Conda环境(可选)
请参阅此处安装Miniconda。
创建环境env_name
conda create -n env_name
激活环境
conda activate env_name
停用环境
conda deactivate
使用PyPI安装(稳定版)
pip install HolisticTraceAnalysis
从源代码安装
git clone https://github.com/facebookresearch/HolisticTraceAnalysis.git
cd HolisticTraceAnalysis
git submodule update --init
pip install -r requirements.txt
pip install -e .
文档
从我们的文档中了解更多关于特性和API的信息。
使用方法
数据准备
一个作业收集的所有跟踪必须位于一个唯一的文件夹中。
在Jupyter notebook中进行分析
激活Conda环境并启动Jupyter notebook。
conda activate env_name
jupyter notebook
导入HTA,并创建一个TraceAnalysis
对象
from hta.trace_analysis import TraceAnalysis
analyzer = TraceAnalysis(trace_dir = "/path/to/folder/containing/the/traces")
基本用法
# 时间分解
temporal_breakdown_df = analyzer.get_temporal_breakdown()
# 内核分解
kernel_breakdown_df = analyzer.get_gpu_kernel_breakdown()
# 空闲时间分解
idle_time_df = analyzer.get_idle_time_breakdown()
# 通信计算重叠
comm_comp_overlap_df = analyzer.get_comm_comp_overlap()
# 频繁CUDA内核模式
frequent_patterns_df = analyzer.get_frequent_cuda_kernel_patterns(operator_name="aten::linear", output_dir="/new/trace/path")
# CUDA内核启动统计
cuda_launch_kernel_stats = analyzer.get_cuda_kernel_launch_stats()
# 内存带宽时间序列
memory_bw_series = analyzer.get_memory_bw_time_series()
# 内存带宽摘要
memory_bw_summary = analyzer.get_memory_bw_summary()
# 队列长度时间序列
ql_series = analyzer.get_queue_length_time_series()
# 队列长度摘要
ql_summary = analyzer.get_queue_length_summary()
有关详细演示,请运行examples文件夹中的trace_analysis_demo
和trace_diff_demo
笔记本。
高级用法
日志级别
日志级别通过HTA中的配置文件设置。默认日志级别在hta/configs/logging.config
中设置,可以在文件的[logger_hta]
部分进行更改。
如果需要,可以通过修改hta/configs/trace_analyzer.json
来配置使用不同的日志文件。
仓库结构
├── examples # 包含演示笔记本的文件夹
│ ├── ...
├── hta
│ ├── analyzers # 每个分析的核心逻辑
│ │ ├── ...
│ ├── common # 多个分析共用的代码
│ │ ├── ...
│ ├── configs # 配置文件
│ │ ├── ...
│ ├── trace_analysis.py # TraceAnalysis API的入口点
│ ├── trace_diff.py # TraceDiff API的入口点
│ └── utils # 实用程序文件
│ └── ...
├── scripts # 跟踪的通用工具
│ └── ...
│── tests # 单元测试
│ └── ...
贡献
我们欢迎新的贡献。如果您计划贡献新功能或扩展,请首先开一个issue并与我们讨论该功能。要了解更多关于如何贡献的信息,请参阅我们的贡献指南。
如果您遇到bug,请通过提交issue告诉我们。
团队
HTA目前由以下人员维护:Anupam Bhatnagar、Brian Coutinho、 Xizhou Feng、Yifan Liu、Sung-Han Lin和 Louis Feng。过去的贡献者包括Michael Acar和Yuzhen Huang。
许可证
全面跟踪分析采用MIT许可证。