硬件平台上深度学习自动内核优化
对于AI开发人员来说,在各种硬件平台上优化深度神经网络的性能仍然是一个难题。在系统支持方面,在这里面临着许多问题:将训练有素的模型从多个前端(例如Tensorflow,ONNX,MXNet)部署到多个硬件平台(例如CPU,GPU,加速器)。此问题最关键的性能部分,为不断增长的模型体系结构和硬件平台获得高性能的内核实现。
为了应对这一挑战,TVM采用了全栈编译器方法。TVM结合了代码生成和自动程序优化功能,以生成可与经过大量手动优化的库相媲美的内核,从而在包括ARM CPU,Intel CPU,Mali GPU,NVIIDA GPU和AMD GPU在内的硬件平台上获得了最新的推理性能。
本文展示了TVM编译器堆栈中自动内核优化的工作流程,以及几种硬件平台上的基准测试结果。
系统总览

图1.系统概述
TVM中的内核优化以迭代循环的方式完成。如图1所示,自动内核优化将来自前端框架的神经网络(通常以计算图表示形式)作为输入,并为该网络中的所有算子生成内核。
内部循环使用可伸缩的RPC运行时,基于机器学习的调谐器和张量编译器。在循环的每一轮中,调谐器都会从较大的搜索空间中,选择一批有前途的候选内核实现,将其配置在实际硬件上。然后,调谐器将获得性能分析结果。这些分析结果用作训练数据,以适合预测模型。拟合预测模型后,调谐器根据预测,选择下一个有前途的候选者,然后循环继续进行。这样,迭代地快速搜索内核。
下图比较了传统的自动调谐和AutoTVM。主要区别在于AutoTVM
• 可扩展到异构设备集群
• 学习使用可转移的机器学习成本模型优化张量程序

图2.传统自动调整和AutoTVM的比较
开始调整
为了演示,在ARM开发板RK3399上对resnet-18进行了优化。本文篇幅限制,省略了详细说明。本文结尾处均提供了有关ARM CPU,Mali GPU,NVIDIA GPU,AMD GPU帮助的链接。
首先,从MXNet模型库中获得了预训练的模型,然后从中提取调整任务。
from mxnet.gluon.model_zoo.vision import get_model

block = get_model(‘resnet18_v1’, pretrained=True)
net, params = nnvm.frontend.from_mxnet(block)

tasks = autotvm.extract_from_graph(net)
tune_tasks(tasks, **tuning_option)
resnet-18中有12个不同的conv2d层,因此启动了12个调整任务。调谐器针对它们中的每一个进行数百次试验,并挑选最佳试验。完成所有调整任务后,将编译整个网络并生成一个可部署的最小库。一个样本输出是
Extract tasks…
Tuning…
[Task 1/12] Current/Best: 22.37/ 52.19 GFLOPS | Progress: (544/1000) | 406.59 s Done.
[Task 2/12] Current/Best: 6.51/ 18.77 GFLOPS | Progress: (608/1000) | 325.05 s Done.
[Task 3/12] Current/Best: 4.67/ 24.87 GFLOPS | Progress: (480/1000) | 372.31 s Done.
[Task 4/12] Current/Best: 11.35/ 46.83 GFLOPS | Progress: (736/1000) | 602.39 s Done.
[Task 5/12] Current/Best: 1.01/ 19.80 GFLOPS | Progress: (448/1000) | 262.16 s Done.
[Task 6/12] Current/Best: 2.47/ 23.76 GFLOPS | Progress: (672/1000) | 563.85 s Done.
[Task 7/12] Current/Best: 14.57/ 33.97 GFLOPS | Progress: (544/1000) | 465.15 s Done.
[Task 8/12] Current/Best: 1.13/ 17.65 GFLOPS | Progress: (576/1000) | 365.08 s Done.
[Task 9/12] Current/Best: 14.45/ 22.66 GFLOPS | Progress: (928/1000) | 724.25 s Done.
[Task 10/12] Current/Best: 3.22/ 15.36 GFLOPS | Progress: (864/1000) | 564.27 s Done.
[Task 11/12] Current/Best: 11.03/ 32.23 GFLOPS | Progress: (736/1000) | 635.15 s Done.
[Task 12/12] Current/Best: 8.00/ 21.65 GFLOPS | Progress: (1000/1000) | 1111.81 s Done.
Compile…
Upload…
Evaluate inference time cost…
Mean inference time (std dev): 162.59 ms (0.06 ms)
如果模型具有一些奇怪的形状或硬件是自定义的,则该调整特别有用,手动优化的静态库无法考虑所有情况。
基准结果
预先调整了设备群集上的一些流行网络,并发布了以下基准测试。复制说明在本文的末尾。
由于具有统一的运行时界面,因此对TVM进行全面基准测试很容易。但是,如果没有许多其它项目的开发人员的专家协助,与所有其他平台进行完整,最新和正确的比较是不可行的。因此,将所有数字都放在一个表中,然后与其它一些库进行不完全的比较。
比较
通过与每个平台上经过高度优化的传统库进行比较,验证了自动优化堆栈的有效性。
在ImageNet(3x224x224)数据集上测试了流行的图像分类网络,批处理大小= 1,数据类型= float32。报告的数字是每张图像的时间成本(以毫秒为单位)。
ARM CPU
选择NCNN(一个广泛使用的,手动优化的内核库)作为基准。大量使用NEON集成说明。例如,代码库仅针对3x3卷积层包含 13,000行代码。项目存储库中引用基准编号。如下图所示,TVM在Rasbperry Pi 3B上的所有网络上均胜过它。

