点击上方“视学算法”,选择加"星标"或“置顶”

重磅干货,第一时间送达

者:袁进辉

https://zhuanlan.zhihu.com/p/117269565

本文已由原作者授权,不得擅自二次转载

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. TorchFusion 是一个深度学习框架,主要用于 AI 系统加速研究和开发

    TorchFusion 是一个深度学习框架,主要用于 AI 系统加速研究和开发. TorchFusion 基于 PyTorch 并且完全兼容纯 PyTorch 和其他 PyTorch 软件包,它供了一 ...

  2. 从头搭建一个深度学习框架

    从头搭建一个深度学习框架 转自:Build a Deep Learning Framework From Scratch 代码:https://github.com/borgwang/tinynn 当 ...

  3. 手把手实现一个深度学习框架(附代码实现)

    编辑丨极市平台 转载 | 深度学习初学者 来源丨https://zhuanlan.zhihu.com/p/78713744 当前深度学习框架越来越成熟,对于使用者而言封装程度越来越高,好处就是现在可以 ...

  4. 手把手教你如何自己设计实现一个深度学习框架(附代码实现)

    作者丨王桂波@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/78713744 编辑丨极市平台 导读 本文首先从深度学习的流程开始分析,对神经网络中的关键组件抽象,确定 ...

  5. 大佬评清华Jittor,这是怎样一个深度学习框架?

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 如何评价清华大学发布的自研深度学习框架-计图(Jittor)? 2020年3月20 ...

  6. 如何评判一个深度学习框架?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目前,国内有多个深度学习框架开源,OneFlow也在为开源做最后的 ...

  7. np实现sigmoid_使用numpy实现一个深度学习框架

    为了理解深度学习框架的大致机理,决定使用numpy实现一个简单的神经网络框架 深度学习框架我觉得最重要的是实现了链式求导法则,而计算图就是建立在链式求导法则之上的,目前大多数深度学习是基于反向传播思想 ...

  8. 百炼成钢!自己动手写一个深度学习框架!

    2020年的AI算法岗竞争究竟多惨烈?这两年AI大火,还被顺势纳入了新基建的队伍,算法岗的平均薪资水平远超传统开发岗一大截,高薪+前景好,自然吸引越来越多技术人员转去AI工程师方向. 再加上跨专业和高 ...

  9. 3天,我用Python手撕了一个深度学习框架!

    人工智能如何学习?要看哪些书? 经常听到有粉丝问到这类的问题,其实,要想学习人工智能,你需要先搞懂什么是人工智能. 01  人工智能概念的提出 人工智能(Artificial Intelligence ...

最新文章

  1. java线程问题小结-----常见面试问题
  2. apache 目录网站显示indexs
  3. 计算机考试单元格,计算机等级考试技巧在Excel中如何对单元格进行设置?
  4. Memcached学习---(2)Linux Memcached 安装
  5. Go 1.15 正式发布;华为确认成立屏幕驱动芯片部门;微信 iOS 版 7.0.15 正式版发布| 极客头条
  6. select默认选中的option_技巧:MacOS 中 Option 键的隐藏功能
  7. 升级设置win2008r2开发环境,遇到问题小结
  8. 如何做一个有品位的程序员
  9. 2020年物联网平台调研报告
  10. 高通手机 进入 高通9008模式
  11. 计算机键盘音乐 卡农,巴赫键盘音乐
  12. 加密保护软件 WinLicense常见问题整理大全(六)
  13. POJ 1625 Censored! (AC自己主动机 + 高精度 + DP)
  14. 重要短信通知解决方案(短信通知+语音播报自动双呼)
  15. linux交互式进程初始化失败怎么办,电脑进入安全方式仍然显示交互式登录进程初始化失败...
  16. SLCP验厂辅导,工厂进行社会劳工整合项目(SLCP认证)验证的具体步骤是
  17. matlab中画出3d船舶,船舶运动仿真中航迹与船形图的应用(上)
  18. bootstrap 检验 法 原理_Stata:刀切法/留一法/Jackknife 简介
  19. 淘宝/天猫,1688,拼多多,京东店铺获取所有商品详情(api接口详情)
  20. 解决windows下C32ASM反汇编无法打开的问题

热门文章

  1. 在Vmware中安装Ubuntu
  2. mysql 亿级表count_码云社 | 砺锋科技-MySQL的count(*)的优化,获取千万级数据表的总行数 - 用代码改变世界...
  3. 炸裂!微软重磅推出混合现实平台 Mesh、基于 Excel 的低代码语言 Power Fx,Ignite 2021 太精彩!...
  4. 身限辞退风波,Google AI 掌门人 Jeff Dean 不误折桂 IEEE 冯诺依曼奖
  5. 数据安全引担忧?get它,让你吃一颗“定心丸”
  6. 十大机器智能新型芯片:华为抢占一席,Google占比最多
  7. 说出来你可能不信,现在酒厂都在招算法工程师
  8. 百度自动驾驶新突破:获首批T4牌照,升级Apollo 5.0,将进行复杂城市场景路测...
  9. AI一分钟 | 富士康押宝人工智能,将投资21亿元用于AI研发
  10. ​“后进生”数学学科上演完美逆袭,成最具竞争力专业之一