全文翻译(三) TVM An Automated End-to-End Optimizing Compiler
5. 自动化优化
考虑到一组丰富的调度原语,剩下的问题是为DL模型的每一层,找到最佳的算子实现。在这里,TVM为与每个层关联的特定输入shape和布局,创建一个专门的算子。这种专门化提供了显著的性能优势(与针对较小shape和布局多样性的手工代码相比),但也带来了自动化挑战。系统需要选择调度优化,如修改循环排序或优化内存层次结构,以及调度特定参数,如平铺大小和循环展开系数。
这样的组合选择为每个硬件后端的算子实现,构建了一个巨大的搜索空间。为了应对这一挑战,构建了一个自动化的进度优化器,有两个主要组件:一个是提出有前途的新配置的调度管理器,另一个是预测给定配置性能的机器学习成本模型。本节描述了这些组件和TVM的自动优化流程(图11)。

5.1调度空间规格

构建了一个调度模板规范API,让开发人员在调度空间中声明knobs。模板规范允许在指定可能的调度时,根据需要结合开发人员的领域特定知识。还为每个硬件后端,创建了一个通用主模板,该模板根据使用张量表达式语言表示的计算描述,自动提取可能的knobs。在高层次上,希望考虑尽可能多的配置,让优化器管理选择负载。因此,优化器必须搜索数十亿种可能的配置,查找实验中使用的真实世界DL工作负载。
5.2 基于ML的成本模型
从大型配置空间中,通过黑盒优化,即自动调整,找到最佳调度的一种方法。此方法用于调整高性能计算库。然而,自动调整需要许多实验,确定良好的配置。

Figure 11: Overview of automated optimization framework. A schedule explorer examines the schedule space using an ML-based cost model and chooses experiments to run on a distributed device cluster via RPC. To improve its predictive power, the ML model is updated periodically using collected data recorded in a database.
另一种方法是建立一个预定义的成本模型,指导对特定硬件后端的搜索,不是运行所有的可能性,测量性能。理想情况下,一个完美的成本模型,会考虑影响性能的所有因素:内存访问模式,数据重用,管道依赖性和线程连接模式等。不幸的是,由于现代硬件越来越复杂,这种方法很麻烦。此外,每个新的硬件目标,都需要一个新的(预定义的)成本模型。

Table 1: Comparison of automation methods. Model bias refers to inaccuracy due to modeling.
相反,采用统计方法,解决成本建模问题。在这种方法中,调度资源管理器提出的配置,可能会提高算子的性能。对于每个调度配置,使用一个ML模型,该模型将降低的循环程序作为输入,预测在给定硬件后端上的运行时间。该模型使用搜索期间收集的运行时,测量数据进行训练,不需要用户输入详细的硬件信息。在优化过程中,随着探索更多配置,会定期更新模型,提高准确性。
对于其它相关的工作负载也是如此。通过这种方式,ML模型的质量随着更多的实验提高。表1总结了自动化方法之间的主要差异。基于ML的成本模型,在自动调整和预定义的成本建模间,取得了平衡,可以从相关工作负载的历史性能数据中获益。
机器学习模型设计选择。必须考虑两个关键因素,选择调度管理器,将使用的ML模型:质量和速度。

Figure 12: Comparison of different automation methods for a conv2d operator in ResNet-18 on TITAN X. The ML-based model starts with no training data and uses
the collected data to improve itself. The Y-axis is the speedup relative to cuDNN. We observe a similar trend for other workloads.

Figure 13: Example workflflow of ML cost models. XGBoost predicts costs based on loop program features. TreeRNN directly summarizes the AST.
schedule explorer经常查询成本模型,由于模型预测时间和模型重新安装时间产生开销。为了发挥作用,这些开销必须小于在实际硬件上,测量性能所需的时间,根据具体的工作负载/硬件目标,实际硬件上的性能可以达到秒级。这种速度要求将问题与传统的超参数调优问题区分,在超参数调优问题中,执行测量的成本,相对于模型开销非常高,可以使用更昂贵的模型。除了选择模型外,需要选择一个目标函数训练模型,如配置的预测运行时间中的误差。

由于资源管理器,仅根据预测的相对顺序(A的运行速度比B快),选择排名靠前的候选对象,因此不需要直接预测绝对执行时间。相反,使用排名目标,预测运行时成本的相对顺序。
在ML Optimizer中实现了几种类型的模型。采用了一个梯度树推进模型(基于XGBoost),该模型根据从循环程序中提取的特征进行预测;这些特性包括每个循环级别上,每个内存缓冲区的内存访问计数和重用率,以及循环注释的一次热编码,如“矢量化”,“展开”和“并行”。评估了一个神经网络模型,该模型使用TreeRNN,在无需特性工程的情况下,评测循环程序的AST。图13总结了成本模型的工作流程。发现treeboosting和TreeRNN具有相似的预测质量。然而,前者的预测速度是后者的两倍,训练时间也少得多。因此,在实验中选择了梯度树推进作为默认的成本模型。尽管如此,相信这两种方法都是有价值的,期望今后对这个问题进行更多的研究。

