Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

坏了,我的RTX 3090 GPU在对我唱歌!

这你敢信?!

在一个昏暗的机箱里,一台 RTX 3090 GPU「唱」着经典英语儿歌《一闪一闪亮晶晶》(Twinkle,Twinkle,Little Star)的旋律。
这不是灵异事件,也不是科幻电影,而是一位 AI 科学家在「整活」。

这位科学家名叫 Vrushank Desai。据他介绍,机箱中的旋律是由 GPU 的电感线圈发出来的。GPU 如何发出这种声音,别急,Desai 在 X 上给出了解释。
图片
事情的起因是这样的,今年年初,Desai 花了几个月的时间学习 GPU 编程,并尝试优化《Diffusion Policy》论文中的推理。在此过程中,Desai 将去噪 U-Net 的推理时间提高到 Pytorch eager 模式的约 3.4 倍、Pytorch compile 模式的 2.65 倍。

不过这次尝试让 Desai 印象最深的事情,当属这个意外发现,即 RTX 3090 GPU「唱」起了《一闪一闪亮晶晶》。

虽然这个发现和扩散推理毫无关系,但在 Desai 看来,却是最有趣的事情。Desai 在 X 上激动的表示:「我能够让 RTX 3090 电感线圈使用内核(GPU 编程)在正确的频率下调节功耗来播放《一闪一闪亮晶晶》。

每次内核启动都会触发 GPU 的 DC-DC 降压电感中的涌流。由电流变化引起的洛伦兹力使线圈轻微移动,如果进一步控制内核发射频率,使线圈震荡,就能把噪音控制在可听到的范围内。」

不幸的是,Desai 不能让设备发出低于 2000Hz 的声音,因此《一闪一闪亮晶晶》音符都向上移动了好几个八度。

进一步的,Desai 在博客中详细描述了自己发现 RTX 3090 发出声音的过程,我们接着往下看。

Desai 表示,在 GPU 中,电压调节模块(VRM)负责将输入功率的 12V 电压降至约 1V,以驱动 GPU 核上的晶体管,要求是 VRM 输出的电压必须非常纯净。

VRM 利用复杂的电力电子技术可以提供这种纯净的输出,其中一部分转换过程涉及电感器,这些电感器本质上充当低通滤波器。当 GPU 核的负载发生显著波动时,这些电感器会产生快速振荡的磁场(与电流变化率 dI/dT 成正比),进而诱发洛伦兹力,使线圈振动。这种现象就是导致 GPU 线圈噪音的原因。

然而,这一发现,并不能让 GPU 唱歌。接着,Desai 发现了一个有趣的现象,即与运行 CUDA 图形或自定义内核相比,Pytorch Eager 模式会导致更响的 GPU 线圈噪音 ——Desai 表示甚至能听到代码运行的声音!

这个发现让 Desai 感到非常困惑,因为 nvidia-smi 显示加速模式比 Eager 模式多消耗约 40W 的功率,通常来说更高的负载会产生更大的噪音。Desai 推测这可能是因为 Eager 模式在内核启动之间有更长的延迟,导致 GPU 核心负载的变化更大,从而在 GPU 的电感器中产生更强的磁场振荡。

为了测试这一点,Desai 编写了一个内核,该内核可以从全局内存中执行大量加载,这是一项非常耗能的操作,并改变内核启动之间的持续时间,Desai 发现确实可以通过这种方式控制线圈噪音

Desai 开始沉迷于这个发现,即让 GPU 线圈发声的能力,并编写了一个内核程序来演奏特定的音符,因而用 RTX 3090 演奏《一闪一闪亮晶晶》的曲子诞生了。不幸的是,发出的声音无法达到较低的频率,所以所有音符都被提高了好几个八度。

想要让自己的 GPU 唱歌的小伙伴可以参考以下代码:

代码地址:https://github.com/vdesai2014/inference-optimization-blog-post/tree/main/part-9/gpu-piano

看到这,很多网友纷纷叫好:
图片
扩散策略推理优化

