全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
摘要

人们越来越需要将机器学习应用到各种各样的硬件设备中。现在的框架依赖于特定于供应商的算子库,针对窄带的服务器级GPU进行优化。将工作负荷部署到新平台,如移动电话,嵌入式设备和加速算子(如FPGA,ASIC)-需要大量手动操作。
提出了TVM,一个开源图形级别的编译器和算子级优化,提供高效跨多个应用程序移植到深度学习工作负荷硬件后端。TVM解决了深度学习特有的优化难题,如高级算子融合,映射到任意硬件原语,内存延迟隐藏。
通过以下方式自动优化底层程序,适配硬件特性:
采用一种自定义的,基于学习的成本模型方法,用于快速探索代码优化。实验结果表明,TVM可在不同的领域,提供高性能硬件后端,可与最先进的低功耗CPU,mobile GPU,server-class GPUs的手动调优库抗衡。展示了TVM面向加速算子后端的能力,如作为基于FPGA的通用深度学习加速算子。TVM系统是开源的,在几家大公司提供量产服务。
1.引言
深度学习(DL)模型,可以识别图像,处理自然语言,在挑战性战略游戏中击败人类。智能应用部署的需求日益增长,从云服务器,自动驾驶汽车和嵌入式设备,广泛应用于各种设备。由于硬件特性的多样性,包括嵌入式CPU,GPU,FPGA和ASIC(如TPU),将DL工作负荷,映射到这些设备非常重要。这些硬件目标包括内存组织,计算功能单元,如图1所示。

Figure 1: CPU, GPU and TPU-like accelerators require different on-chip memory architectures and compute primitives. This divergence must be addressed when generating optimized code.
当前的DL框架,如TensorFlow,MXNet,Caffe和Pytorch,依靠计算图实现优化,如自动微分和动态内存管理。图形级优化,通常太深奥,无法处理硬件后端特定的算子级转换。大部分框架专注于一个狭窄的服务器类GPU设备,特定于目标的优化高度工程化和特定于供应商的算子libraries。这些算子库,过于专业化和不透明,不易于跨硬件设备进行移植,需要大量的手动调谐数据。提供在各种DL框架中,支持各种硬件后端,目前需要大量的工程效率。即使对于受支持的后端,框架也必须在以下两者间,做出艰难的选择:
(1) 避免产生预定义运算子库中,没有的新运算符算子的图形优化
(2)使用这些新算子的未优化实现。
不同的硬件后端,实现图形级和算子级优化,采用了一种有趣的,完全不同的端到端方法。构建TVM,一种采用高级规范的编译器,从现有框架支持不同的代码生成,低级优化代码硬件后端。为了吸引用户,TVM需要提供与跨di-verse硬件后端的多种手动优化算子库相竞争的性能。这一目标需要解决下文介绍的主要挑战。
利用特定的硬件功能和限制。
DL加速算子引入了优化的张量计算原语,GPU和CPU不断改进处理元素。一个重大的挑战,客户生成优化的代码给定的算子描述。硬件指令的输入是多维的,可以是固定的,也可以是可变的长度;规定了不同的数据布局;有内存层次结构的特殊要求。系统必须利用加速算子,有效地处理这些复杂的原语。加速算子的设计也是如此,通常倾向于更精简的控制和load更多编译器堆栈复杂调度。对于专门化的加速算子,系统需要生成显式控制管道,针对CPU和GPU的硬件,优化隐藏内存访问延迟关系的代码。
优化的大搜索空间另一个挑战,在不手动调整算子的情况下,生成高效代码。内存访问,线程模式和新型硬件原语的组合选择,为生成的代码创建巨大的配置空间(例如,循环布局和排序,缓存,展开)。如果实施blackbox黑盒自动调谐,将产生巨大的搜索成本。可以采用预先确定的成本模型,指导搜索,由于模型的复杂性越来越高,构建准确成本模型,很难建立模型现代硬件。此外,要求为每种硬件类型,建立单独的成本模型。
TVM通过三个关键模块解决了这些挑战。
(1)引入一种张量表达式语言。
构建算子提供程序转换,通过各种优化生成不同版本的program原语。这一层开展Halid的计算/调度分离概念,将目标硬件本质与转换原语分离,支持新型加速算子及相应的新intrinsics。此外,引入了新的转换原语,应对与GPU相关的挑战,使部署能够特定于加速算子。可以应用不同的程序转换序列,为给定的算子声明,形成丰富的有效程序空间。
(2) 引入了一个自动程序优化框架,用于寻找优化的张量算子。
优化算子是在基于ML的成本模型的指导下,从硬件后端收集更多数据,该模型会不断调整和改进。
(3)在自动代码生成上,引入一个充分利用高级和算子级优化。
通过结合这三个模块,TVM可以将现有深度学习框架的模型描述,工作,执行高级和低级优化,为后端(如CPU,GPU和基于FPGA的专用处理器)生成特定于硬件的优化代码加速算子。
本文主要贡献:
•确定了在不同硬件后端为深度学习工作负荷,提供性能可移植性方面的主要优化挑战。
•引入了自定义的调度原语,充分利用了跨线程内存重用,创新的硬件本质和延迟隐藏。
•提出实施基于机器学习的自动探索和优化系统搜索的张量算子。
•构建了一个端到端的编译和优化堆栈,在高级框架(包括TensorFlow,MXNet,PyTorch,Keras,CNTK)中,多种硬件后端(包括CPU,服务器GPU,移动GPU和基于FPGA的加速算子)特定的工作负荷,部署深度学习。
开源TVM在几家大公司内部量产使用。在服务器级GPU,嵌入式GPU,嵌入式CPU和一个定制的基于FPGA的通用加速器上,使用真实的工作负荷,对TVM进行了评估。
实验结果表明,TVM具有便携性跨后端的性能实现加速,在现有框架的基础上,由手工优化的库支持,从1.2×到3.8×不等。
2.概述

