Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

袁进辉(老师木)作者杜佳豪运营

国产框架扎堆开源,老师木论「深度学习框架的灵魂」

在刚刚过去的2020年第3个月,多个深度学习框架相继开源。清华 Jittor、旷视 MegEngine、华为 Mindspore,再加上国内首个开源深度学习框架PaddlePaddle,「百花齐放」之后,是否会发展出具有世界影响力的深度学习框架?近日,一流科技创始人袁进辉在知乎文章《深度学习框架的灵魂》中给出了自己的看法。机器之心经授权对文章进行转载。


2020 年是中国深度学习框架年,清华 Jittor, 旷视 MegEngine, 华为 Mindspore 已经接连在 3 月份开源,一流科技的 Oneflow 也在为开源做着紧锣密鼓的准备。国内深度学习框架发展终于迎来了百花齐放的一天,下一步有没有可能发展出具有世界影响力的深度学习框架呢?无疑,道阻且长,影响因素错综复杂。

我前几天写过一篇题为《如何欣赏一个深度学习框架?》的文章,在文中表达了这样的观点:在百家争鸣的氛围下,技术创新性是框架是否能脱颖而出的决定因素。在那篇文章中,我指出了分析框架品质的三个方面:创新性,工程质量,各个模块的技术实现。后来又思考了一下,觉得对框架的分析可以更进一步,我们就在这里讨论讨论一个深度学习框架的灵魂。

任何一件产品都有灵魂,从设计思想到每一处细节,都是这个产品灵魂的表现。一幅画,一本书,一部电影,都在向外传递着坐着的个性主张,同样是暴力美学电影,北野武,杜琪峰,昆汀达伦提诺执导的作品也各不相同。一件电子产品,体现了打造者对产品的想象和热情(如果有的话),这些个性特征也决定了产品的成败。苹果的产品,鲜明地体现了以乔布斯为代表的设计及研发团队的追求;同样作为智能手机,功能类似,但设计不同,即使是抄袭苹果的设计,在制造上仍可能无法像苹果一样做到极致,一部手机有成千上万的细节,苹果可以做到倾尽所有资源把全部细节做好。手机上的每一个 APP,也有自己的灵魂,没有人不喜欢微信,微信体现了张小龙产品设计的克制和内敛,绝不乱打扰用户,用完即走,用户感觉到被尊重,没有冷酷和傲慢。

软件系统也有灵魂。软件的灵魂来自背后研发团队对需求的理解,团队的组织结构,团队的审美和价值观。我觉得,Frederick Brooks 的《人月神话》一书,对复杂软件系统核心理念的讨论非常好,尽管作者没有使用「灵魂」这个词。Brooks 非常强调「概念一致性」问题,我觉得那个「一致的概念」就接近软件的灵魂。

什么是概念一致性?绝大多数欧洲的大教堂中,不同时代、不同建筑师所建造的各个部分之间,在设计或结构风格上都存在着许多差异。建筑师总是试图在前人的基础上有所「提高」,以反映他们在设计风格和个人品味上的改变。所以,在哥特式教堂上,可能依附着诺曼底风格的十字架,展示了建筑师的审美。与之对应的是,法国城市兰斯在建筑风格上的一致性和上面所说的大教堂形成了鲜明的对比,设计的一致性和那些独到之处同样让人们赞叹,这些风格的一致和完整性来自数代拥有自我约束和牺牲精神的建筑师们,他们每一个人牺牲了自己的一些创意,以获得纯粹的设计。这不仅显示了上帝的荣耀,同时也体现了他拯救那些沉醉在自我骄傲中的人们的力量。

