微软亚洲研究院推出AI编译器界“工业重金属四部曲”

news2024/12/26 22:05:28

编者按:编译器在传统计算科学中一直是一个重要的研究课题。在人工智能技术快速发展和广泛应用的今天,人工智能模型需要部署在多样化的计算机硬件架构上。同时,训练和部署大型人工智能模型时又对硬件性能有着更高的要求,有时还需根据硬件定制化代码。这些都对人工智能时代的编译器提出了新的更高的要求。

为了适应迅速发展的人工智能模型和加速硬件的需求,微软亚洲研究院以设计和构建具有高度灵活性、高效性、可扩展的 AI 编译器架构为目标,与海内外合作者展开研究并提出了一套包含 Rammer、Roller、Welder、Grinder 四款 AI 编译器的系统性解决方案,将提升硬件并行利用率、提高编译效率、优化全局访存效率、优化控制流的高效执行等几大难题通通搞定。四篇相关论文已先后被2020年、2022年、2023年的 OSDI 大会接收。


编译是程序开发的一个重要步骤——把用高级语言书写的源代码翻译成在计算机硬件可执行的机器码,而编译器就是实现这一功能的特殊应用程序。如今,人工智能技术和大模型无疑是当今计算机领域的 C 位担当,其自身的特性也对编译器提出了新的挑战。

从最初的 RNN、CNN 到 Transformer,人工智能的主流模型架构在不断变化,这意味着上层的应用程序也在随之改变。同时,底层加速器硬件如 GPU、NPU 等,也在快速迭代更新,有些新的硬件设计甚至颠覆了之前的架构。那么,要想让新的人工智能模型更好地运行在新的芯片等计算机硬件上,就需要全新的 AI 编译器。

对此,微软亚洲研究院的研究员们和国内外合作者围绕着 AI 编译器的核心问题展开了一系列研究工作,并陆续推出了 AI 编译界的“工业重金属四部曲”:Rammer、Roller、Welder、Grinder,为当前主流的人工智能模型和硬件编译提供了系统性的创新解决方法。

基于统一切块(tile)抽象的四个核心 AI 编译技术

AI编译“夯土机”Rammer:提升硬件并行利用率

深度神经网络(DNN)是当前图像分类、自然语言处理和许多其他人工智能任务中广泛采用的方法。由于其重要性,许多计算设备,如 CPU、GPU、FPGA 和专门设计的 DNN 加速器被用来执行 DNN 计算。其中影响 DNN 计算效率的关键因素之一是调度,即决定在目标硬件上执行各种计算任务的顺序。现有的 DNN 框架和编译器通常将数据流图(data flow graph)中的 DNN 算子视为不透明的库函数,并将它们调度到加速器上单独执行。同时,这一过程还依赖于另一层调度器(通常在硬件中实现)来利用算子中可用的并行特性。这样的两层方法就导致了显著的调度开销,并且通常不能充分利用可用的硬件资源。

为此,研究员们提出了一种新的 DNN 编译器 Rammer,它可以优化 DNN 工作负载在大规模并行加速器上的执行。事实上,我们可以将进行 AI 编译时的调度空间想象成一个二维空间,并将计算任务看作是可以被拆分成不同大小和形状的“砖块”,调度的目的就是在二维空间的计算单元上将这些“砖块”像垒墙一样紧密排列起来,最大程度地利用计算单元不留空隙,因为一旦出现空隙,不仅已有空间得不到有效利用,而且还会影响“垒墙”的速度。而 Rammer 就是这个二维空间中的一台“夯土机”,在将 DNN 程序翻译成“砖块”后,可放置在芯片的不同计算单元上,将其压实。

Rammer 技术框架

换言之,Rammer 在编译时为 DNN 生成了有效的静态时空调度,最大限度地减少了调度开销。同时,通过为计算任务和硬件加速器提出的几个新的、与硬件无关的抽象,使 Rammer 获得了更丰富的调度空间,实现了算子间和算子内的协同调度,从而可以全面利用并行性。这些新颖且具有启发式的方法,让 Rammer 可以更好地探索空间并找到有效的调度,大幅提高硬件利用率。

研究员们在 NVIDIA GPU、AMD GPU 和 Graphcore IPU 等多个硬件后端对 Rammer 进行了测试。实验表明,Rammer 在 NVIDIA 和 AMD GPU 上的性能显著优于 XLA 和 TVM 等最先进的编译器,加速比高达20.1倍。与 NVIDIA 的专有 DNN 推理库 TensorRT 相比,加速比达3.1倍。

