自动跟踪收集和分析

原文链接:Automated trace collection and analysis | PyTorch

在这篇博客中,我们分享了如何在没有任何用户端代码检测的情况下启用 PyTorch Profiler 跟踪的收集和分析,以用于训练工作负载。我们利用 Dynolog(一个用于 CPU 和 GPU 遥测的开源守护进程)来收集 PyTorch Profiler 跟踪,并使用 Holistic Trace Analysis(一个用于分析 PyTorch Profiler 跟踪的开源库)分析收集到的跟踪。该工具链使 Meta 的工程师能够加速他们的性能优化工作流程。我们解决方案的关键是在 PyTorch 中为基本 Optimizer 类实现前置和后置挂钩。我们在一个简短的视频中演示了使用 Dynolog 的 PyTorch 跟踪收集。

问题

Meta 的软件开发人员每天都会运行大量分布式训练。为了确保 GPU 得到有效利用,有必要测量和分析所有参与工作的 GPU 性能。此外,开发人员需要具备自省模型的能力,并了解 CPU 和 GPU 如何交互以调试性能问题。开发人员使用少量 GPU 构建初始原型,生产版本可扩展到数百或数千个 GPU,服务于生成式 AI、推荐系统、广告排名等众多业务用例。

鉴于 Meta 的规模,有必要拥有用于性能测量和监控的工具链,这些工具链开销低且可以无缝协作,以保持较高的开发人员效率。

在本博客中,我们描述了如何使用 PyTorch Profiler、Dynolog(遥测守护程序)和 Holistic Trace Analysis(性能调试库)在没有任何用户端代码检测的情况下收集跟踪,并对其进行分析以识别 GPU 利用率较低的作业。

解决方案

下图概述了工具链如何协同工作。

1、用户启动 PyTorch 应用程序。

2、训练服务或用户使用Dynolog CLI触发分析会话,CLI通过网络向Dynolog daemon发送请求。

3、Dynolog daemon将分析配置中继到 PyTorch 应用程序,将其临时设置为分析模式。

4、PyTorch Profiler收集跟踪并将其存储到数据库(例如,网络文件系统或 S3 存储桶)。

5、然后使用整体跟踪分析 (HTA) 分析收集到的跟踪。

深入了解每个组件

Dynolog

Dynolog 是用于异构 CPU-GPU 系统的轻量级监控守护进程。它支持持续监控 CPU(利用率、网络带宽、每秒指令数)和 GPU(SM 占用率、DRAM 带宽、GPU 功耗)的性能指标。此外,dynolog 还导出 API 以收集可通过 dyno CLI 访问的深度分析数据。

Dynolog 提供的主要集成之一是与 PyTorch Profiler 交互。这样就可以使用单个命令进行按需远程跟踪,以跟踪数千台服务器。这可以通过使用 dyno gputrace 命令来实现。

PyTorch Profiler

GPU 内核异步执行,需要 GPU 端支持才能创建跟踪。NVIDIA 通过 CUPTI 库提供这种可见性。Kineto 是 Profiler 中与 CUPTI 交互的子系统。PyTorch Profiler 利用 Kineto 库来收集 GPU 跟踪。为了能够在无需任何用户端代码检测的情况下大规模自动分析训练工作负载,我们对 PyTorch 进行了一些根本性更改。这些更改允许在无需任何用户干预的情况下收集跟踪。

  • 注册:首先,我们修改了 PyTorch,使其在启动时向 Dynolog 守护程序注册。通过设置环境变量 KINETO_USE_DAEMON=True 来启用此功能。将此环境变量设置为 True 后,PyTorch Profiler 会定期轮询 Dynolog 以检查按需跟踪请求。
  • 迭代钩子:然后,我们为基础优化器类实现了前置和后置钩子。这使我们能够注释训练迭代的开始/结束。然后,分析器会知道迭代次数,并且可以安全地在跟踪中捕获固定数量的迭代。

Holistic Trace Analysis (HTA)

机器学习研究人员和工程师经常难以通过计算扩展他们的模型,因为他们不知道工作负载中的性能瓶颈。大型分布式训练作业可能会生成数千条跟踪,其中包含的数据太多,人类无法检查。这就是整体跟踪分析的作用所在。HTA 是一个用于性能分析的开源库 - 它将 PyTorch Profiler 跟踪作为输入,并提升其中包含的性​​能信息。其目标是帮助研究人员和工程师从硬件堆栈中获得最佳性能。为了帮助性能调试,HTA 提供了以下功能(部分列表):

  1. 时间细分:按单个节点和所有等级上计算、通信、内存事件和空闲时间所花费的时间细分GPU时间。

  2. 空闲时间细分:将GPU空闲时间细分为等待主机、等待另一个内核或归因于未知原因。

  3. 内核细分:查找每个等级上持续时间最长的内核。

  4. 内核持续时间分布:不同等级上最长内核所用平均时间的分布。

  5. 通信计算重叠:计算通信与计算重叠的时间百分比。

你可以查看这些  Jupyter notebooks,看看 HTA 能为你做些什么。如果你是第一次使用,我们建议你从 trace_analysis_demo 笔记本开始。

总而言之,Dynolog 允许我们以可扩展的方式即时收集 PyTorch Profiler 跟踪。此外,通过利用 HTA,我们可以自动化性能分析并识别瓶颈。在 Meta,我们使用 Dynolog、PyTorch Profiler 和 HTA 工具链来加速我们的性能优化工作流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值