百科问答小站 logo
百科问答小站 font logo



如何评价陈天奇的模块化深度学习系统NNVM? 第1页

  

user avatar   crowowrk 网友的相关建议: 
      

之前讨论过后更加意识到了@王健飞 所说的更好地支持更多平台的op调优的重要性。昨天我们发布了dmlc/tvm 来解决这部分问题。

-------

在几个月之后给了几个关于NNVM的报告,也思考了它和已有系统的差别。追加一下这一页slide,是我对于在抽象成面上面各个系统差别的理解。


原回答

-------
我是NNVM的作者。


总结一下,技术上本身的NNVM和现有的东西的差别是最小模块化和去中心化,降低深度学习系统优化门槛。除了为了解决现有问题,更多是为了未来考虑。


关于是否重复造轮子的问题,图表示和优化本身在MXNet就已经存在,楼上也提到TF也有对应的抽象,为什么我们需要重新写一遍呢,基本上也就是以上两点原因。


基本上现有的深度学习系统分成两块,1) 基本的operator的实现, 2)支撑其中的系统调度,优化,解释或者编译架构。


在工程难点上,operator需要堆代码,但是对于工程架构的难度上面而言相对较低(也就是说可以写的人比较多一些),但是需要堆比较大量的代码。而剩下的系统优化部分,内存,执行调度和分布式优化对于整体系统而言的难度相对高一些。Operator的集合问题虽然是一个问题,看已经有的成熟框架不论是Torch, Theano或者MXNet的operator完整程度基本上可以满足于大部分应用,也就是说这部分暂时属于已经解决或者可以通过堆积工程力量容易解决的问题。楼上说的最小化通用的 Op接口很重要,和NNVM我们考虑的方向垂直。我觉得相对干净的Op应该去推动成为一个独立的模块,而Op实现本身其实没有必要和框架耦合很深(虽然遗憾的是目前的设计暂时没有做到这一点)。


NNVM希望解决的是垂直于operator实现的问题。有趣的是其实TF在这一暂时没有花特别多的力气,所以会让人觉得operator是大头。其实这里有很多有趣的东西,在执行,调度和编译优化上面。编程模型和一个图本身的执行模式和硬件也会有更多的差异。


直接讨论一下设计,目前TF采取了单一的动态执行模式,使得本身执行特别依赖于动态内存分配以及threading。而这并非是大部分场景下的最优方案。大部分场景下基于对于有限的图进行的静态分配,可以更大的缓解这个问题,实际情况如MX本身的内存损耗可以做的更好。为什么目前TF不会出现多种执行模式呢,是因为TF本身Op的接口还是过于一般地针对的动态,而如果要更好的优化需要更细化的Op接口(分开内存分配和计算的部分),这就考虑到一个Op甚至可能有多种接口的可能性。


NNVM本身的图的设计参考了TF,MX和caffe2的图部分。楼上的评论基本上提到了几个非常重要的概念,即系统优化和Op具体的性息相关。但是和PL不同,我们不能直接简单的抽象出有限个操作来表示整个程序。这个时候似乎框架和Op会有比较强的关联性,导致比较大的耦合。但是也并非如此,因为每一个优化本身其实只依赖于Op的部分属性。比如有同学提到的常数折叠,其实需要知道的是一个Op是否是常数,以及如何去展开常数两个函数。NNVM本身的做法是允许注册这两个额外属性来允许常数折叠优化。但是当不需要这个优化的时候,可以直接去掉这一部分。使得深度学习的优化可以插拔。现在看起来可能有些overkill,但是我们相信未来深度学习系统在这方面会有很大的发展,允许不同的优化来自于不同群体和研究人员是我们更加喜欢的方式。


基于以上原因,NNVM允许给每个op注册任意的信息。并且可以使得属性和注册和op的实现分开。这相对于TF的op接口而言是一个进步的地方。TF内部的所有op属性是需要提前数据结构指定的,也就是说,目前TF可以注册shape inference, op的输入参数的个数,但是无法注册比如我们需要的新的细化Op接口,或者有些人关心的代码生成函数。如果需要加入这些特性,必须要修改Op的接口。这意味着所有的开发需要在一个中心,并且只能保留大家关心的东西。如果forkA有feature1, forkB有feature2的情况,forkB想要拿到 feature1就会比较不方便。因为NNVM允许不修改Op接口注册任意信息,相对解决了这个问题。


当然模块化和去中心化并非对于所有人都重要,就是见仁见智把。


未来的深度学习系统会有更多系统的问题,使得优化和执行更加多样化。我们不能够期待所有的优化都来自于一个团队,或者只应用于一个框架。更多的优化看起来会带来更多的耦合,但是也并非如此。

发布TinyFlow原因很简单。大部分人并没有意识到其实目前深度学习的“系统”部分可以通过简单抽象得到。TinyFlow作为一个教程性质的项目,可以用比较短的代码展示目前有的大部分优化概念,并且把Op的部分代理给Torch(因为Op本身虽然重要,但是并不作为架构一部分)。如果可以有更多的同学来关注深度学习系统优化,基本这个项目的目的就达到了。


值得承认的是,NNVM目前只是走出了第一步,只是包含了MXNet原有的一些优化,暂时内容不多,我们会继续带来更多好玩的东西。 我们也会继续坚持模块化和去中心化的思想,使得我们新的成果可以更好的用在各个平台里面


user avatar   thinxer 网友的相关建议: 
      

景甜:抱歉,是我选的他。




  

相关话题

  如何评价 DeepMind 的新工作 AlphaCode? 
  深度学习attention机制中的Q,K,V分别是从哪来的? 
  如果有第谷的数据,现在的机器学习,深度学习有办法学出开普勒三定律吗? 
  nlp有哪些值得完整实现一遍的算法? 
  2019年NeurIPS有哪些糟糕的论文? 
  如何评价浪潮发布的2457亿参数源1.0智能大模型?与GPT-3相比如何?处于AI模型领域什么水平? 
  自然语言处理怎么最快入门? 
  老师给了一个神经网络的程序,他之前是跑通了的,但是我迭代几十次或者一百多次就报错。这个怎么解决? 
  如何评价Google发布的第二代深度学习系统TensorFlow? 
  如何评价Google提出的MLP-Mixer:只需要MLP就可以在ImageNet上达到SOTA? 

前一个讨论
如何评价余凯在朋友圈发表呼吁大家用 caffe、mxnet 等框架,避免使用 TensorFlow?
下一个讨论
如何看待MXNet获得amazon官方支持首位?





© 2025-02-05 - tinynew.org. All Rights Reserved.
© 2025-02-05 - tinynew.org. 保留所有权利