通过使用示例,介绍TVM的组件。

Figure 2: System overview of TVM. The current stack supports descriptions from many deep learning frameworks and exchange formats, such as CoreML and ONNX, to target major CPU, GPU and specialized accelerators.
图2总结了TVM中的执行步骤及相应部分。该系统首先将现有框架中的模型作为输入,转换为计算图形表示。然后执行高级数据流重写,生成优化的图。操作员级优化模块必须生成efficient代码-此图中每个融合运算符的。运算符是用声明性张量表达式语言指定的;未指定执行细节。TVM为给定的目标识别一组可能的代码优化
硬件目标的算子。可能的优化形成了一个很大的空间,使用基于ML的成本模型,寻找优化的算子。最后,系统将生成的代码,打包到可部署模块中。
最终用户示例。在以下几行代码中,用户可以从现有的深度学习框架中获取模型,调用TVM API获得可部署模块:

import tvm as t

Use keras framework as example, import model

graph, params = t.frontend.from_keras(keras_model)
target = t.target.cuda()
graph, lib, params = t.compiler.build(graph, target, params)
这个编译后的运行时模块,包含三个组件:
最终优化的计算图(graph)、生成的算子(lib)和模块参数(params)。可以使用这些组件,将模型部署到目标后端:

import tvm.runtime as t
module = runtime.create(graph, lib, t.cuda(0))
module.set_input(**params)
module.run(data=data_array)
output = tvm.nd.empty(out_shape, ctx=t.cuda(0))
module.get_output(0, output)
TVM支持局域网中的多个部署后端,如C++、java和Python。本文的其余部分描述了TVM的体系结构,及系统程序员如何扩展,支持新的后端。

参考文献:
TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning相关推荐

  1. 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...

  2. 全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 3.优化计算图 计算图是在DL框架中表示程序的常 ...

  3. 【TVM全文翻译】TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    目录 Abstract 1. Introduction 2. Overview 3. Optimizing Computational Graphs 4. Generating Tensor Oper ...

  4. Deep Learning 教程翻译

    Deep Learning 教程翻译 非常激动地宣告,Stanford 教授 Andrew Ng 的 Deep Learning 教程,于今日,2013年4月8日,全部翻译成中文.这是中国屌丝军团,从 ...

  5. 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler

    全文翻译(四) TVM An Automated End-to-End Optimizing Compiler 6.3 嵌入式GPU评估 对于移动GPU实验,在配备ARM Mali-T860MP4 G ...

  6. 全文翻译(三) TVM An Automated End-to-End Optimizing Compiler

    全文翻译(三) TVM An Automated End-to-End Optimizing Compiler 5. 自动化优化 考虑到一组丰富的调度原语,剩下的问题是为DL模型的每一层,找到最佳的算 ...

  7. iMeta:德布鲁因图在微生物组研究中的应用(全文翻译,PPT,视频)

    德布鲁因图在微生物组研究中的应用 Applications of de Bruijn graphs in microbiome research DOI: https://doi.org/10.100 ...

  8. “利他主义者”乔治·普莱斯的一生(全文翻译自Independent)

    本文转载自"生态学文献分享",已获授权 图1. 乔治·普莱斯漫画(插图) 原文: George Price: the altruistic man who died trying ...

  9. 高山仰止 | “利他主义者”乔治·普莱斯的一生(全文翻译自Independent)

    本文转载自"生态学文献分享",已获授权 图1. 乔治·普莱斯漫画(插图) 原文: George Price: the altruistic man who died trying ...

最新文章

  1. 在Ubuntu 16.04.3 LTS上搭建Go语言环境实录
  2. J2SE学习标准篇(转载)
  3. WebView跳转到底部
  4. 性能测试报告模板_性能测试新手误区
  5. 命令行中只用scala来运行一个spark应用
  6. 网易严选Java开发三面面经:java技术编程培训班
  7. ubuntu nginx配置负载均衡篇(一)
  8. C4D立体数字设计灵感,适合庆典应用|这波用得6啊!
  9. 华为cipher解密工具_Android、iPhone和Java三个平台一致的加密工具
  10. Ubuntu 之旅(三)安装通讯工具
  11. Python 进阶之递归函数一点都不难!
  12. G1垃圾回收器总结一
  13. Mac上搭建IOS自动化测试环境
  14. 电路设计_元器件选型总结1
  15. linux安装wine
  16. 行业分析-全球与中国无线键盘和蓝牙耳机市场现状及未来发展趋势
  17. 平面设计新手如何用PS制作出一张合成海报
  18. 【内网穿透服务器】使用FRP实现内网穿透,远程访问内网服务器
  19. teamviewer被检测为商业用途
  20. golang rabbitMQ 生产者复用channel以及生产者组分发策略

热门文章

  1. 2022-2028年中国数字乡村建设深度调研及投资前景预测报告
  2. PyCharm_10个加速省时间技巧
  3. curl模拟post请求
  4. bert [unused*] 特殊符号
  5. 终端(terminal)、tty、shell、控制台(console)、bash之间的区别与联系
  6. PointRCNN: 点云的3D目标生成与检测
  7. Camera HDR Algorithms
  8. Thrift的服务器和客户端Python案例
  9. Docker核心技术之网络管理
  10. [JS] 事件冒泡,阻止事件冒泡,事件的三个阶段(捕获,目标,冒泡)