热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习_深度学习框架多样化与DeepLearning的IR“之争”

本文由编程笔记#小编为大家整理,主要介绍了深度学习框架多样化与DeepLearning的IR“之争”相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了深度学习框架多样化与Deep Learning的IR“之争”相关的知识,希望对你有一定的参考价值。



# 深度学习框架多样化为AI开发带来的三个挑战:




  1. 对于算法的开发者来说,由于各AI框架的前端交互和后端实现之间都存在很多区别,换框架很麻烦,而开发和交付过程中可能会用到的框架不止一个。

    为了应对这个问题,之前Facebook和微软也联合发布了模型间转换工具ONNX。


  2. 深度学习框架的开发者需要维护多个后端,来保证自己的框架能适用于从手机芯片到数据中心GPU的各种硬件。


  3. 从芯片供应商的角度来看,他们每新开发一款芯片都需要支持多个AI框架,每个框架表示和执行工作负载的方式都不一样,所以,就连卷积这样一个运算,都需要用不同的方式来定义。支持多个框架,就代表要完成巨大的工作量。




# 那么,什么是IR呢?


深度学习框架多样化与Deep Learning的IR“之争”


简单来说,现在Deep Learning有这么多不同前端(开发框架),有这么多不同的后端(硬件架构),是否能找到一个桥梁更有效实现他们之间的优化和影射呢?IR(Intermediate representation,中间表示层)就是这样一座桥梁。


深度学习框架多样化与Deep Learning的IR“之争”


在当年软件产业中,面对大量不同的编程语言和越来越多的硬件架构,大名鼎鼎的LLVM的出现正解决了这个兼容问题。LLVM让不同的前端后端使用统一的 LLVM IR ,如果需要支持新的编程语言或者新的设备平台,只需要开发对应的前端和后端即可。


由此也可以看出,LLVM统一的IR是它成功的关键之一,也充分说明了一个优秀IR的重要性。




当然,IR本质上是一种中间表示形式,是一个完整编译工具的一部分。而我们下面讨论的TVM、XLA、Glow都是围绕特定IR构建的优化和编译工具。




1、NNVM


华盛顿大学,陈天奇团队在2016年发布NNVM,他提到:“...对于深度学习,我们需要类似的项目。学习 LLVM 的思想,我们将其取名 NNVM”。


随后,陈天奇团队联合Amazon又发布了TVM和NNVM compiler,,陈天奇把TVM + NNVM描述为“深度学习到各种硬件的完整优化工具链”,而NNVM compiler,是一个基于TVM工具链的编译器。


其中,NNVM模块用于计算图,TVM模块用于张量运算。


NNVM的目标是将不同框架的工作负载表示为标准化计算图,然后将这些高级图转换为执行图。


TVM提供了一种独立于硬件的特定域语言,以简化张量索引层次中的运算符实现。另外,TVM还支持多线程、平铺、缓存等。


NNVM compiler可以将前端框架中的深度学习模型直接部署到后端硬件,在高层图IR中表示和优化普通的深度学习工作负载,也能为不同的硬件后端转换计算图、最小化内存占用、优化数据分布、融合计算模式。


深度学习框架多样化与Deep Learning的IR“之争”


NNVM compiler,支持将包括Caffe/Caffe2、Keras、MXNet、PyTorch、CNTK等深度学习框架(具体来说,MXNet的计算图能直接转换成NNVM图),还支持微软和Facebook推出的ONNX,以及苹果的CoreML,并提供多级别联合优化。速度更快,部署更加轻量。


深度学习框架多样化与Deep Learning的IR“之争”


TVM模块,目前附带多个编码生成器,支持多种后端硬件,包括服务器、树莓派和多种移动式设备,以及OpenCL、Metal、CUDA等多种硬件后端。为X86和ARM架构的CPU生成LLVM IR,为多种GPU输出CUDA、OpenCL和Metal kernel。


NNVM compiler联合使用图级和张量级优化以获得较佳性能。常规的深度学习框架会将图优化与部署runtime进行打包,而NNVM编译器将优化与实际部署运行时分离。


采用这种方法,编译的模块只需要依赖于最小的TVM runtime,当部署在Raspberry Pi或移动设备上时,只占用大约300KB。 经过Raspberry Pi 3B上验证,NNVM编译器受益于直接生成高效的ARM代码,在MobileNet上有11.5倍的速度提升。




2、Google TensorFlow XLA


XLA的目标,其基本功能也是优化和代码生成。




