点击上方↑↑↑“视学算法”关注我

来源:公众号 新智元 授权

作者:袁进辉

编辑:元子

【导读】一个框架好与不好,是有很多维度去看待的,使用者和框架开发者的关注点可能就不一样。深度学习框架发展到今天,有些功能已经变成常规需求了,一个后出现的框架要追求成功,仅仅没有短板还不够,还必须有长板,独门功法,有超越于其它框架的地方

3月份,国内有多个深度学习框架开源,OneFlow也在为开源做最后的准备,2020是深度学习框架领域非常热闹的一年。一个框架好与不好,是有很多维度去看待的,使用者和框架开发者的关注点可能就不一样。

框架的用户和开发者心态迥异,关注点完全不同

对于绝大部分框架用户来说,不会深度入到框架内部实现中去,反而使用体验是第一位的,文档和案例是否齐全,能否按照README就可以非常容易完成初体验。

而对于框架开发者来说,就是另一种心态。如果他正在框架研发,看到一个新框架,首先是去看,自己的独门秘技在这个新框架中是怎么解决的,是否已经实现了,实现的是否高明;然后马上去看,对方有没有什么独门功法可供自己学习的。

当然,对于框架的成功来说,从用户角度去看绝对是最重要的,框架开发者做抉择时,用户需求应高于技术审美。在这篇文章中,我重点从框架开发者角度来分享一些我个人在技术上的关注点。先讨论如何从总体上评估一个框架,然后再分具体课题来深入框架内部细节。

框架发展越来越完善,长江后浪如何超越前浪?

深度学习框架发展到今天,有些功能已经变成常规需求了,譬如易用,高效,完备(算子、模型、配套工具链、文档、案例),一个新的框架在这些方面应该没有明显的短板。一个后出现的框架要追求成功,仅仅没有短板还不够,还必须有长板,独门功法,有超越于其它框架的地方,或者其它框架根本做不到,或者很难做到,只有这样,才有可能先从细分市场切开一个小口,进而站稳脚本。

创新点是我首先关注的问题。框架开发者自身作为技术极客,对创新这一点极为珍视,如果没有思路上的突破,仅仅是按老路重新造个轮子来说,是引发不了技术高手的兴趣的,这是小同行非常关心的一个问题:这个新的框架给框架类产品带来了什么增量,也就是创新的部分。同时,创新对框架成功也至关重要。Caffe和Theano是框架的鼻祖,分别都贡献了一些最原始的思路。TensorFlow和MXNet都以更高的工程质量(工业级)把计算图抽象推向一个新高度,二者相对于Caffe而言主要是引入了计算图抽象,相对于Theano而言,主要是高质量C++实现带来效率和扩展性。PyTorch则成功引入了Eager执行的模式, 而且实现了Python的无缝衔接(严格来说Chainer是最早推行这个思路的框架,被PyTorch发扬光大)。国产深度学习框架要杀出重围,大的思路创新绝对是首要因素。微创新不足以改变格局,而且还容易被学习和抄袭。

工程质量是我关注的第二个问题。工程质量不过关,不会走的很远。有时能看到一些对项目评价,“学生作品”还是“工业级代码”,这是有一定根据的。可以从多个层次来考察,从大到小,譬如设计,架构,模块,模式,抽象,直至微观的某个算法实现,讲究恰到好处,尤其注意不要over engineering,增之一分则太肥,减之一分则太瘦;也可以从代码美观角度来看,譬如google style,clang-format,cpplint等工具的使用;还有一个考察角度是,这份代码基础是否适合大规模协作开发,代码量虽然很大,高质量代码仍是非常容易被理解的,以及代码基础是否引入了一些约束规范,譬如防御式编程,能防范一些低级错误。代码实现是程序员思想的体现,写出漂亮代码的前提是,要有一个清澈的大脑和对问题本质的深入思考。

深度学习框架应该关注的三个问题

和深度学习框架相关的一些具体技术实现是我关注的第三个问题。包含的问题有:

(1)深度学习框架都使用了数据流抽象(Eager模式是控制流),我会看看这个框架是怎么支撑这个抽象的,算子,图,流等怎么实现的,怎么定义算子,怎么实现多数据类型、多设备的Kernel,计算图是怎么实现的等等。

(2)计算图通过底层引擎来执行,一般的原理是,给定一个计算图,按照数据依赖拓扑遍历,这是最基本的实现,如果底层设备是CPU,那么执行引擎就是线程池,需要关注Dispatcher和线程池如何交互的,如果底层设备是GPU, Dispatcher和底层设备是如何交互的,因为GPU自身特点,对stream, event的运用是关键。

(3)内存是怎么管理的,静态图引擎可以做很多内存管理的技术,模型推理基本是静态图,因此Inference framework对静态内存管理体验是最深的,不需要为每个blob单独去做内存分配,可以为整个图分配一块内存;动态图的内存管理怎么做,垃圾回收,生命周期管理等等也是很复杂的问题;亚线性内存分配,以及微软的Zero也属于内存优化技术之列。

(4)接口易用性问题,动态图和静态图运行方式的支持,实际上主要涉及c++和python交互的问题。

(5)单设备代码编译优化问题,主要涉及设备无关的图优化,业界既有专门做这项工作的编译器,譬如Glow, XLA,TVM Relay,一些深度学习框架也包含了此类优化,譬如Paddle, MegEngine。

