如何判断一个深度学习框架的质量?

2020 年 3 月 27 日 极市平台

加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~


作者:袁进辉

知乎链接: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)其它待补充。


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




-END -

推荐阅读:


极市平台视觉算法季度赛,提供真实应用场景数据和免费算力,特殊时期,一起在家打比赛吧!



添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割等极市技术交流群,更有每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、行业技术交流一起来让思想之光照的更远吧~


△长按添加极市小助手


△长按关注极市平台,获取最新CV干货


觉得有用麻烦给个在看啦~  

登录查看更多
0

相关内容

深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
专知会员服务
80+阅读 · 2020年6月20日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
基于深度学习的多标签生成研究进展
专知会员服务
142+阅读 · 2020年4月25日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
110+阅读 · 2019年10月26日
业务中台:如何在互联时代,快速响应用户需求?
互联网er的早读课
24+阅读 · 2018年12月26日
如何匹配两段文本的语义?
黑龙江大学自然语言处理实验室
7+阅读 · 2018年7月21日
如何入门并成为一名出色的算法工程师?
Python 如何快速入门?
大数据技术
11+阅读 · 2018年4月9日
从基础概念到实现,小白如何快速入门PyTorch
机器之心
13+阅读 · 2018年2月26日
如何入门Python与机器学习 | 赠书
AI100
8+阅读 · 2017年11月14日
一招检验10大深度学习框架哪家强!
深度学习世界
3+阅读 · 2017年9月14日
【强化学习】强化学习入门以及代码实现
产业智能官
18+阅读 · 2017年9月4日
Arxiv
6+阅读 · 2018年8月27日
Large-Scale Study of Curiosity-Driven Learning
Arxiv
8+阅读 · 2018年8月13日
Arxiv
6+阅读 · 2018年3月29日
Arxiv
19+阅读 · 2018年3月28日
Arxiv
4+阅读 · 2017年11月14日
VIP会员
相关VIP内容
深度学习目标检测方法及其主流框架综述
专知会员服务
147+阅读 · 2020年6月26日
专知会员服务
80+阅读 · 2020年6月20日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
基于深度学习的多标签生成研究进展
专知会员服务
142+阅读 · 2020年4月25日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
110+阅读 · 2019年10月26日
相关资讯
业务中台:如何在互联时代,快速响应用户需求?
互联网er的早读课
24+阅读 · 2018年12月26日
如何匹配两段文本的语义?
黑龙江大学自然语言处理实验室
7+阅读 · 2018年7月21日
如何入门并成为一名出色的算法工程师?
Python 如何快速入门?
大数据技术
11+阅读 · 2018年4月9日
从基础概念到实现,小白如何快速入门PyTorch
机器之心
13+阅读 · 2018年2月26日
如何入门Python与机器学习 | 赠书
AI100
8+阅读 · 2017年11月14日
一招检验10大深度学习框架哪家强!
深度学习世界
3+阅读 · 2017年9月14日
【强化学习】强化学习入门以及代码实现
产业智能官
18+阅读 · 2017年9月4日
相关论文
Top
微信扫码咨询专知VIP会员