推荐开源项目:Holistic Trace Analysis(HTA)——分布式训练性能瓶颈分析利器
推荐开源项目:Holistic Trace Analysis(HTA)——分布式训练性能瓶颈分析利器HolisticTraceAnalysisA library to analyze PyTorch traces.项目地址:...
推荐开源项目:Holistic Trace Analysis(HTA)——分布式训练性能瓶颈分析利器
项目介绍
Holistic Trace Analysis(HTA)是由Facebook Research开发的一款性能分析工具,专门用于识别分布式训练工作负载中的性能瓶颈。通过分析由PyTorch Profiler(又名Kineto)收集的追踪数据,HTA能够提供详尽的性能分析报告,帮助开发者优化分布式训练的效率和效果。
项目技术分析
HTA基于Python开发,支持Linux和Mac操作系统,要求Python版本不低于3.8。项目使用了多种先进的技术和工具,包括:
- PyTorch Profiler(Kineto):用于收集详细的GPU性能追踪数据。
- Conda环境管理:推荐使用Conda创建独立的环境,确保依赖管理的简洁和一致性。
- Jupyter Notebook集成:支持在Jupyter Notebook中进行交互式分析,方便用户进行数据探索和可视化。
此外,HTA还提供了丰富的API接口,用户可以通过编程方式访问和分析追踪数据,满足不同层次的需求。
项目及技术应用场景
HTA适用于以下应用场景:
- 分布式训练优化:帮助开发者识别和解决分布式训练中的性能瓶颈,提升训练速度和资源利用率。
- GPU性能分析:详细分析GPU在各种操作(如计算、通信、内存事件等)中的时间分配,优化GPU使用效率。
- CUDA内核优化:通过分析CUDA内核的运行时间和频率,帮助开发者优化内核实现,提升计算性能。
- 内存带宽分析:提供内存带宽的时序数据和汇总信息,帮助开发者评估和优化内存使用。
- 追踪数据对比:支持不同追踪数据的对比分析,快速识别性能变化的原因。
项目特点
HTA具有以下显著特点:
- 时间分解(Temporal Breakdown):详细分解GPU在各种操作中的时间消耗,包括计算、通信、内存事件和空闲时间。
- 内核分解(Kernel Breakdown):找出每个秩上运行时间最长的内核。
- 内核持续时间分布(Kernel Duration Distribution):展示不同秩上最长内核的平均时间分布。
- 空闲时间分解(Idle Time Breakdown):分解GPU空闲时间的原因,如等待主机、等待其他内核或未知原因。
- 通信计算重叠(Communication Computation Overlap):计算通信与计算重叠的时间百分比。
- 频繁CUDA内核模式(Frequent CUDA Kernel Patterns):找出由PyTorch或用户定义操作符频繁启动的CUDA内核。
- CUDA内核启动统计(CUDA Kernel Launch Statistics):提供GPU内核的启动时间分布,包括极短、极长和过度启动时间。
- 增强计数器(Augmented Counters):提供内存带宽利用率和每个CUDA流中未完成操作数量的增强追踪文件。
- 追踪对比(Trace Comparison):工具用于识别和可视化不同追踪数据之间的差异。
- CUPTI计数器分析(CUPTI Counter Analysis):实验性API,获取GPU性能计数器,支持roofline分析和内核优化。
安装与使用
安装
-
使用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 .
使用示例
在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()
更多详细示例和高级用法请参考官方文档和示例笔记本。
结语
Holistic Trace Analysis(HTA)是一款功能强大、易于使用的性能分析工具,特别适用于分布式训练的性能优化。通过其丰富的分析功能和灵活的API接口,HTA能够帮助开发者深入理解GPU性能瓶颈,提升训练效率和效果。立即尝试HTA,让您的分布式训练如虎添翼!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)