让 RTX 3090 演奏《一闪一闪亮晶晶》只是 Desai 在研究过程中的一次意外发现。博客中,Desai 用了大量篇幅介绍了自己年初以来几个月的学习经历,通过尝试优化扩散策略的推理过程来学习 GPU 编程。
图片
博客地址:https://www.vrushankdes.ai/diffusion-inference-optimization

Desai 介绍了如何优化扩散策略,Desai 表示 GPU 具有内存层次结构,其范围从大容量、低带宽、高延迟(全局内存)到低容量、高带宽、低延迟。芯片中执行实际计算的部分(FP32 / INT8 单元、张量核等)比比特从内存存储移动到计算电路的速度快得多。

这导致 GPU 工作负载变得受内存限制 —— 与计算相关的比特从内存移动到计算所需的时间比实际执行计算所需的时间更长。

Desai 认为近年来计算每秒可以执行的浮点运算次数与内存存储可以提供的浮点数之间的差距越来越大。对于 Desai 研究的扩散策略推理优化工作来说,几乎所有的速度提升都来自优化内存访问模式以实现更好的内存利用率。

下图表明,与内存存储(绿色)相比,FP32 计算单元 / 张量核(红色)的速度快得多。

图片

全局内存访问如此慢是有物理原因的。全局内存将位(bits)存储在 DRAM 单元中,而该单元由一个电容器和一个晶体管(控制电容访问)组成。每次访问都需要对行缓冲区预充电以达到中性线电压,将需要访问的行连接到行缓冲区,选择要读取的正确的列,并将数据传输到总线。

所有这些步骤需要花费大量时间来执行。因此,最有效的 GPU 性能优化手段之一是从全局内存加载数据时访问连续存储器地址。

DRAM 的物理结构是其发挥作用的原因。由于每次访问一行需要将该行所有的位拉入到行缓冲区,因此同时访问彼此相邻的多个位是高效的做法。

DRAM 的优点是,虽然速度相对较慢,但成本低并且易于密集封装,毕竟只需要一个电容器和一个晶体管。

如下为一个 DRAM 单元的 SEM(扫描电子显微镜)图像。在存储器中存储一个 FP16 GPT-4 实例需要大约 30 万亿个这样的单元。Desai 感叹,从事硅硬件设计和制造的人是真正的魔法师。
图片
相反,GPU 线程寄存器、L1/L2 内存使用 SRAM 进行存储。SRAM 单元由 6 - 晶体管触发器电路组成,并且由于这里涉及到的唯一电容是晶体管栅极,因此访问数据的速度变快了很多。

但是,SRAM 也有缺点,它的芯片面积和制造复杂性导致了更高的成本。下面的 SEM 图像为一个 FinFET SRAM 单元。
图片
实际上,当有人听到「CUDA 内核」这个词时,并没有任何硬件可以映射成这个人可能想到的东西。CPU 领域的内核要比 FP32 ALU 更加强大,大致对应了英伟达 GPU 的「CUDA 内核」。

因此,为了好玩,我们可以试着猜测有多少个晶体管被分配给了一个 RTX 3090 CUDA 内核,它与 AMD Ryzen 7950X CPU 的比较结果见下表。
图片
为了记录自己的学习过程,Desai 撰写的博客文章得到了 AI 大牛 Andrej Karpathy 的好评。
图片
Karpathy 表示,这篇文章读起来很棒,依据他个人经验,在 AI 研究中,你不仅在与物理规律作斗争,同时也在与 nvidia 编译器和堆栈作斗争,即使在使用了很多技巧之后,我们仍然无法在许多内核上实现超过约 80-90% 的内存带宽,而你原本可能会天真地认为这些内核应该接近 100%,而且这个问题的复杂性非常深。

看似一项平常的研究,Desai 却收到了意外惊喜,看来一些有趣而伟大的创造,似乎都在不经意间诞生。
工程Vrushank DesaiRTX 3090
相关数据
张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

噪音技术

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

AMD机构

超威半导体(中国)有限公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器(CPU、GPU、主板芯片组、电视卡芯片等),以及提供闪存和低功率处理器解决方案,公司成立于1969年。AMD致力为技术用户——从企业、政府机构到个人消费者——提供基于标准的、以客户为中心的解决方案。

https://www.amd.com/zh-hans
暂无评论
暂无评论~