Google TensorFlow XLA (Accelerated Linear Algebra)使用了LLVM IR。XLA (Accelerated Linear Algebra) is a domain-specific compiler for linear algebra that optimizes TensorFlow computations. The results are improvements in speed, memory usage, and portability on server and mobile platforms. Initially, most users will not see large benefits from XLA, but are welcome to experiment by using XLA via just-in-time (JIT) compilation or ahead-of-time (AOT) compilation. Developers targeting new hardware accelerators are especially encouraged to try out XLA.



深度学习框架多样化与Deep Learning的IR“之争”


LA具体的架构如图右半部分所示,可以看出,它也是两层优化的结构[5],使用LLVM用作low-level IR, optimization, and code-generation。由于使用了LLVM IR, 他可以比较容易的支持不同的后端(Backend)。下图就是使用GPU Backend的例子。


深度学习框架多样化与Deep Learning的IR“之争”


总的来说,XLA和TVM试图解决的问题类似。但XLA只是针对Google的Tensorflow的。而TVM/NNVM虽然是MxNe阵营,但试图作为一个开发和公共的接口。



3、Facebook Glow Compiler


Facebook组建团队做芯片已经不算新闻了,这次重点提到的Glow Compiler也是他们建立生态的重要一环。未来,PyTorch/Glow的组合有可能成为Google Tensorflow/XLA最有力的竞争对手。


Glow是一个基于LLVM的机器学习编译器,用于异构硬件,是PyTorch项目的一部分。这是一种实用的编译方法,可以为CPU,GPU和加速器生成高度优化的代码。Glow将传统的神经网络数据流图降低为两阶段强类型中间表示(受SIL启发)。最后,Glow发出LLVM-IR并使用LLVM代码生成器生成高度优化的代码。




Facebook现在宣布的是一套新的硬件合作伙伴,他们承诺在自己的产品中支持Glow。Cadence,Esperanto,Intel,Marvell和Qualcomm都致力于在未来的项目中支持Glow in silicon。




该软件不仅设计用于为单个给定架构生成代码 - Facebook计划支持来自多个公司的一系列专用机器加速器,并为多个供应商提供相应的性能改进。这种对硬件加速器的支持也不仅限于单一类型的操作。FB的新闻稿指出,编译器的硬件独立方面侧重于与任何特定模型无关的数学优化。Glow还附带线性代数优化器,基于CPU的参考实现(用于测试硬件精度),和各种测试套件。目标是减少硬件制造商将新设备推向市场所需的时间。


FB正在为Glow付出沉重的努力。该公司今年早些时候推出了其PyTorch深度学习框架的1.0版本,新的对象检测模型,用于语言翻译的库和用于自动合成机器学习内核的Tensor Comprehensions。




4、类似的想法还包括:Intel’s NGraph,HP的Cognitive Computing Toolkit (CCT), IBM的SystemML,Microsoft的Brainwave等。




随着Deep Learning的应用越来越广,大家越来越关心DNN在不同硬件架构上Training和Inference的实现效率。参考传统编译器(compiler)设计的经验,XLA和TVM/NNVM都开始了很好的尝试。而“IR”的竞争,将是未来Framework之争的重要一环。












参考:



  • AI Inference芯片 ∙ 血战开始:https://zhuanlan.zhihu.com/p/44671225


  • iPhone X & iPhone XS Max性能对比:A12表现亮眼!:http://www.pcpop.com/article/5048958.shtml


  • Deep Learning的IR“之争”:https://mp.weixin.qq.com/s?__biz=MzI3MDQ2MjA3OA==&mid=2247484317&idx=1&sn=70ddd439dc33f3e8a30579244695ce65&chksm=ead1fe8cdda6779afe88fe7a8dd2693d0aae9425dfe6a74b96fb63e78afb1c6d6786a30f2c1e&scene=21#wechat_redirect


  • 陈天奇团队发布NNVM编译器,性能优于MXNet,李沐撰文介绍:http://www.dataguru.cn/article-12239-1.html


  • Intel, Marvell, Qualcomm Pledge Support for Glow AI Compiler:http://www.extremetech.com/computing/276976-intel-marvell-qualcomm-pledge-support-for-glow-ai-compiler





推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 程序分析与优化9附录XLA的缓冲区指派
    本章是系列文章的案例学习,不属于正篇,主要介绍了TensorFlow引入的XLA的优化算法。XLA也有很多局限性,XLA更多的是进行合并,但有时候如果参数特别多的场景下,也需要进行 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
  • bat大牛带你深度剖析android 十大开源框架_请收好!5大领域,21个必知的机器学习开源工具...
    全文共3744字,预计学习时长7分钟本文将介绍21个你可能没使用过的机器学习开源工具。每个开源工具都为数据科学家处理数据库提供了不同角度。本文将重点介绍五种机器学习的 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
author-avatar
妩媚天天想我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有