BrendanGregg:AI火焰图

原创 Linux阅码场 2024-11-02 12:31

译者按:本文译自Brendan的博客。

想象一下,将 AI 的资源成本减半,这对地球和行业意味着什么 - 根据极端估计,到 2030 年,这种节省可以将美国的总用电量减少 10%以上 1。在英特尔,我们一直在创建一种新的分析工具,以帮助降低 AI 成本,称为 AI 火焰图:一种基于我的 CPU 火焰图显示 AI 加速器或 GPU 硬件配置文件以及完整软件堆栈的可视化工具。我们的第一个版本作为英特尔 Data Center GPU Max 系列(以前称为 Ponte Vecchio)的预览版提供给英特尔 Tiber AI Cloud 中的客户。下面是一个示例:



简单示例:SYCL 矩阵乘法微基准测试

(点击进入交互式 SVG。绿色帧是在 AI 或 GPU 加速器上运行的实际指令,浅绿色显示这些函数的源代码,红色 (C)、黄色 (C++) 和橙色(内核)表示启动这些 AI/GPU 程序的 CPU 代码路径。灰色的 “-” 框只是帮助突出 CPU 和 AI/GPU 代码之间的边界。x 轴与成本成正比,因此您需要寻找最广泛的事物并找到减少它们的方法。

分层

此火焰图显示了一个用于 SYCL(一种用于加速器的高级 C++ 语言)的简单程序,该程序测试矩阵乘法的三种实现,并使用相同的输入工作负载运行它们。火焰图由最慢的实现 multiply_basic() 主导,它不使用任何优化,消耗 72% 的 stall 样本,显示为最宽的塔。右侧是两个薄塔,分别用于 21% 的 multiply_local_access() 和用于 6% 的 multiply_local_access_and_tiling() (),它还添加了矩阵平铺。随着优化的添加,塔变得越来越小。

此火焰图分析器是基于 Intel EU stall profiling 的原型,用于硬件分析和 eBPF 用于软件插桩。它的设计简单且开销低,就像 CPU 性能分析器一样。您应该能够随时生成现有 AI 工作负载的火焰图,而无需重新启动任何内容或通过中介层启动其他代码。

指令偏移分析

这不是第一个构建 AI 分析器甚至 AI 火焰图 的项目,但是,我见过的其他项目专注于跟踪 CPU 堆栈和时序加速器执行,但不分析加速器上运行的指令偏移量;或者通过昂贵的二进制插桩来分析它们。我想构建像 CPU 火焰图一样工作的 AI 火焰图:易于使用、成本可忽略不计、生产安全,并显示所有内容。开发人员的日常工具,大部分可视化都使用开发人员的语言:源代码函数。

这是英特尔过去一年的一个内部人工智能项目。英特尔已经在这一领域进行投资,为 Intel Data Center GPU Max 系列构建了 EU 停顿分析器功能,可提供硬件指令采样的近似值。我很幸运地邀请到了 Matthew (Ben) Olson 博士,他是一名英特尔人工智能工程师,也曾从事过 eBPF 性能工具 (processwatch) 和内存管理研究,他加入了我的团队,并完成了大部分开发工作。他的背景帮助我们克服了看似无法克服的困难。Brandon Kammerdiener 博士(巧合的是,他也是田纳西大学的另一位毕业生,与 Ben 一样)也加入了我们的行列,他也拥有 eBPF 和内存内部经验,一直在帮助我们承担越来越难的工作量。Gabriel Muñoz 今天刚刚加入,帮助发布。现在,我们的小团队已经证明这是可能的,我们将与英特尔的其他团队一起进一步发展。

几个月前,我们本可以使用英特尔 GTPin 构建一个更难使用且开销更高的版本,但要得到广泛采用,它需要最少的开销和易用性,以便开发人员可以毫不犹豫地每天使用它并将其添加到部署管道中。

什么是火焰图?

火焰图是我在 2011 年发明的一种可视化效果,用于显示采样的代码堆栈跟踪。它已成为 CPU 分析和分析的标准,可帮助开发人员快速找到性能改进并消除回归。CPU 火焰图显示了运行软件的“大图”,其中 x 轴与 CPU 成本成正比。右侧的示例图片总结了从计算成本到负责任的代码路径是多么容易。在火焰图之前,通过阅读数百页输出,可能需要数小时才能理解复杂的配置文件。现在只需几秒钟:您所要做的就是寻找最宽的矩形。

火焰图已在全球范围内得到采用。到目前为止,它们已成为 5 家初创公司的基础,已被 30 多种性能分析产品采用,并有 80 多次实施。

我第一次实现火焰图是在周三晚上下班后的几个小时。真正的努力是在那之后的十年中,我使用不同的分析器、运行时、库、内核、编译器和虚拟机管理程序来使火焰图在不同环境中正常工作,包括修复堆栈遍历和符号化。今年早些时候,我发布了关于最后一个缺失部分的文章:帮助发行版启用帧指针,以便跨标准系统库进行分析。

对于 AI 工作负载,类似的工作是必要的:修复堆栈和符号,并让分析适用于不同的硬件、内核驱动程序、用户模式驱动程序、框架、运行时、语言和模型。工作量也大得多,因为 AI 分析的成熟度低于 CPU 分析。

搜索样本

如果您不熟悉火焰图,那么值得一提的是内置的搜索功能。在前面的示例中,大多数 stall 样本是由 sbid:software scoreboard 依赖项引起的。由于这可能是一个唯一的搜索词,您可以在 “sbid” 上运行搜索(Ctrl-F,或单击“搜索”),它将以洋红色突出显示它:



搜索还显示右下角包含 sbid 的堆栈样本总数:78.4%。您可以在火焰图中搜索任何术语:加速器指令、源路径、函数名称等,以快速计算存在该术语的堆栈百分比(不包括垂直重叠),从而帮助您确定性能工作的优先级。

请注意,样本是基于 EU stall 的,这意味着理论性能获胜可以将百分比降至零。这与 CPU 分析中通常使用的基于计时器的样本不同。停顿意味着您最好专注于痛苦,即代码中没有取得进展的部分,但您不会看到未停滞的指令对资源的使用情况。我也希望将来支持基于计时器的样本,这样我们就可以同时拥有这两种视图。

谁将使用它?

在最近的一次 golang 会议上,我要求 200+ 的观众举手,如果他们使用的是 CPU 火焰图。几乎每个人都举起了手。我知道有些公司将火焰图作为开发人员用来理解和调整其代码的日常工具,从而降低计算成本。这将成为 AI 开发人员的日常工具。

我的雇主也会将其用于评估分析,寻找需要调整的领域以击败竞争对手,以及更好地了解工作负载性能以帮助设计。

为什么 AI 分析很难?

考虑 CPU 指令分析:当程序和符号表都位于文件系统中并且采用标准化文件格式(如 ELF)时,这很容易,就像本机编译代码 (C) 一样。对于符合 JIT 的代码(如 Java),CPU 分析变得很困难,因为指令和符号是动态生成的,并放置在主内存(进程堆)中,而没有遵循通用标准。对于此类 JITted 代码,我们使用特定于运行时的方法和代理来检索堆信息的快照,每个运行时的快照都不同。

AI 工作负载也具有不同的运行时(以及框架、语言、用户模式驱动程序、编译器等),其中任何运行时都可能需要特殊的修改才能使其 CPU 堆栈和符号正常工作。这些 CPU 堆栈在 AI 火焰图中显示为红色、橙色和黄色帧。一些 AI 工作负载很容易让这些帧正常工作,而一些 (如 PyTorch) 则需要更多的工作。

但真正的挑战是对实际的 GPU 和 AI 加速器程序(显示为浅绿色帧)进行指令分析,并将它们与下面的 CPU 堆栈正确关联。这些 GPU 和 AI 程序不仅可能不存在于文件系统中,甚至可能不存在于主内存中!甚至对于正在运行的程序也是如此。一旦执行开始,它们就可以从主内存中释放出来,并且只存在于特殊的加速器内存中,超出了 OS 分析器和调试器的直接范围。或者触手可及,但只能通过高开销的特定于硬件的调试器接口。

这些程序也没有 /proc 表示形式(我一直在建议构建一个等效的程序),因此甚至无法直接判断哪些程序正在运行,哪些程序未运行,以及所有其他 /proc 详细信息。忘记指令分析,即使 ps(1) 和所有其他处理工具都不起作用。

这是一次令人费解的经历,揭示了什么被认为是理所当然的,因为它在 CPU 领域已经存在了几十年:进程表。工艺工具。标准文件格式。文件系统中存在的程序。从主内存运行的程序。调试。Profiliers.核心转储。拆卸。单步。静态和动态检测。等。对于 GPU 和 AI 来说,这一切都远没有那么成熟。它有时会使工作变得令人兴奋,当你认为某件事是不可能的,然后找到或想办法时。

幸运的是,我们有一个良好的开端,因为有些事情确实存在。根据运行时和内核驱动程序,有一些调试接口,您可以在其中列出正在运行的加速器程序和其他统计数据,如 intel_gpu_top(1) 等工具使用的那样。您可以使用 intel_gpu_abrt(1) 终止 -9 个 GPU 工作负载。一些接口甚至可以为正在运行的加速器程序生成基本的 ELF 文件,您可以尝试在像 gdb(1) 这样的调试器中加载这些文件。并且支持对 GPU/AI 程序反汇编,如果您可以掌握二进制文件。在我看来,操作系统风格的 GPU/AI 调试大约有两年的历史了。总比零好,但还处于早期阶段,还有很多事情要做。至少十年。

AI 开发人员对此有何看法?

我们已经向英特尔的其他 AI 开发人员展示了 AI 火焰图,常见的反应是有点困惑,想知道该怎么处理它。AI 开发人员会考虑他们的代码,但借助 AI 火焰图,他们现在可以第一次看到整个堆栈,包括硬件,以及他们通常不会考虑或不知道的许多层。它基本上看起来像一堆胡言乱语,他们的代码只是火焰图的一小部分。


CPU 火焰图 实现

这种反应类似于人们第一次使用 CPU 火焰图,它显示了开发人员和工程师通常不会处理的系统部分,例如运行时内部、系统库和内核内部。火焰图非常擅长突出显示最重要的十几个函数,因此学习这些函数在几个不同的代码库(通常是开源的)中的作用就成为一个问题。理解十几个这样的函数可能需要几个小时甚至几天 - 但如果这导致 10% 或 2 倍的成本收益,那么时间是值得的。下次用户查看火焰图时,他们开始说“我以前见过那个函数”,以此类推。您可以达到不到一分钟的时间理解 CPU 火焰图的大部分:查找最宽的塔,单击缩放,阅读帧,完成。

CPU 火焰图的成功让我深受鼓舞,它有 80 多个实现和无数的实际案例研究。有时我在 github 上浏览我关心的性能问题,然后点击页面,然后有一个 CPU 火焰图。他们无处不在。

我希望 AI 开发人员也能够在不到一分钟的时间内理解 AI 火焰图,但首先,人们将花费一天或更长时间来浏览他们不知道涉及的代码库。发布 Found Wins 的案例研究也将帮助人们学习如何解释它们,也有助于解释其价值。

PyTorch 怎么样?

我们遇到的另一个常见反应是 AI 开发人员正在使用 PyTorch,最初我们不支持它,因为它意味着遍历 Python 堆栈,这并非易事。但之前的工作已经在那里完成(以支持 CPU 分析),经过大量修补,我们现在有了第一个 PyTorch AI 火焰图:



粉色的 PyTorch 帧

(点击进入交互式 SVG。PyTorch 函数位于底部,颜色为粉红色。此示例运行 oneDNN 内核,这些内核是 JIT 生成的,并且没有源路径,因此该层只读取“jit”。将所有其他层都包括进来真的很痛苦,但这是一个重要的里程碑。我们认为,如果我们能做到 PyTorch,我们就能做任何事情。

在此火焰图中,我们显示了使用 Intel Extensions for PyTorch (IPEX) 运行 Llama 2 7B 模型的 PyTorch。此火焰图显示了 GPU 内核执行的来源,一直追溯到以粉红色显示的 Python 源代码。大多数样本来自导致 aqua 中显示的 gemm_kernel(矩阵乘法)的堆栈,与前面的示例一样,由于软件记分板,该堆栈有许多停顿。

有两个指令(0xa30 和 0xa90),加起来占整个配置文件的 27%。我估计有人会问:我们不能点击说明,让它弹出一个带有完整源代码的反汇编视图吗?是的,这应该是可能的,但我还不能回答我们将如何提供这个服务。另一个我还无法回答的预期问题:既然现在有多个产品使用 CPU 火焰图(包括 Intel Granulate)提供 CPU 工作负载的 AI 自动调整,我们难道不能使用 AI 火焰图对 AI 工作负载进行 AI 自动调整吗?

首次发布:有时困难且开销适中

AI 火焰图 处理某些工作负载很容易,但其他工作负载目前很困难,开销成本适中。它类似于 CPU 分析,其中某些工作负载和语言很容易分析,而其他工作负载和语言则需要修复各种问题。一些 AI 工作负载使用许多软件依赖项,这些依赖项需要各种调整和重新编译(例如,启用帧指针以便堆栈遍历正常工作),这使得设置非常耗时。PyTorch 特别困难,可能需要一周以上的操作系统工作才能为 AI 火焰图做好准备。我们将努力在各自的存储库中更改上游的这些调整,这涉及 Intel 内部和外部的团队,我预计这个过程至少需要一年时间。在此期间,AI 工作负载将逐渐变得更容易可视化为火焰图,并且开销也更低。

我想起了早期的 eBPF:你必须修补并重新编译内核、LLVM 和 Clang,如果你遇到错误,这可能需要几天时间。从那时起,所有 eBPF 依赖项补丁都被合并,默认设置也发生了变化,因此 eBPF“正常工作”。我们也会通过 AI Flame Graphs 实现这一目标,但目前仍处于早期阶段。

AI 火焰图 所需的更改实际上是关于改进一般调试,并且是 Fast by Friday 的要求:这是我们可以在 5 天或更短的时间内分析任何内容的根本原因。

可用性

AI 火焰图 将首先在 Intel Tiber AI Cloud 上作为 Intel Data Center GPU Max 系列的预览功能提供。如果您目前被部署到那里,您可以通过 Intel 服务渠道申请抢先体验。至于它是否或何时会支持其他硬件类型、出现在其他 Intel 产品中、正式发布、开源等,这些都涉及 Intel 的其他各个团队,他们需要先发布自己的公告,然后才能在这里讨论。

结论

为 AI 数据中心寻找仅几分之一的性能改进,就可以在全球范围内节省电、水和钱。如果AI 火焰图像 CPU 火焰图一样成功,我预计超过 10% 的改进将是很常见的,最终会发现 50% 或更高的改进*。但在早期阶段,这并不容易,因为仍有许多软件组件需要调整和重新编译,并且 AI 火焰图中揭示了需要了解的软件层。

在未来的几年里,我想象其他人会构建自己的AI 火焰图,看起来和这个一样,甚至可能有初创公司在卖它们,但如果他们使用更难使用和开销更高的技术,我担心他们可能会让公司完全关闭AI 火焰图的想法,并阻止他们找到急需的胜利。这太重要了,不能做得不好。AI 火焰图应该易于使用,开销可以忽略不计,确保生产安全,并显示所有内容。英特尔已经证明这是可能的。

免責聲明

* 这是一篇个人博客文章,仅作个人预测,但不保证可能的性能改进。请随意对任何索赔持保留态度,并随时等待 Intel 关于这项技术的正式发布和公开发布。

1 根据 Arm 首席执行官 Rene Haas 估计的 20-25%,ArsTechnica 的 Kyle Orland 在《仔细研究 AI 的所谓能源灾难》中引用了这一估计。

谢谢

感谢 Intel 的每一位员工,他们帮助我们实现了这一目标。Markus Flierl 推动了这个项目并将其作为重中之重,Greg Lavender 也表达了他的支持。特别感谢 Michael Cole、Matthew Roper、Luis Strano、Rodrigo Vivi、Joonas Lahtinen、Stanley Gambarin、Timothy Bauer、Brandon Yates、Maria Kraynyuk、Denis Samoylov、Krzysztof Raszknowski、Sanchit Jain、Po-Yu Chen、Felix Degrood、Piotr Rozenfeld、Andi Kleen 以及所有其他帮助我们解决问题的同事,并提前感谢将在未来几个月内帮助我们的其他人。

最后,我要感谢那些实际动手处理火焰图的公司和开发人员,他们收集它们,检查它们,找到性能优势,并应用它们。您正在帮助拯救地球。

Linux阅码场 专业的Linux技术社区和Linux操作系统学习平台,内容涉及Linux内核,Linux内存管理,Linux进程管理,Linux文件系统和IO,Linux性能调优,Linux设备驱动以及Linux虚拟化和云计算等各方各面.
评论
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 102浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 99浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 39浏览
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 68浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 136浏览
  •         在有电流流过的导线周围会感生出磁场,再用霍尔器件检测由电流感生的磁场,即可测出产生这个磁场的电流的量值。由此就可以构成霍尔电流、电压传感器。因为霍尔器件的输出电压与加在它上面的磁感应强度以及流过其中的工作电流的乘积成比例,是一个具有乘法器功能的器件,并且可与各种逻辑电路直接接口,还可以直接驱动各种性质的负载。因为霍尔器件的应用原理简单,信号处理方便,器件本身又具有一系列的du特优点,所以在变频器中也发挥了非常重要的作用。  &nb
    锦正茂科技 2024-12-10 12:57 73浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 54浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 70浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 48浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 54浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 35浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 82浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