[摘录理由]:

  之所以摘录本文,主要原因是:该文配有开源代码(https://github.com/dmlc/nnvm);读者能够直接体会文中所述的意义,便于立刻展开研究。

MXNet专栏 :NNVM打造模块化深度学习系统

2016-10-01

作者:陈天奇    

 

本文是机器之心 MXNet 系列专栏的第一篇,作者是 MXNet 的打造者之一陈天奇。MXNet 专栏是机器之心之后将发表的系列文章,包括 MXNet 打造者的人物专访、技术博客等,敬请期待!

这是一个深度学习的大航海时代,不仅算法和应用日新月异,深度学习硬件发展势头也很迅猛。虽然目前主流硬件是 Nvidia GPU,但 Intel 也试图通过下一代 Xeon Phi 摇头赶上。而在用于汽车自动驾驶和智能硬件的低功耗深度学习硬件上,多家公司在同时发力。深度学习计算框架也是百花怒放,既有成名已久的 Torch 和 Caffe,也有一年前开源就名声大噪的 TensorFlow 和刚刚公开的 PaddlePaddle。我们 DMLC 小伙伴也在上面耕耘了好几年,从早期的 CXXNet, Minerva 和 Purine 到现在用户稳步增长的 MXNet,深刻的感受到了技术的变革。

我们也一直在琢磨,我们需要什么样的技术和系统来更好的服务未来几年深度学习的发展。为了弄清这个问题,我们先来大胆预测下未来深度学习需要什么样的编程和计算环境。

虽然大家都说深度学习能火归功于数据量大和计算能力的提升,但我们觉得它能够在众多领域上快速铺开,更主要得益于它的灵活性。反过来看传统机器学习,每个算法都是针对特定的应用,例如 SVM 主要是对分类,输入一个定长向量得到一个类别标量。大家的发挥余地基本是在特征的抽取上。而深度学习则可以是更多样的输入和输入,例如任意维度的张量,甚至大小都是可以变化。同时模型设计上也很灵活,更宽?更深?空间还是时间?更加精巧的内部连接?从这一点上,深度学习其实是一种语言,我们通过它来描述对问题的理解。

这个灵活性必然导致了深度学习框架前端用户接口的多样化。而且这个趋势肯定是越来越剧烈。因为随着进入这个领域的人越来越多,大家关注的应用各不相同,熟悉的编程语言又各不一样,所以很难会有一个统一的前端语言来满足这些要求。所以我们觉得深度学习的前端很有可能像编程语言那样,风潮涌动。

另一方面,深度学习应用需要大量的计算,目前没有,甚至未来几年内也不会有单一的硬件架构解决所有需求。所以必然是根据场景选择不同的硬件。例如 GPU 适合模型训练,CPU 由于大量存在也经常用作云端模型预测,但很多厂商也开始走 FPGA 路线。ARM 主要用在手机等低功耗的场景上,但很可能很快就会被定制的 FPGA/ASIC 取代。

不同硬件需要不同的优化。例如 GPU 计算单元多,需要算法并行度高,而 ARM 通常内存小而且结构复杂,需要重点优化。而定制化硬件则有更多的特殊打开方式。

所以在前端和后端都在快速发展的今天,要求每一个前端都对每个硬件做更好的支持明显是不能可持续发展的。所以我们要更好的解决方案。

幸运的是历史总是在重复。如果我们往回看,会发现我们曾面临一样的问题。当年编程语言层出不穷,CPU 架构也不断翻新,于是大名鼎鼎的 LLVM 横空出世,通过很好的模块化分离前后端,为新语言和新硬件提供和非常好的支持。

对于深度学习,我们需要类似的项目。学习 LLVM 的思想,我们将其取名 NNVM。他的工作原理如下所示:

示意图

前端把计算表达成一个中间形式,通常我们称之为计算图,NNVM 则统一的对图做必要的操作和优化,然后再生成后端硬件代码。简单地说, NNVM 是一个神经网络的比较高级的中间表示模块,它包含了图的表示以及执行无关的各种优化(例如内存分配,数据类型和形状的推导)。

设计这样一个模块最困难的地方并不是加入新的功能,而是可以在支持新的功能的情况下保持最小的接口,零依赖但是可以扩展未来可能可以想要的各种需求。我们总结了主流的深度学习框架 (TF, caffe2, MXNet) 的 operator 接口设计,设计了一个简洁但是扩展性极强的计算图结构和优化接口。利用这些模块,我们可以很容易地加入新的功能,或者删除我们不需要的功能来组合新的执行框架。

在第一阶段,我们通过把 MXNet 的符号执行模块转移到 NNVM,验证了接口的可靠性。未来我们会给 NNVM 加入更多的执行后端和优化。作为机器学习系统研究人员,我们也会基它来进行深度学习系统优化研究的探索。对于深度学习系统有兴趣的同学不妨一起来参与贡献代码。我们可以利用 NNVM 来很容易地为新的机器学习系统生成各种前端,并且复用通用的优化用以方便地实现各种后端。

目前 NNVM 发布在 https://github.com/dmlc/nnvm。我们相信可以模块化各个部件,从而可以相互组装成满足各种需求的深度学习平台,使得更好的适应未来算法,应用,前端编程环境,后端硬件的高速发展。这是一个 开始,相信未来会有更多更加灵活,模块化和通用的组件出现,使得大家轻松打造深度学习平台不再是一个不可能的事情。

不知道如何使用? 我们同时开放了一个两千行代码的样例项目,教你如何从头开始打造一个和 TensorFlow 一样 API 的深度学习系统 https://github.com/tqchen/tinyflow。

NNVM打造模块化深度学习系统(转)的更多相关文章

  1. SpeeDO —— 并行深度学习系统

    SpeeDO —— 并行深度学习系统   摘要: 最近,AlphaGo又带起了一波深度学习的热潮.深度学习在很多领域都大幅提高了模型的精度,使得很多以前在实验室中的技术得以运用到日常的生活之中.然而, ...

  2. Google会思考的深度学习系统

    上周五在旧金山举行的机器学习会议上,Google软件工程师Quoc V. Le讲解了Google的"深度学习"系统是如何运作的. "深度学习"需要用到大型计算机 ...

  3. 《TensorFlow学习指南深度学习系统构建详解》英文PDF+源代码+部分中文PDF

    主要介绍如何使用 TensorFlow 框架进行深度学习系统的构建.涉及卷积神经网络.循环神经网络等核心的技术,并介绍了用于图像数据和文本序列数据的模型.给出了分布式深度学习系统在TensorFlow ...

  4. 由微软打造的深度学习开放联盟ONNX成立

    导读 如今的微软已经一跃成为全球市值最高的高科技公司之一.2018年11月底,微软公司市值曾两次超越了苹果,成为全球市值最高的公司,之后也一直处于与苹果胶着的状态.市场惊叹微软是一家有能力改造自己并取 ...

  5. 从0开始配置ubuntu深度学习系统

    目录 个性化配置 ubuntu安装及其分区 NVIDIA驱动安装 配置使用清华源 安装shadowsocks-qt 安装chrome 安装gdebi 安装atom 安装wps 安装sogou piny ...

  6. 斯坦福新深度学习系统 NoScope:视频对象检测快1000倍

    以作备份,来源http://jiasuhui.com/archives/178954 本文由“新智元”(微信ID:AI_era)编译,来源:dawn.cs.stanford.edu,编译:刘小芹 斯坦 ...

  7. (转)分布式深度学习系统构建 简介 Distributed Deep Learning

    HOME ABOUT CONTACT SUBSCRIBE VIA RSS   DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...

  8. 谷歌发布了 T2T(Tensor2Tensor)深度学习开源系统

    谷歌开源T2T模型库,深度学习系统进入模块化时代! 谷歌大脑颠覆深度学习混乱现状,要用单一模型学会多项任务 https://github.com/tensorflow/models https://g ...

  9. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

随机推荐

  1. Visual Studio+TFS--强大的项目管理工具

    一.前言 微软的Visual Studio非常强大,可以无缝结合Git或自家的TFS(Team Foundation Server),进行项目管理非常方便,从需求分析.开发.测试.维护,几乎可以贯穿软 ...

  2. Ionic页面加载前 ionic页面加载完成 ionic页面销毁执行的事件

    ionic 中$ionicView.beforeEnter(页面刚加载前)  $ionicView.afterEnter  (页面加载完成) $destroy(页面销毁) 广播事件 //ionic c ...

  3. Apache Tomcat 7 安装与配置

    下载 首先需要下载tomcat7的安装文件,地址如下: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomca ...

  4. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

  5. [zz] Principal Components Analysis (PCA) 主成分分析

    我理解PCA应该分为2个过程:1.求出降维矩阵:2.利用得到的降维矩阵,对数据/特征做降维. 这里分成了两篇博客,来做总结. http://matlabdatamining.blogspot.com/ ...

  6. 跨平台开发之阿里Weex框架环境搭建(一)

    转载自:http://www.cnblogs.com/fozero/p/5995122.html 一.介绍 Weex是阿里今年6月份推出的跨平台解决方案,6月底正式开源.官网 https://alib ...

  7. oracle之synonym小结

    oracle中的同义词可以认为是对表.视图.序列.存储过程.函数.程序包或者其他同义词的一个别名,也就是用一个别名来映射的作用. oracle中的同义词可以分为私有和公有两种,私有同义词(privat ...

  8. Android Studio 高级配置

    http://liukun.engineer/2016/04/10/Android-Studio-advanced-configuration/

  9. 廖雪峰JavaScript学习摘录

    一. 1.语法基础: (1)特别注意相等运算符==.JavaScript在设计时,有两种比较运算符: 第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果: 第二种是===比较 ...

  10. iOS开发 - OC - 实现本地数据存储的几种方式一

    iOS常用的存储方式介绍 在iOS App开发过程中经常需要操作一些需要持续性保留的数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.本文针对OC中经常使用的一下存储方式做了个整理. 常用 ...