马里Mali GPU
ARM Compute Library是供应商提供的库,它很好地支持Mali GPU(OpenCL)。由于卷积层的优势,TVM在ResNet和MobileNet中提供了更强大的性能。TVM在vgg-16上落后一些,因为vgg-16是一个古老而庞大的网络,并且具有多个大型密集层。

NVIDIA GPU
在NVIDIA GPU上,CuDNN和TensorRT分别是两个供应商提供的用于训练和推理的库。由于专注于推理,因此在无限制的环境中运行基准测试。另一个张量编译器PlaidML也被报告为基线,因为与AutoTVM之前的TVM版本相比,具有以前的基准。从PlaidBench参考基准测试结果。根据以下结果,TVM与TensorRT性能达到同等水平。

AMD GPU
还将快速介绍一下AMD GPU。TVM支持OpenCL和ROCm后端。发现ROCm更好,更专门用于AMD GPU。MIOpen是供应商提供的内核库。TVM的图形运行时可以直接调用MIOpen的内核实现,通过使用此集成来报告基线性能。
没有对AMD GPU进行任何特定的优化。NVIDIA GPU的所有计算定义和计划代码都可以直接重用。结果,在大多数情况下,TVM比MIOpen慢一些,仍有改进的空间。

所有的结果
在ImageNet(3x224x224)数据集上测试了以下网络,批处理大小= 1,数据类型= float32。报告的数字是每张图像的时间成本(以毫秒为单位)。

• 注1:该板上的内存不足。
• 注意2:由于时间限制,没有在GPU上调整某些小型网络。如果无法提供分析数据,TVM可以使用后备代码生成。但是在这种情况下,不能保证具有竞争性的性能。
结论
借助富有表现力的代码生成器和高效的搜索算法,能够生成与经过手动优化的内核相当的内核。由于程序的时间很昂贵,而机器的时间也越来越便宜,因此相信在循环中使用实际硬件和数据进行自动优化,将是推理部署的标准工作流程。TVM只是提供了这样的解决方案。
参考链接
[1] benchmark: https://github.com/dmlc/tvm/tree/master/apps/benchmark
[2] Tutorial on tuning for ARM CPU: https://tvm.apache.org/docs//tutorials/autotvm/tune_nnvm_arm.html
[3] Tutorial on tuning for Mobile GPU: https://tvm.apache.org/docs//tutorials/autotvm/tune_nnvm_mobile_gpu.html
[4] Tutorial on tuning for NVIDIA/AMD GPU: https://tvm.apache.org/docs//tutorials/autotvm/tune_nnvm_cuda.html
[5] Paper about AutoTVM: Learning to Optimize Tensor Program
[6] Paper about Intel CPU (by AWS contributors) : Optimizing CNN Model Inference on CPUs