实现复杂软件系统的概念一致性绝非易事。康威定律说:组织沟通方式决定系统设计,研发团队的组织架构至关重要。为了实现概念一致性,Brooks 高度推崇一种所谓外科手术团队那样的组织形式,设计师或架构师具有权威,有点接近贵族专制,对于开发出美好的软件产品来说,民主倒不一定有益。如果了解微软当年历时五年研发出新一代操作系统内核 Windows NT 的历程,应该知道 Dave Cutler 就相当于那个主刀的外科手术医生,正如 Linus Torvalds 之于 Linux 操作系统,他们对产品的想象决定了这些操作系统内在的一致概念,决定了对技术路径的扬弃。

软件的灵魂,也取决于研发团队的精气神。开发复杂软件系统是一个马拉松,研发团队需要有情怀才能坚持,需要倾注极大的热情才能出彩。几百上千个日夜,苦心孤诣,精雕细琢,对问题本质的探索精益求精,像艺术家一样,不是为了取悦别人,只是达到自己的心满意足。夜深人静,程序员孤独的坐在电脑前,大脑里可能正发生热烈的化学反应:哦,这是一个有趣的问题,哦,我可能想出来了世界上最巧妙的解决办法,我要亲手把它实现出来。迫不及待要看到效果,半夜灵感来了,都可能翻身起来噼里啪啦敲代码。当然也可能为解决一个 bug 绞尽脑汁。团队协作免不了碰撞,一个抽象,一个设计,都为了追求真善美,据理力争,面红耳赤,或者因为观点没有被接受而愤懑,或者因为互相挑战,思路螺旋上升,找到了更好的办法。坚持原则,谦逊开放,绝对都是美德。

深度学习框架作为一种复杂软件系统,自然也是有灵魂的。在研究各个框架的过程中,除了关注技术细节,还会琢磨框架背后的人和组织,以及由此决定的灵魂。时至今日,世界上主要的深度学习框架玩家都已露面,谷歌,脸谱,亚马逊百度华为旷视,可以对各个框架的灵魂做一个盘点了。以下分析带有很强的个人主观想象,特别是可能说一些负面的评价,希望不要带来感情的伤害,毕竟每个框架背后都凝聚了一批工程师的数年的心血。

Cuda-convnet

Alexnet 横空出世依靠了史前的 cuda-convnet,其核心理念是解决大规模数据集上深度学习模型训练速度问题,就是追求怎么把 CNN 借助 GPU 跑的快,C 加 CUDA,模块化不够好,不好使用。

Caffe 和 Caffe2

Caffe 使用业界沉淀下来好的编程实践(基于 Google style C++,面向对象编程,加上一些设计模式)打造了一个模块化、更灵活的变成框架。Caffe 的灵魂在于抽象和模块化。Caffe2 沿袭了 Caffe 的一些理念,吸收了 Tensorflow 里计算图的抽象。Caffe, Caffe2 项目的核心理念具有高度的一致性,在工程质量上,体现了一种偏好简洁的审美观,排斥过度抽象。但是没有在创新上完成自我超越。

Minerva

班底来自微软亚洲研究院,知道这个框架的人不多,但 Minerva 可能是最早基于数据流图抽象来实现的深度学习框架。Mapreduce 这种大数据系统发展到数据流图,用 DAG 表示,微软的 Dryad 系统是这方面的先驱,微软亚洲研究院肯定对这种技术驾轻就熟;Minerva 的一个目标是,希望搭建神经网络能像使用 Matlab 那么好用。可惜的是,在一些关键环节上没有解决好,导致整个系统使用体验欠佳。

MXNet

MXNet 前身是几个项目合并而来,CXXNet, Minerva, Parameterserver, Purine2,代表了华人留学生、开发者的精锐。MX 表示 mix,兼容并包,主打轻量级,不像 Tensorflow 那么宏大的设定。核心贡献者来自不同的单位,没有绑定关系,是一种松散的合作形式,带头人对全局的设计及技术取舍没有特别强的权威,希望把每位专家的聪明才智都贡献出来,集百家之长,不是 Top down 的工作方式,是 Bottom up 的方式,这种方式是有好处的,但同时带来一些副作用,譬如缺乏顶层设计,有拼接感不够浑然一体,概念一致性这一点上是欠缺的 (譬如包含重复功能的代码,以及未及时淘汰过时代码)。研发人员兴趣逐渐转移,主创团队的变更,不利于项目稳定发展。