论文:Rammer: Enabling Holistic Deep Learning Compiler Optimizations with rTasks

AI编译“压路机”Roller:提高编译效率

在计算机芯片上不仅有并行计算单元,还有多层内存,一个大的计算任务需要一层一层地向上传递,并在这个过程中将任务逐层切分成更小的“砖块”,最终交给最上层的处理器进行计算。这其中的难点在于如何把大的“砖块”铺满内存空间,进而更好地利用内存并提升效率。目前已有的方法是通过机器学习进行搜索,寻找更好的“砖块”切分策略,但是这通常需要数千个搜索步骤,每个步骤都要在加速器中进行评估,以找到合理的解决方案,所以这会花费大量的时间,如编译一个完整模型甚至需要几天或几周。

研究员们认为,在了解了计算逻辑和各内存层的参数,也就是在已知软件和硬件信息的情况下,其实完全可以估算出“砖块”切割的最佳方法和大小,从而实现更快的编译。这也是 Roller 的设计思路,它相当于一台压路机,在考虑内存特性的前提下,像铺地板一样把高维的张量数据平铺到二维的内存中,找到最优的切块(tile)大小。同时,它还封装了与底层加速器的硬件特性一致的张量形状,通过限制形状选择来实现高效编译。

Roller 技术框架

通过对6种主流 DNN 模型和119种流行的 DNN 算子的评估表明,Roller 可以在几秒内生成高度优化的内核,尤其是对于大型昂贵的自定义算子。最终,Roller 在编译时间上比现有的编译器实现了三个数量级的改进。Roller 生成的内核性能与包括 DNN 库在内的最先进的张量编译器的性能相当,有些算子甚至表现更好。与此同时,Roller 也已被用于微软内部开发的自定义 DNN 内核上,在实际开发中验证了 Roller 可以显著加快开发周期的优越性能。

论文:ROLLER: Fast and Efficient Tensor Compilation for Deep Learning

AI编译“电焊机”Welder:降低访存量,提升计算效率

现代 DNN 模型对高速内存的要求变得越来越高,在分析了一些最新的 DNN 模型后,研究员们发现当前大部分 DNN 计算的瓶颈主要在于 GPU 的访存,如这些模型对内存带宽利用率高达96.7%,但计算核的平均利用率只有51.6%,而且随着硬件与 DNN 模型的不断发展,这两者之间的差距还会持续增大。尤其是当前的人工智能模型需要处理高保真度的数据,如更大的图像、更长的句子、更高清的图形,这些数据在计算中都占用了更多的内存带宽。同时,更高效的专有计算核(如TensorCore)也进一步加大了内存压力。

为了解决内存问题,研究员们提出了 Welder 深度学习编译器,全面优化由通用算子组成的端到端 DNN 模型的内存访问效率。其实,DNN 模型可以看作是由多个算子连成的一张图,整个计算过程涉及多个阶段,即数据需要流过不同的算子,在每个阶段都需要将张量切分成块,先搬运到处理器上进行计算,然后再搬运回内存,这就会造成很大的搬运开销。由于整个计算过程包含多个流程,所以还可以将这一过程想象成逐层向上搬运“砖块”的场景,其中第一个“工人”将“砖块”拿上去加工然后再放回去,第二个“工人”再拿上来雕刻一下再放回去,然后是第三个、第四个……,反复搬运,可以预想其中的开销不言而喻。那么是否可以让第一个“工人”在顶层完成一部分子任务后直接交给下一个“工人”继续处理,然后再将多项任务“焊接”起来,实现流水化作业呢?Welder 正是扮演了电焊机这个角色,通过链接不同的算子,它可以让数据块以流水线的方式处理,大大降低了访存量,在近几年人工智能模型对访存效率要求越来越高的情况下,可以大幅提升计算效率。

Welder 技术框架

在对10个主流的 DNN 模型(包括用于各种任务的经典和最新模型结构,如视觉、自然语言处理、3D 图形等)进行评估后可以表明,Welder 在 NVIDIA 和 AMD 的 GPU 上都显著超过了现有的主流框架和编译器,如 PyTorch、ONNXRuntime 和 Ansor,速度提升分别到达21.4倍、8.7倍和2.8倍。Welder 的自动优化甚至超过了 TensorRT 和 Faster Transformer,最高可实现3.0倍和1.7倍的加速。此外,当在 TensorCore 等具有更快计算核心的硬件上运行这些模型时,其性能有了更大的提高,突显了内存优化对未来人工智能加速器的重要性。

论文:WELDER: Scheduling Deep Learning Memory Access via Tile-graph

