陈天奇等人提出AutoTVM:让AI来编译优化AI系统底层算子

简介: 时的深度学习并没有现在那么火热,也没有现有的 GPU 卷积实现,我在实验室的 GTX 470 上面第一次手写 GPU 卷积用以支持卷积 RBM,当时针对 CPU 十多倍的加速比让我兴奋不已。

Alexnet 横空出世的两年之前,我选择了深度学习作为本科毕设方向。当时的深度学习并没有现在那么火热,也没有现有的 GPU 卷积实现,我在实验室的 GTX 470 上面第一次手写 GPU 卷积用以支持卷积 RBM,当时针对 CPU 十多倍的加速比让我兴奋不已。虽然最终那段研究经历并没有结果,但是计算本身对于机器学习的推动作用却深深地印在了我的脑海里。


深度学习系统支是推动进步的引擎,而在引擎的核心,则是像 cuDNN 这样的针对硬件的高效算子实现。每一个高效的算子库的背后都是大量工程的工程努力。虽然我自己已经从事了几年深度学习系统的工作,如何实现高效的硬件代码始终对于我来说是一个头疼的问题。最近的深度学习系统趋势开始进行更多的高层优化:包括探索从不同的数据表示,精度和算子融合等各个方面,而这些优化势必会带来更多的算子版本需要去优化,这无疑是一个非常大的工程问题。我们还需要把这个问题乘上包括移动芯片,移动 GPU 和 AI 加速器等等后端硬件的种类。针对每一个平台都去实现一遍底层的优化代价无疑会非常大。


我们希望利用机器学习本身去解决这个问题,以深度学习编译器 TVM 为基础自动化地优化深度学习算子性能。写到这里,第一个大家会问的问题是为什么机器有可能会比手工做的优化要好。其实具体原因也很简单,一个人的精力是有限的,我们可以针对几个特定的场景去做一些优化。而机器有无限的精力可以针对每一种类型,数据表示,算子融合和实际的输入尺寸做特定的调整。像算子融合,这样的优化必须要利用自动代码生成才可以做到。所以机器在一定程度上可以取巧。


如何可以让机器匹配手写优化性能


思路非常直接:


  1. 建立一个足够大的搜索空间,保证可能的人工手写优化全部包含在这个搜索空间里面
  2. 快速地搜索这个这个空间,获取优化的实现


这两个想法很简单,其实在两年之前我们基本上就有了这一个解决问题的蓝图,但是执行都非常困难。第一个问题是如何建立足够大的搜索空间,使得其可以包含人可能达到的手写优化。这个在之前 TVM 的介绍里面我们提到过,我们通过参考改进 Halide 的 schedule 编程源语,加入了对于 GPU,加速器的抽象支持,通过一年的努力使得搜索空间基本可以匹配手写优化的性能。值得指出的是手工的优化可以非常多样性,并不是所有的优化都可以被简单的一个固定 pattern 总结。这也是之前很多自动代码生成框架无法达到比较好的效果的一个原因。我们也需要不断地总结抽象的优化规律,加入到 TVM 的原语中。另外在必要的时候我们也可以通过 tensorize 这个抽象可以插入一些手工优化的 micro kernel,但是依然使用框架来做外层调度,达到最好的效果。


有个足够好的搜索空间,剩下的问题是如何在几十亿的可能性里面去选择比较好的实现。这里有几种常见的做法。传统的高性能计算库会采用 Auto Tuning,也就是把可能的参数都尝试一遍。这样做的潜在问题是空间太大之后枚举开销过高。另外一种常见的做法是类似于数据库的做法,针对程序建立一个代价估价函数,然后利用估价函数来搜索。这个做法可能碰到的主要问题是估价函数不一定可以估计准确,并且针对每个新的硬件特性必须要重新设计估价函数。


我们的利用机器学习来学习程序空间的代价估价函数。具体地说,探索程序在一开始会随机地选取一些设定,直接到硬件上面去运行生成的代码,再通过得到的反馈数据来更新我们的程序代价估计函数。这里面比较有趣的一点是模型的可迁移性。因为真正的深度学习系统需要优化许多不一样输入类型,输入形状的算子。一个可迁移的模型可以通过学习已经看到过的算子优化记录来预测新的目标的代价,导致最后的搜索时间可以大幅降低。