Tensorflow

由程序员之神 Jeff Dean 领衔的 Google Brain 研发,之前有 Mapreduce, Distbelief 等系统,对大型 C++项目有精纯的掌握。Tensorflow 目标极其宏大,体现了 Google 作为地表最强团队的雄心壮志,但事实证明,目标过于宏大了。

Tensorflow 刚出来的一年多的时间,表现都是比较糟糕的(崩溃、慢、不支持多机),但全球开发者已经投降了:好了,就是它了,别人再做框架是没戏了,即使现在比较糟,但以 Google 的实力,一定可以改好。这就是品牌背书的优势。看 Tensorflow 代码的感觉是,看局部(每个 C++文件,每个类)都无可挑剔,但拼到一起构成一个系统就各种不协调。

Tensorflow 团队尽管有精神领袖 Jeff Dean,但 Jeff Dean 对框架的深入思考应该是极少的,其实还是一群精英工程师各自为战。我怀疑,世界上没有任何一个人掌握 Tensorflow 代码的全貌。Tensorflow 广为诟病的还有 API 的混乱及摇摆不定,最近被「民意」裹挟,Keras 竟然成了钦定 API, 这显然不是出于某个一致的设计。给人一种边研发边构思,正如一些美剧,一边播放一边编剧,甚至根据观众反馈来改变下一季的剧情。

如果回到最早 Tensorflow 那篇论文,会发现其实那篇论文有价值的内容不多,写论文时整个团队对问题的思考还停留在表面,看上去是「占坑」之作(当然,Op/kernel, graph, variable,send/recv,图优化,placement 这些都是留下来了)。Tensorflow 对一些新思路的支持不够及时,实现了复杂的分布式支持,但用户只想用 Horovod,研究员设计了 mesh-tensorflow, gpipe,也一直游离在主干代码之外,迟迟没有官方的 RDMA 支持。

总之,Tensorflow 是系统工程师主导的项目,体现了精湛的工程能力,对大型项目的娴熟掌控,但对深度学习系统本身的深入思考以及用户真实需求的挖掘这两样最重要的东西被忽视了。患了「大而无当」的毛病,系统太过庞大,算法科学家自身无力推进去新的思路,可能需要很多人协调,删除一些不好的设计也可能遇到阻力。

PyTorch

PyTorch 的前身 Torch 都有十几年的历史了,在 Python 接口前,有一段时间基于 Lua 编程。与 Tensorflow 由系统工程师主导不同,PyTorch 由算法科学家主导,甚至可以认为大型 C++项目不在他们的舒适区,很多底层接口还是 C 语言实现,直到最近,才开始做现代 C++的重构。也许是因为这些因素,PyTorch 很忠实的履行了「如无必要,勿增实体」的奥卡姆剃刀原则,项目伊始基本上不考虑分布式需求(Tensorflow 搞了复杂的分布式又如何,用户还不是去用 Horovod),也不做静态图编译优化,只考虑单设备优化,大大简化了问题。

Tensorflow 的 API 超级复杂,用户相当于要学习一门新的语言,PyTorch 将深度学习与 Python 语言深度整合,充分利用 Python 语言构造,极端情况下,用户只需要 numpy,好的,PyTorch 为 numpy 提供 GPU 支持,再实现 autograd 支持,这就完美支持了算法科学家的需求。当 PyTorch 崛起后,Tensorflow 团队应该会有一丝后悔:原来大部分用户需要的如此至少,当初苦心孤诣引入的各种技术全无用武之地。以 PyTorch 为例,很容易给人一种感觉:wow,深度学习框架如此简单。