AI编译“研磨机”Grinder:让控制流也能在加速器上高效执行

在计算程序中,对数据块的搬运过程有时候需要引入一些更复杂的控制逻辑,这就是人工智能程序数据流之外的控制流,如循环地遍历一个句子中的每个单词,或者根据输入动态决定执行哪一部分程序。当前的编译器大多都是在解决数据流问题,对控制流的支持并不高效,因此导致了控制流较多的模型无法高效利用加速器性能。研究员们认为,可以将控制流和数据流切分重组以此来进行更高效的优化,并推出了 Grinder[1]。Grinder 好像一个便携的研磨切割机,它在把数据流切分成不同规模的并行计算块后,会再把控制流融入数据流,让控制流也能在加速器上高效执行。

Grinder 技术框架

Grinder 可以在硬件加速器上共同优化控制流和数据流的执行,并通过一种新的抽象来统一包括控制流和数据流的人工智能模型的表示,这就允许 Grinder 向较低级别的硬件并行性暴露用于重新调度控制流的整体调度空间。Grinder 使用启发式策略找到了有效的调度方案,且能够自动将控制流移动到设备内核中,进而实现了跨控制流边界的优化。实验表明,Grinder 可以对控制流密集的 DNN 模型加速8.2倍,是目前针对控制流的 DNN 框架和编译器中速度最快的一个。

论文:Cocktailer: Analyzing and Optimizing Dynamic Control Flow in Deep Learning

[1] Grinder 为项目名称,论文中系统名称为 Cocktailer

基于同一套抽象和统一的中间表示层(Intermediate Representation,IR),这四款 AI 编译器解决了当前 AI 编译器中的不同问题——并行、编译效率、内存、控制流,构成了一套完整的编译解决方案。在推进研究的进程中,微软亚洲研究院的编译原型系统已经为 Office、Bing、Xbox 等微软产品的部署和模型优化提供了帮助,同时也在微软新型算子的定制和优化中发挥了作用。

“在大模型成为主流的今天,人工智能模型对效率、算力有了更高的要求。一方面,AI 编译器需要针对硬件资源做出极致的算子融合、定制和优化;另一方面,也需要对新型大规模硬件架构进行系统编译支持,如片上网络互联(NoC)的芯片、混合内存架构等,甚至通过白盒编译方法指导硬件定制。我们提出的这套 AI 编译器已被证明能够大幅提升 AI 编译的效率,可以更好地助力人工智能模型的训练和部署。同时,大模型的发展也为 AI 编译带来了机遇,未来大模型本身或许就可以帮助我们实现优化和编译。”微软亚洲研究院首席研究员薛继龙表示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c#示例-json序列化和json树

序列化 由于指针和引用类型的存在,在运行中的程序中,数据不一定是整块的。 可能东一块西一块散落在内存的各个地方。 序列,是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。 经过这样处理后的数据就可以方便的进行传输…

1130 - Host XXX‘ is not allowed to connect to this MySQL server

mysql 连接报错 这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有没有用户 解决的方法: 登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称’%’。 1、连接服务器: mysql -u root -p…

万字解读 | 数据可视化平台--FineBI

什么是BI 学习目标 知道什么是BI 知道FineBI的优势 1. 商业智能: BI(Business Intelligence)是指通过收集、分析和解释企业内外部数据,为企业决策提供支持和指导的一种技术和工具。商业智能的目标是帮助企业管理者和决策者更好地理解企业…

vivado 添加 pynq-z2板

以vivado2019.02版本为例 1下载地址 https://www.tulembedded.com/FPGA/ProductsPYNQ-Z2.html 2.点击下载 3.解压添加 注:如果没有board_files 可以自己创建一个 4.重新打开vivado

跨境电商企业实施WMS仓储管理系统有什么要注意的

在跨境电商行业中,仓储管理是关键的环节之一。为了提高仓储效率和准确性,许多跨境电商企业选择实施WMS仓储管理系统解决方案。然而,实施电商企业WMS系统并不是一项简单的任务,需要注意一些关键要点。本文将介绍跨境电商企业实施WM…

Ubuntu 18.04 Docker 安装配置 Apollo 6.0

百度 Apollo 安装测试(1) Apollo 6.0 安装完全指南 在这一步出错: 进入到 Apollo 源码根目录,打开终端,执行下述命令以启动 Apollo Docker 开发容器 ./docker/scripts/dev_start.sh并没有成功启动 Apollo docker 开发…

科技成果鉴定报告的重要性