平均而言,树推进模型的预测时间为0.67毫秒,比实际测量快数千倍。图12比较了基于ML的优化器和blackbox自动调优方法;前者发现更好的配置比后者快得多。
5.3进度计划
一旦选择了一个成本模型,就可以选择有希望的配置,在这些配置上迭代地运行真正的度量。在每次迭代中,浏览器使用ML模型的预测,选择一批候选对象,在这些候选对象上运行度量。然后将收集的数据,用作更新模型的训练数据。如果不存在初始训练数据,资源管理器会随机挑选候选对象进行测量。
最简单的探索算法,通过成本模型枚举,运行每个配置,选择前k名预测执行者。然而,这种策略在较大的搜索空间中,变得难以处理。

相反,运行了一个并行模拟退火算法。资源管理器从随机配置开始,在每一步中,都会随机转到附近的配置。如果成本模型预测的成本降低,转换是成功的。如果目标配置成本较高,可能会失败(拒绝)。随机游动倾向于收敛于具有较低速度的配置成本模型预测的成本。搜索状态在成本模型更新期间持续存在;从这些更新之后的最后一个配置继续。

5.4分布式设备池和RPC

分布式设备池可扩展硬件测试的运行,在多个优化作业之间,实现细粒度资源共享。TVM实现了一个定制的,基于RPC的分布式设备池,使客户端能够在特定类型的设备上运行程序。可以使用此接口,在主机编译器上编译程序,请求远程设备,远程运行函数,在主机上访问相同脚本中的结果。TVM的RPC支持动态上载,使用运行时约定运行交叉编译的模块和函数。因此,相同的基础结构,可以执行单个工作负载优化和端到端图Inference。这种方法自动化了跨多个设备的编译,运行和配置步骤。

Table 2: Confifigurations of all conv2d operators in ResNet-18 and all depthwise conv2d operators in MobileNet used in the single kernel experiments. H/W denotes height and width, IC input channels, OC output channels, K kernel size, and S stride size. All ops use “SAME” padding. All depthwise conv2d operations have channel multipliers of 1.
这种基础架构对于嵌入式设备尤其重要,因为传统上,嵌入式设备需要进行繁琐的手动交叉编译,代码部署和测量。
6.评价
TVM核心是用C++实现的(∼50k LoC)。提供Python和Java的语言绑定。本文前面的部分评估了TVM的几个独立优化和组件的影响,即,图4中的算子融合,图10中的延迟隐藏,以及图12中基于ML的成本模型。
现在重点关注端到端评估,旨在回答以下问题:
•TVM能否在多个平台上优化DL工作负载?
•TVM与每个后端上现有的DL frame works(依赖高度优化的库)相比如何?
•TVM能否支持新出现的DL工作负载(例如,深度卷积,低精度算子)?
•TVM能否支持优化新的专用加速器?
为了回答这些问题,在四种平台上评估了TVM:
(1) 服务器级GPU
(2) 嵌入式GPU
(3) 嵌入式CPU
(4) 在低功耗FPGA SoC上实现的DL加速计。

Figure 14: GPU end-to-end evaluation for TVM, MXNet, Tensorflflow, and Tensorflflow XLA. Tested on the NVIDIA Titan X.

基准测试基于现实世界的DL推理工作负载,包括ResNet,MobileNet,LSTM语言模型,深度Q网络(DQN)和深度卷积生成对抗网络(DCGAN)。将方法与现有的DL框架进行比较,包括MxNet和TensorFlow,依赖于高度工程化的,特定于供应商的库。TVM执行端到端的自动优化和代码生成,无需外部算子库。
6.1 服务器级GPU评估
首先比较端到端的深度神经网络TVM,MXNet(V1.1),Tensorflow(V1.7)和Tensorflow XLA的NVIDIA TITIX。MXNet和Tensorflow都使用cuDNN v7作为卷积算子;实现了版本的深度卷积,因为相对较新,还没有得到最新库的支持。还使用cuBLAS v8进行矩阵乘法。另一方面,Tensorflow XLA使用JIT编译。

Figure 15: Relative speedup of all conv2d operators in ResNet-18 and all depthwise conv2d operators in MobileNet. Tested on a TITAN X. See Table 2 for operator confifigurations. We also include a weight pretransformed Winograd for 3x3 conv2d (TVM PT).

图14显示,TVM优于基线,由于联合图优化和生成高性能融合算子的自动优化器,其加速比从1.6×到3.8×不等。DQN的3.8倍加速是由于其使用了未经cuDNN优化的非常规算子(4×4 conv2d,步长=2);ResNet工作负载更为传统。TVM会在这两种情况下自动找到优化的。

