推荐开源项目: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适用于以下应用场景:

  1. 分布式训练优化:帮助开发者识别和解决分布式训练中的性能瓶颈,提升训练速度和资源利用率。
  2. GPU性能分析:详细分析GPU在各种操作(如计算、通信、内存事件等)中的时间分配,优化GPU使用效率。
  3. CUDA内核优化:通过分析CUDA内核的运行时间和频率,帮助开发者优化内核实现,提升计算性能。
  4. 内存带宽分析:提供内存带宽的时序数据和汇总信息,帮助开发者评估和优化内存使用。
  5. 追踪数据对比:支持不同追踪数据的对比分析,快速识别性能变化的原因。

项目特点

HTA具有以下显著特点:

  1. 时间分解(Temporal Breakdown):详细分解GPU在各种操作中的时间消耗,包括计算、通信、内存事件和空闲时间。
  2. 内核分解(Kernel Breakdown):找出每个秩上运行时间最长的内核。
  3. 内核持续时间分布(Kernel Duration Distribution):展示不同秩上最长内核的平均时间分布。
  4. 空闲时间分解(Idle Time Breakdown):分解GPU空闲时间的原因,如等待主机、等待其他内核或未知原因。
  5. 通信计算重叠(Communication Computation Overlap):计算通信与计算重叠的时间百分比。
  6. 频繁CUDA内核模式(Frequent CUDA Kernel Patterns):找出由PyTorch或用户定义操作符频繁启动的CUDA内核。
  7. CUDA内核启动统计(CUDA Kernel Launch Statistics):提供GPU内核的启动时间分布,包括极短、极长和过度启动时间。
  8. 增强计数器(Augmented Counters):提供内存带宽利用率和每个CUDA流中未完成操作数量的增强追踪文件。
  9. 追踪对比(Trace Comparison):工具用于识别和可视化不同追踪数据之间的差异。
  10. CUPTI计数器分析(CUPTI Counter Analysis):实验性API,获取GPU性能计数器,支持roofline分析和内核优化。

安装与使用

安装

  1. 使用PyPI(稳定版)

    pip install HolisticTraceAnalysis
    
  2. 从源码安装

    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,让您的分布式训练如虎添翼!

项目地址:Holistic Trace Analysis on GitHub

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