科技成果鉴定是评估科技成果价值、可行性和科学性的过程,鉴定结果直接关系到科技成果的应用和推广。科技成果鉴定报告是鉴定结果的呈现和总结,对于科技成果的评估和利用具有重要的价值和意义。 1、科技成果价值评估:在科技创新和技术发展中…

在VMware Workstation安装 ESXI8.0初体验

文章目录 🐟前言🐟安装🐟在VMware WorkStation中创建虚拟机🐟ESXI部署安装🐟安装完成后配置 🐟前言 ESXI8.0版本开始最低RAM从以前的4GB变为8GB 本文所使用到的镜像以及Key都可以到我的网站中下载 地址&…

数学分析:k维曲面

这部分比较抽象,我就不按照书本上的定义来了,直接讲直观的理解。 一般来说,我们认为: 这是一个圆, 但同时也可以认为他是一个一维的曲面。 同理 是一个球面 但同时也是一个二维的曲面,依次类推。 我们…

AWS 云区域(region),可用区(AZ)

AWS 提供三种地理性组件: Regions:区域,即AWS提供云服务的一个区域,其目的是为了用户能就近接入,降低网络延迟。通常是一个城市的若干个AZ组成一个region。2016年,AWS 宣布在其全球region之间建设了100GbE…

对 Jenkins+ANT+Jmeter 接口测试的实践

目录 1、前言 2、框架与数据准备 3、脚本设计 4、整理测试报告 1、前言 JenkinsANTJMeter是一种常见的接口测试实践方案,可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具,ANT是一个构建工具,而JMeter是一个功能强大…

journalctl命令

要查看系统日志信息,使用journalctl工具即可。 不加任何参数,它将显示系统日志的全部信息:显示的顺序是从旧到新。 [rootvm1 ~]# journalctl -- Logs begin at Fri 2023-07-14 05:12:22 CST, end at Thu 2023-07-13 21:20:01 CST. -- Jul 14…

re学习(15)BUUCTF 2019红帽杯easyRe

参考视频: 【BUUCTF】每天一个CTF11“2019红帽杯easyRe”_哔哩哔哩_bilibili (本人觉得看视频比看博客效率能提高十倍,呜呜呜,还是视频香~~~与君共勉) 下载地址: BUUCTF在线评测 前言:虽然…

论文出矢量图EMF

PDF---->矢量图EMF工具: PDF to EMF | CloudConvert solidworks截图打印为PDF; matlab打开图像--编辑-复制--粘贴 - CAD打印输出PDF

传输网络介绍

文章目录 1、通信传输介质有哪些? 同轴电缆 –由外到内分别是:塑料皮层、屏蔽层、绝缘层、铜芯。 光纤 –由圆玻璃纤芯和玻璃包层构成,最外层是塑料护套。 双绞线 –由两根具有绝缘保护层的互相绞在一起铜导线组成的。 2、通信网络常见的组…

60题学会动态规划系列:动态规划算法第五讲

子数组系列题目 文章目录 1.最大子数组和2.环形子数组的最大和3.乘积最大数组4.乘积为正数的最长子数组长度5.等差数列划分6.最长湍流子数组7.单词拆分8.环绕字符串中唯一的子字符串 1.最⼤⼦数组和 力扣链接:力扣 给你一个整数数组 nums ,请你找出一个…

自动化测试Allure报告使用详解

这一节主要是记录allure的内容以及用法,怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下,它的可读性是最好、最直观的。这不仅仅是我想要的效果,也是很多小伙伴想要的结果,毕竟这是给领导看…

Vue使用keep-alive设置哪些组件可以被缓存,哪些不被缓存

需求&#xff1a;当一个项目中&#xff0c;不是所有的组件页面都需要缓存起来&#xff0c;因为有些页面是不需要的 <keep-alive><router-view v-if"$route.meta.keepAlive"></router-view> </keep-alive><router-view v-if"!$rout…

27、简述线程池处理线程

简述线程池处理线程 线程池执行任务 判断核心线程是否已满&#xff0c;如果未满&#xff0c;则 创建核心线程执行&#xff0c;如果已满&#xff0c;则走下一步判断队列是否已满&#xff0c;如果未满&#xff0c;则 将任务放到队列中&#xff0c;如果已满 &#xff0c; 则走下一…

03关于golang中各种运算符的讲解代码和注释

运算符 算术运算符&#xff1a;关系运算符&#xff1a;逻辑运算符&#xff1a;赋值运算符&#xff1a;位运算符&#xff1a; 在Golang中&#xff0c;运算符是用于执行各种数学和逻辑操作的符号。本文将对Golang中常见的运算符进行讲解&#xff0c;并提供一些示例代码和注释。 …