Figure 16: ARM A53 end-to-end evaluation of TVM and TFLite.
为了评估算子级优化的有效性,还对ResNet和MobileNet中的每个张量算子,进行了细分比较,如图15所示。将TensorComprehension(TC,commit:ef644ba)作为一个额外的基线,是最近引入的自动调优框架。2 TC结果包括在10代×100群体×每个算子2个随机种子中发现的最佳seeds(即每个算子2000次试验)。二维卷积是最重要的DL算子之一,cuDNN进行了大量优化。然而,TVM仍然可以为大多数层,生成更好的GPU内核。深度卷积是一种结构简单的新算子。
在这种情况下,TVM和TC都可以找到比MXNet手工制作的内核更快的内核。TVM的改进主要归功于,对大调度空间的探索和有效的基于ML的搜索算法。
6.2嵌入式CPU评估
在ARM Cortex A53(四核1.2GHz)上,评估了TVM的性能。使用Tensorflow Lite(TFLite,commit:7558b085)作为基线系统。

Figure 17: Relative speedup of all conv2d operators in ResNet-18 and all depthwise conv2d operators in mobilenet. Tested on ARM A53. See Table 2 for the configurations of these operators.

图17将TVM算子与ResNet和MobileNet的手工优化算子进行了比较。TVM生成的算子,在两种神经网络工作负载方面,都优于手动优化的TFLite版本。该结果还证明了TVM能够快速优化新兴的张量算子,如深度卷积算子。最后,图16显示了三种工作负载的端到端比较,TVM优于TFLite基线。
3个超低精度算子,通过为小于8位的定点数据类型,生成高度优化的算子,展示了TVM支持超低精度推理的能力。低精度网络用矢量化位串行乘法,代替昂贵的乘法,矢量化位串行乘法,由按位和pop计数减少组成。实现高效的低精度推理,需要将量化数据类型打包为更广泛的标准数据类型,如int8或int32。
TVM系统生成的代码性能优于Caffe2的手动优化库。实现了一个特定于ARM的tensorization内核,利用ARM指令构建一个高效,低精度的矩阵向量微内核。然后,使用TVM的自动优化器,搜索调度空间。

Figure 18: Relative speedup of single- and multithreaded low-precision conv2d operators in ResNet. Baseline was a single-threaded, hand-optimized implementation from Caffe2 (commit: 39e07f7). C5, C3 are 1x1 convolutions that have less compute intensity, resulting in less speedup by multi-threading.

图18将TVM与ResNet上的Caffe2超低精度库进行了比较,用于2位激活,1位权重推理。由于基线是单线程的,还将与单线程TVM版本进行比较。

单线程TVM优于基线,尤其是C5,C8和C11层;这些是内核大小为1×1,步长为2的卷积层,超低精度基线库未对此进行优化。此外,还利用额外的TVM功能,生成一个并行库实现,该实现显示出比基线更好的性能。除了2位+1位配置,TVM可以生成优化基线库不支持的其它精度配置,提高灵活性。

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

全文翻译(三) TVM An Automated End-to-End Optimizing Compiler相关推荐

  1. 【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 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. 《易经》全文翻译(值得收藏)

    1.<易经>中隐含的28条天规,大智慧! 一:以自我为中心的人,将困于人生最大的陷阱 人人都有"自我"--身体.思想.财产.名誉.地位等等.如果你是一个聪明人,不仅要为 ...

  9. GDPR全文翻译(一)

    General Data Protection Regulation <一般数据保护法案>全文翻译(一) 编者按 2016年4月14日,欧洲议会投票通过了商讨四年的<一般数据保护法案 ...

最新文章

  1. 移动应用发展远超Web 谷歌苹果将主导世界?联网的发展才刚刚开始
  2. 微服务架构核心20讲
  3. MySQL中count(1),count(*),count(某字段)等用法联系和区别
  4. 下载 infoq 网站视频
  5. .NET Core中的认证管理解析
  6. 计算机网络(一)-概述(补充)
  7. Spring Boot快速上手
  8. vue报错Invalid Host header
  9. 何把SATA/RAID驱动集成到win xp 安装盘里?
  10. Android Service中的android:process=:remote
  11. 斐讯k2p官方固件如何登陆ssh后台
  12. 微信native支付
  13. 在线 PHP运行工具、数据库可控
  14. 中e管家投资理财需了解的基础知识
  15. 网络爬虫——原理简介
  16. iOS关于加载图片的几种方式选择
  17. 阿里云HttpDns接入
  18. Door to Door 日剧改编 励志
  19. MDIEMDIE双心封装版0.3.0.0RC6V2
  20. 计蒜客信息学入门赛 #17--B

热门文章

  1. etcd 笔记(02)— etcd 安装(apt 或 yum 安装 、二进制包安装、Docker 安装 etcd、etcd 前端工具etcdkeeper)
  2. 2022-2028年中国PPS树脂产业研究及前瞻分析报告
  3. shell编程_linux
  4. Android数据持久化:SharePreference
  5. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
  6. TVM自定义数据类型
  7. NVIDIA DeepStream 5.0构建智能视频分析应用程序
  8. MindInsight计算图可视设计
  9. 超声波技术构建触摸界面
  10. 2020年Yann Lecun深度学习笔记(下)