其实在这个整个优化的过程中机器学习算法只是起到了重要但是只是一部分的作用。在一些如 ARM 我们的先验模版比较强的情况下,随机搜索就可以达到非常不错的效果。但是重要的是我们需要建立集群化,自动化,python 可以对接的框架来做这些实验。这里特别提一下 TVM 最近引入的 RPC tracker,支持了这一个功能,才可以使得我们可以在多种设备上进行实验。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
1月前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
99 9
|
2月前
|
机器学习/深度学习 数据采集 人工智能
未来的守护神:AI驱动的网络安全之盾,如何用智慧的光芒驱散网络黑暗势力?揭秘高科技防御系统背后的惊天秘密!
【10月更文挑战第3天】随着网络技术的发展,网络安全问题日益严峻,传统防御手段已显不足。本文探讨了构建AI驱动的自适应网络安全防御系统的必要性及其关键环节:数据采集、行为分析、威胁识别、响应决策和执行。通过Python库(如scapy、scikit-learn和TensorFlow)的应用实例,展示了如何利用AI技术提升网络安全防护水平。这种系统能够实时监控、智能分析并自动化响应,显著提高防护效率与准确性,为数字世界提供更强大的安全保障。
63 2
|
2月前
|
人工智能 自然语言处理 机器人
对话阿里云 CIO 蒋林泉:AI 时代,企业如何做好智能化系统建设?
10 月 18 日, InfoQ《C 位面对面》栏目邀请到阿里云 CIO 及 aliyun.com 负责人蒋林泉(花名:雁杨),就 AI 时代企业 CIO 的角色转变、企业智能化转型路径、AI 落地实践与人才培养等主题展开了讨论。
1587 67
对话阿里云 CIO 蒋林泉:AI 时代,企业如何做好智能化系统建设?
|
3天前
|
机器学习/深度学习 人工智能 算法
【AI系统】框架编程范式
编程范式是软件工程中一类典型的编程风格,如函数式、命令式、声明式、面向对象等。它们影响着开发者对程序执行的理解。本文探讨了两种主要的编程范式——声明式编程与命令式编程,特别是在AI框架中的应用,如TensorFlow的声明式编程和PyTorch的命令式编程,分析了这两种范式对AI框架架构设计的影响及主流AI框架在这两种范式上的差异。
26 3
【AI系统】框架编程范式
|
14天前
|
机器学习/深度学习 人工智能 算法
【AI系统】AI芯片驱动智能革命
本课程深入解析AI模型设计演进,探讨AI算法如何影响AI芯片设计,涵盖CPU、GPU、FPGA、ASIC等主流AI芯片,旨在全面理解AI系统体系,适应后摩尔定律时代的技术挑战。
32 5
|
2月前
|
存储 人工智能 自然语言处理
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
AI在医疗领域的革命:智能诊断系统的未来
在科技日新月异的今天,人工智能(AI)技术正逐渐渗透到我们生活的每一个角落,其中医疗领域尤为显著。本文将探讨AI在医疗诊断中的应用及其带来的变革,重点介绍智能诊断系统的发展现状与未来趋势。通过深入浅出的方式,我们将揭示AI如何改变传统医疗模式,提高诊断效率和准确性,最终造福广大患者。
|
14天前
|
机器学习/深度学习 存储 人工智能
【AI系统】计算之比特位宽
本文详细介绍了计算机中整数和浮点数的比特位宽概念及其在AI模型中的应用。通过对比特位宽的定义、整数与浮点数的表示方法、AI中常用的数据类型(如FP32、TF32、FP16、BF16、FP8和Int8)及其在模型训练和推理中的作用进行了阐述。特别关注了FP8数据类型在提高计算性能和减少内存占用方面的新进展,以及降低比特位宽对AI芯片性能的影响,强调了低比特位宽在AI领域的重要性。
26 0
|
2月前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
290 6
|
2月前
|
人工智能 安全 自动驾驶
【通义】AI视界|英特尔和AMD“史无前例”首次合作,组建X86生态系统咨询小组
本文概览了近期科技领域的五大热点新闻,包括联想与Meta合作推出个人AI智能体“AI Now”,英特尔和AMD首次合作组建X86生态系统咨询小组,特斯拉计划大规模生产自动驾驶出租车,前Palantir首席信息安全官加盟OpenAI,以及Meta因涉嫌损害青少年心理健康面临美国多州诉讼。更多资讯,请访问通义平台。