如何欣赏一个深度学习框架?
点击上方“视学算法”,选择加"星标"或“置顶”
重磅干货,第一时间送达
作者:袁进辉
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)其它待补充。
如果既有大的思路创新,也在以上各方面都做的很棒,那就很接近技术上的完美了。
麻烦给我一个在看!
如何欣赏一个深度学习框架?相关推荐
- TorchFusion 是一个深度学习框架,主要用于 AI 系统加速研究和开发
TorchFusion 是一个深度学习框架,主要用于 AI 系统加速研究和开发. TorchFusion 基于 PyTorch 并且完全兼容纯 PyTorch 和其他 PyTorch 软件包,它供了一 ...
- 从头搭建一个深度学习框架
从头搭建一个深度学习框架 转自:Build a Deep Learning Framework From Scratch 代码:https://github.com/borgwang/tinynn 当 ...
- 手把手实现一个深度学习框架(附代码实现)
编辑丨极市平台 转载 | 深度学习初学者 来源丨https://zhuanlan.zhihu.com/p/78713744 当前深度学习框架越来越成熟,对于使用者而言封装程度越来越高,好处就是现在可以 ...
- 手把手教你如何自己设计实现一个深度学习框架(附代码实现)
作者丨王桂波@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/78713744 编辑丨极市平台 导读 本文首先从深度学习的流程开始分析,对神经网络中的关键组件抽象,确定 ...
- 大佬评清华Jittor,这是怎样一个深度学习框架?
点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 如何评价清华大学发布的自研深度学习框架-计图(Jittor)? 2020年3月20 ...
- 如何评判一个深度学习框架?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目前,国内有多个深度学习框架开源,OneFlow也在为开源做最后的 ...
- np实现sigmoid_使用numpy实现一个深度学习框架
为了理解深度学习框架的大致机理,决定使用numpy实现一个简单的神经网络框架 深度学习框架我觉得最重要的是实现了链式求导法则,而计算图就是建立在链式求导法则之上的,目前大多数深度学习是基于反向传播思想 ...
- 百炼成钢!自己动手写一个深度学习框架!
2020年的AI算法岗竞争究竟多惨烈?这两年AI大火,还被顺势纳入了新基建的队伍,算法岗的平均薪资水平远超传统开发岗一大截,高薪+前景好,自然吸引越来越多技术人员转去AI工程师方向. 再加上跨专业和高 ...
- 3天,我用Python手撕了一个深度学习框架!
人工智能如何学习?要看哪些书? 经常听到有粉丝问到这类的问题,其实,要想学习人工智能,你需要先搞懂什么是人工智能. 01 人工智能概念的提出 人工智能(Artificial Intelligence ...
最新文章
- java线程问题小结-----常见面试问题
- apache 目录网站显示indexs
- 计算机考试单元格,计算机等级考试技巧在Excel中如何对单元格进行设置?
- Memcached学习---(2)Linux Memcached 安装
- Go 1.15 正式发布;华为确认成立屏幕驱动芯片部门;微信 iOS 版 7.0.15 正式版发布| 极客头条
- select默认选中的option_技巧:MacOS 中 Option 键的隐藏功能
- 升级设置win2008r2开发环境,遇到问题小结
- 如何做一个有品位的程序员
- 2020年物联网平台调研报告
- 高通手机 进入 高通9008模式
- 计算机键盘音乐 卡农,巴赫键盘音乐
- 加密保护软件 WinLicense常见问题整理大全(六)
- POJ 1625 Censored! (AC自己主动机 + 高精度 + DP)
- 重要短信通知解决方案(短信通知+语音播报自动双呼)
- linux交互式进程初始化失败怎么办,电脑进入安全方式仍然显示交互式登录进程初始化失败...
- SLCP验厂辅导,工厂进行社会劳工整合项目(SLCP认证)验证的具体步骤是
- matlab中画出3d船舶,船舶运动仿真中航迹与船形图的应用(上)
- bootstrap 检验 法 原理_Stata:刀切法/留一法/Jackknife 简介
- 淘宝/天猫,1688,拼多多,京东店铺获取所有商品详情(api接口详情)
- 解决windows下C32ASM反汇编无法打开的问题
热门文章
- 在Vmware中安装Ubuntu
- mysql 亿级表count_码云社 | 砺锋科技-MySQL的count(*)的优化,获取千万级数据表的总行数 - 用代码改变世界...
- 炸裂!微软重磅推出混合现实平台 Mesh、基于 Excel 的低代码语言 Power Fx,Ignite 2021 太精彩!...
- 身限辞退风波,Google AI 掌门人 Jeff Dean 不误折桂 IEEE 冯诺依曼奖
- 数据安全引担忧?get它,让你吃一颗“定心丸”
- 十大机器智能新型芯片:华为抢占一席,Google占比最多
- 说出来你可能不信,现在酒厂都在招算法工程师
- 百度自动驾驶新突破:获首批T4牌照,升级Apollo 5.0,将进行复杂城市场景路测...
- AI一分钟 | 富士康押宝人工智能,将投资21亿元用于AI研发
- ​“后进生”数学学科上演完美逆袭,成最具竞争力专业之一