当然为了运行效率,PyTorch 需要在内存管理上做复杂的支持,另外 Python 指令流和底层 kernel 计算流之间的异步执行,本质上是 CUDA kernel 计算时间足够长,就可以掩盖掉缓慢的 Python dispatcher 的开销, 某些情况下效率和 Tensorflow 不分伯仲。当然为了追求效率,开启 JIT 优化仍是有效的。算法科学家对大型工程的能力欠缺,但对深度学习算法科学家的需求体会的最深,对需求把握的最准确,核心灵魂就是务实,贴心。天下没有免费的午餐,有些困难的问题是迟早要面对的。

PaddlePaddle

Paddle 是国内第一个开源深度学习框架,是国内框架孤独的先行者,可以想见 Paddle 团队在公司内外曾承担的压力。历经了几代架构师和几个大的版本迭代,最初的设计是 Caffe + ParameterServer,当 TensorFlow 面世之后,在一些基础概念的抽象上模仿了 TensorFlow,此后又带有了一些 PyTorch 的色彩,设计理念不够稳定。Paddle 的一个特色是模型库丰富,有来自百度内部各个业务部门的需求反馈和贡献,Paddle 在几个国产框架里是模型库最丰富的,甚至给人一种业务模型强过系统核心的感觉,这一般也源自业务部门和基础架构部门的话语权对比。Paddle 和后来者 Mindspore 相比,对无人区探索的勇气是欠缺的。Paddle 早期团队很多工程师都不再做框架研发了,让人扼腕叹息,框架研发对工程师造成了什么样的伤害,以至于他们如此决绝地告别这个方向。

MegEngine

MegEngine 是一个实现很优雅的框架,我很喜欢。也是历时多年研发,核心团队比较小,但码力很强(我从不止一位旷视同仁那里听到码力这个词),旷视不缺这样的天才程序员,因为主程非常聚焦,所以在概念一致上非常好,精英主义打法的代表。这个框架追求训练推理一体化,推理框架是比训练框架简化的一个问题,以内存优化为例,在简化的问题上容易发现一些优化套路,可以反推到训练场景,一开始解决训练场景的问题反而不好入手。总体上,MegEngine 在创新思路上没有超越于深度学习框架的已有认识。

Mindspore

Mindspore 个人带来了惊喜,在众所周知的难题上勇闯无人区,auto-parallel 完成度很高,数据并行,模型并行和混合并行。好像我应该算在社区最多鼓吹这个概念,也比较早,但并没有发表论文,近些年 Google Mesh-tensorflow, gpipe 也都出了论文,之前 MXNet 团队的 Wang Minjie 也发过相关论文,斯坦福的 FlexFlow 等都曾讨论过相关思路,尽管有这些先行者,但完整的在框架内实现出来是非常不易的。Mindspore 团队集合了大学教授,2012 实验室编译、分布式系统方向造诣很深的架构师,最顶级的工程师团队,既谦逊又无畏,令人敬畏,只要是好的想法,都可以为我所用,如果一个问题很重要,还没有可模仿的先例,也一定不惜任何代价搞定,有人说 Mindspore 团队说「是一帮狠人」,可以说是非常高的评价了。Mindspore 的代码不是那么美观,类似 Google style,但细节上并没有严格执行,和 Tensorflow 一样不嫌麻烦的抽象,这种方式适合大规模协同研发,又一定程度上保证质量。

总结

这些年,和很多人交流过深度学习框架,绝大多数人认为深度学习框架已陷入思路枯竭,没有什么花样可做了,但创新势不可挡,总还是有新的思路出现。框架已进入疯狂弥补自身短板的白热化竞争,同时,有杀手锏创新的话,有可能一剑封喉。国内研发的框架虽然个性还不够强,但已经实现了局部突破,未来可期。等 Oneflow 开源之后,希望也能写一篇《Oneflow 之魂》补全这篇文章。

文章来源:
深度学习框架的灵魂》
https://zhuanlan.zhihu.com/p/121834310