硬件平台上深度学习自动内核优化相关推荐

  1. CUDA上深度学习模型量化的自动化优化

    CUDA上深度学习模型量化的自动化优化 深度学习已成功应用于各种任务.在诸如自动驾驶汽车推理之类的实时场景中,模型的推理速度至关重要.网络量化是加速深度学习模型的有效方法.在量化模型中,数据和模型参数 ...

  2. NVIDIA GPUs上深度学习推荐模型的优化

    NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...

  3. 深度学习自动编译和优化技术调研

    深度学习自动编译和优化技术调研 转自:https://moqi.com.cn/blog/deeplearning/ 作者:墨奇科技全栈开发 在墨奇科技,我们需要将一些包含深度神经网络(DNN)的 AI ...

  4. 在深度学习模型的优化上,梯度下降并非唯一的选择

    如果你是一名机器学习从业者,一定不会对基于梯度下降的优化方法感到陌生.对于很多人来说,有了 SGD,Adam,Admm 等算法的开源实现,似乎自己并不用再过多关注优化求解的细节.然而在模型的优化上,梯 ...

  5. 深度学习分布式策略优化、显存优化、通信优化、编译优化综述

    综述 因为我个人最近在从事可能是AI领域对性能挑战最大的方向,自动驾驶领域,所以对整个深度学习训练的优化尤为关注,最近一直在学习相关内容,谨以此篇文章做一个总结. 我一直很看好深度学习训练优化这个方向 ...

  6. 基于NVIDIA GPUs的深度学习训练新优化

    基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...

  7. 深入云原生 AI:基于 Alluxio 数据缓存的大规模深度学习训练性能优化

    作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...

  8. 阿里云原生实践:基于 Alluxio 数据缓存的大规模深度学习训练性能优化

    导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7年的不断开发迭代,支撑大数据处理场景的数据统一管理和高效缓存功能日趋成熟.然而,随着云原生人工智能(Clou ...

  9. 【AI不惑境】AutoML在深度学习模型设计和优化中有哪些用处?

    大家好,这是专栏<AI不惑境>的第十二篇文章,讲述AutoML在深度学习模型设计和优化相关的内容. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模 ...

最新文章

  1. mysql etc_mysql etc下my.conf配置详情
  2. 洪小文: 今天的AI只是一个黑盒,仍需与HI密切配合
  3. 《C语言程序设计与实践(第2版)》——3.2 数据类型
  4. 【UER #8】打雪仗
  5. vue打包后css路径_Vue打包后访问静态资源路径问题
  6. 打造微量元素产业-丰收节交易会·李喜贵:签约南国健康产业
  7. Yii框架 ajax案例
  8. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp
  9. 中华黑豹增强版木马分析
  10. Spring源码分析笔记--AOP
  11. IBM SPSS Statistics定义变量使用介绍
  12. Java代码校验银行卡号
  13. Overland Conveyor Belt Analyst 15.0.19.zip
  14. (转)鲶鱼理论、鲶鱼效应
  15. android 一分钟倒计时动画,Android利用属性动画自定义倒计时控件
  16. 【Redis学习】:string数据类型详解
  17. XDP-syncookie实现方式
  18. emplace_back不能取代push_back的情况
  19. 英雄之舞 | 迷踪“安可心”
  20. MySQL索引原理和引擎

热门文章

  1. 2022-2028年中国散热产业深度调研及投资前景预测报告(全卷)
  2. Ubuntu 安装 ffmpeg
  3. 利用cre2进行分组模式匹配的实例
  4. 不要纠结于过去发生的事
  5. pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax
  6. jieba中文分词源码分析(四)
  7. Lock、ReentrantLock、ReentrantReadWriteLock原理及应用深入解析
  8. 使用最新版(2020)IntelliJ IDEA 新建 Spring Boot 2.0 项目
  9. LLVM Clang前端编译与调试
  10. camera数字降噪(DNR)