(6)设备相关代码优化的解决办法,即代码生成,TVM, Jittor, PlaidML属于此列。

(7)对分布式并行的解决思路,譬如对数据并行,模型并行,流水并行的支持;即使单纯看数据并行,也有一系列办法,譬如PS,Ring allreduce, double tree allreduce,业界的实现包含NCCL, 字节跳动的BytePS,微软的DeepSpeed等。

(8)其它待补充。

如果既有大的思路创新,也在以上各方面都做的很棒,那就很接近技术上的完美了。

本文授权转载自袁进辉的知乎专栏

深度学习框架大战,我该选哪个?相关推荐

  1. TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择

    [AI创新者]TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择 AI创新者 Google 人工智能 深度学习 TensorFlow 阅读5774  [AI创新者]是CSDN人工智能 ...

  2. TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比

    2019独角兽企业重金招聘Python工程师标准>>> TensorFlow和Caffe.MXNet.Keras等其他深度学习框架的对比 博客分类: 深度学习 Google 近日发布 ...

  3. 深度学习框架比较(Caffe, TensorFlow, MXNet, Torch, Theano)

    在这里,我将会介绍当前比较主流的5种深度学习框架,包括 Caffe, TensorFlow, MXNet, Torch, Theano,并对这些框架进行分析. 首先对这些框架进行总览. 库名称 开发语 ...

  4. 【AI创新者】TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择

    [AI创新者]是CSDN人工智能频道精心打造的专栏,本期主人公是PPmoney大数据算法总监黄文坚,他将为大家讲述Google深度学习框架TensorFlow以及他与唐源共同著作的<Tensor ...

  5. 如何从0-1构建自己的”pytorch“(自己专属的深度学习框架)——part01

    整体学习目标 建立属于你自己的深度学习框架 Python创建线性回归模型,L1损失函数,L2损失函数 参数初始化 掌握梯度下降算法,创建优化器函数 学会设置学习率以避免梯度爆炸 掌握多个常用激活函数, ...

  6. TensorFlow领衔,七大深度学习框架大对比!

    作者|黄文坚 唐源 编辑|小智 TensorFlow 在 2015 年年底一出现就受到了极大的关注,在一个月内获得了 GitHub上超过一万颗星的关注,目前在所有的机器学习.深度学习项目中排名第一,甚 ...

  7. 独家 | ​数据科学家必知的五大深度学习框架!(附插图)

    作者:Pulkit Sharma 翻译:陈之炎 校对:丁楠雅 本文约3900字,建议阅读10+分钟. 本文为大家分析并比较五种非常有用的深度学习框架的优点及应用. 概述 从出道起,我就一直是一名程序员 ...

  8. Keras vs PyTorch:谁是第一深度学习框架?

    「第一个深度学习框架该怎么选」对于初学者而言一直是个头疼的问题.本文中,来自 deepsense.ai 的研究员给出了他们在高级框架上的答案.在 Keras 与 PyTorch 的对比中,作者还给出了 ...

  9. DL-5 深度学习框架的对比

    在深度学习领域的五大巨头里,它们都各自力挺一种深度学习框架:像谷歌有自家的TensorFlow.Facebook有Torch.百度有Paddle Paddle.微软有CNTK.而亚马逊的AWS则有MX ...

最新文章

  1. 降低函数之间的耦合度
  2. 【ajax+php】动态展示4级单位(省、市、县、镇)
  3. 使用SeaJS实现模块化JavaScript开发【转】
  4. 多线程编程:阻塞、并发队列的使用总结
  5. 计算领域的致敬与前行
  6. STL学习笔记-set的基本原理以及插入、遍历
  7. 训练日志 2019.2.10
  8. JavaScript 代码判断:PC端和手机端
  9. 忘记win7登陆密码的问题解决2种可能以及其问题的延伸
  10. 2017,三大运营商的天猫芳华
  11. jQuery中的join方法
  12. ThinkPHP框架学习(一)
  13. 求最短路的多种方法比较及应用
  14. Linux 基础命令入门 man
  15. Markdown书写软件Typora的使用--图片上传(PicGo与Github/Gitee)及排版
  16. Matlab 向量的处理
  17. 〖每天学点管理〗——GTD时间管理
  18. 使用certbot完成证书的自动发放
  19. word2vec训练中文词向量
  20. 最详细的Excel模块Openpyxl教程——基础操作

热门文章

  1. Matlab数据的可视化 -- 视角与色彩控制
  2. 预告|开源操作系统年度技术会议
  3. 穿山甲发布聚合产品GroMore,为开发者变现赋能
  4. 百万美元技术大奖,雷军颁给了秒充和隐私保护技术团队
  5. 技术直播:程序员副业的修炼指南!(限免报名)
  6. AI四巨头Google、DeepMind、Microsoft、Uber深度学习框架大比拼
  7. 浪潮刘军:为什么说计算力是AI时代“免费的午餐”?
  8. 《评人工智能如何走向新阶段》后记(再续6)
  9. 不止于刷榜,三大CV赛事夺冠算法技术的“研”与“用”
  10. 阿里最新论文解读:考虑时空域影响的点击率预估模型DSTN