推荐阅读:
《如何欣赏一个深度学习框架?》
https://zhuanlan.zhihu.com/p/117269565
入门老师木深度学习框架MegEnginePaddlePaddleMindSporeTensorFlowPyTorch深度学习
1
相关数据
Amazon机构

亚马逊(英语:Amazon.com Inc.,NASDAQ:AMZN)是一家总部位于美国西雅图的跨国电子商务企业,业务起始于线上书店,不久之后商品走向多元化。目前是全球最大的互联网线上零售商之一,也是美国《财富》杂志2016年评选的全球最大500家公司的排行榜中的第44名。

https://www.amazon.com/
相关技术
微软亚洲研究院机构

微软亚洲研究院于1998年在北京成立,是微软公司在亚太地区设立的基础及应用研究机构,也是微软在美国本土以外规模最大的一个研究院。微软亚洲研究院从事自然用户界面、智能多媒体、大数据与知识挖掘、人工智能、云和边缘计算、计算机科学基础等领域的研究,致力于推动计算机科学前沿发展,着眼下一代革命性技术的创新,助力微软实现长远发展战略。

http://www.msra.cn
华为机构

华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商。

https://www.huawei.com/cn/
Microsoft机构

微软是美国一家跨国计算机科技公司,以研发、制造、授权和提供广泛的计算机软件服务为主。总部位于美国华盛顿州的雷德蒙德,最为著名和畅销的产品为Microsoft Windows操作系统和Microsoft Office办公室软件,以及Xbox的游戏业务。微软是美国《财富》杂志2015年评选的世界500强企业排行榜中的第95名。

https://www.microsoft.com/en-us/about
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

奥卡姆剃刀技术

奥卡姆剃刀,又称“奥坎的剃刀”,拉丁文为lex parsimoniae,意思是简约之法则,是由14世纪逻辑学家、圣方济各会修士奥卡姆的威廉提出的一个解决问题的法则,他在《箴言书注》2卷15题说“切勿浪费较多东西,去做‘用较少的东西,同样可以做好的事情’。

操作系统技术

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

MXNet技术

MXNet是开源的,用来训练部署深层神经网络的深度学习框架。它是可扩展的,允许快速模型训练,并灵活支持多种语言(C ++,Python,Julia,Matlab,JavaScript, Go,R,Scala,Perl,Wolfram语言)

百度智能云机构

百度是全球最大的中文搜索引擎,是一家互联网综合信息服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://www.baidu.com
旷视科技机构

旷视成立于2011年,是全球领先的人工智能产品和解决方案公司。深度学习是旷视的核心竞争力,我们打造出自研的AI生产力平台Brain++并开源其核心——深度学习框架“天元”,实现了算法的高效开发与部署。在持续引领技术进步的同时,我们推动AI产业的商业化落地,聚焦个人物联网、城市物联网、供应链物联网三大赛道,为个人用户带来更出色的美学体验与安全保障、让城市空间更有序、并帮助企业实现工业、仓储数字化升级。我们提供包括算法、软件和硬件产品在内的全栈式、一体化解决方案。

https://www.megvii.com
OneFlow机构

一流科技是一家集生产、 研发和销售为一体的创新型人工智能领域创业公司。主营产品是具有完全自主知识产权的分布式深度学习框架OneFlow,同时也提供集算力算法、数据管理于一体的一站式的机器学习平台。OneFlow支持进行大规模分布式训练,支持市场主流硬件芯片和算法。作为企业级人工智能深度学习引擎,OneFlow支持私有云部署和公有云部署,可通过软件平台提供线上自动化的模型训练服务,也可提供定制化的一站式人工智能解决方案。公司创始人为袁进辉,清华大学博士、博士后,师从中国人工智能泰斗张钹院士,研究方向为计算机视觉及机器学习

https://www.oneflow.org
相关技术
合合信息机构
华北理工大学・冶金工程・学士
长知识了,我只接触过 tensorflow,pytorch,paddle,说了惭愧他们的区分我只知道一个静态图和动态图的区分