深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

2019 年 1 月 22 日

深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

随着深度学习关注度和势头上升,深度学习被越来越多的企业和组织的生产实践结合起来。这时,无论是对于深度学习相关专业的初学者,还是已经在企业和组织中从事工业场景应用和研发的开发者来说,选择一个适合自己,适合业务场景需求的深度学习框架显得尤为重要。

那么,对于不同学习阶段和不同岗位的开发者来说,什么样的深度学习框架才是适合自己的呢?为此,AI 前线邀请了来自BAT的深度学习框架专家来解答这个疑问。


以下是选择深度学习框架时常见的几个问题:


目前,国内外有哪些主流的深度学习框架?分别有什么优缺点?


TensorFlow:谷歌大厂出品,社区资源丰富,用户群体广泛。如果你的业务是实现一个比较成熟的应用场景,选择 TensorFlow 是个不错的选择,毕竟大部分坑前人已经踩过了。如果你还是一名初学者,想要去实现全新的算法,那要慎重选择 TensorFlow,因其发展时间较久,代码库庞大,想要真正看懂它的代码会是一个不小的挑战。


PaddlePaddle:百度出品,跟 TF 类似,PaddlePaddle 也是在百度内部实际应用的工业框架。值得一提的是,PaddlePaddle 为大量工业级模型提供官方支持;大规模分布式训练技术能力强,支持大规模稠密参数和稀疏参数场景的并行训练;基于其中文文档友好、简单易上手的特点,社区活跃度不断提高。本土开发者中文交流非常方便。PaddlePaddle 已经升级为全面的深度学习开发套件,除了核心框架,还开放了 VisualDL、PARL、AutoDL、EasyDL、AI Studio 等一整套的深度学习工具组件和服务平台,更好地满足不同层次的深度学习开发者的开发需求。18 年百度加大了生态投入,在工业制造、农林领域有不少案例,对于想要落地应用场景,特别是针对中文语言处理的场景和大规模推荐场景,PaddlePaddle 或许是个不错的选择。


PyTorch+Caffe2:脸书出品。PyTorch 前身是 Torch(一个基于 Lua 语言的深度学习库)。PyTorch 灵活性相比 TensorFlow 大大增强,支持动态构图,开发者可以随时改变神经网络的结构。PyTorch 今年因其易用性表现突出,越来越受到学术界的青睐。如果你是一名初学者,想要去复现前沿的算法,推荐使用 PyTorch。如果你是工业场景开发者,最好先搜一搜是否已经有使用 PyTorch 的成功落地案例。因为在运算效率、工业部署上,PyTorch 还不算成熟。Caffe2 为生产环境设计,提供在各种平台(包括移动设备)的运行时。Caffe2 意在弥补 Pytorch 在生产环境的不足,目前还没有看到太多开发者反馈 Caffe2 的工业表现,需要更多时间验证。


MxNet:已被亚马逊 (Amazon) 选为 AWS 上的深度学习框架,支持动态图计算。优势是高效小巧,更适合自定义需求高的公司和研究者。如果你的工作需要对框架进行修改时,改 MxNet 要比改 TF 高效多了。MXNet 的用户相比其他框架并不算太多,有少量拥戴者。MXNet 在文档质量方便经常被诟病,新手还需要多磨合一下。


Keras:是一个用于快速构建深度学习原型的高层神经网络库,Keras 由纯 Python 编写而成,并基于 Tensorflow、Theano 以及 CNTK 后端。Keras 隐藏了大部分的内部运算,对于新手来说非常友好。如果想要快速入门,建议可以选择 Keras。但真的想成为深度学习大拿,还是要手动从零开始写一个神经网络的代码,否则容易依赖于 Keras 的易使用性而忽略底层原理。


XDL:阿里出品。X-Deep Learning (XDL) 是针对特定工业级场景(比如广告)深度学习问题的解决方案,而不是与其他框架并列的底层框架。实际上,XDL 采用桥接的方式支持使用 TensorFlow 和 MXNet 作为单节点的计算后端。对于已经使用 TensorFlow、MXNet 的开发者来说,如果需要在大规模稀疏场景应用可以选择 XDL 试试, XDL 依赖于阿里提供特定的部署环境,对非阿里系用户不是很人性化。


不同学习阶段、不同岗位的开发者,面对不同的业务场景需求应该选择什么深度学习框架?选择和衡量的标准是什么?


不同类型的用户,选择和衡量的标准会有一定差异。选择框架通常要考虑易用性、性能、社区、平台支持等问题。初学者应该考虑容易上手的框架。偏研究性的开发者,一般选择易用而且有领先的模型基线的框架。偏工业应用的开发者可以考虑使用稳定性高、性能好的框架。比较高阶的用户,往往需要同时掌握多个框架。最新的开源算法可能会基于某个框架,掌握多个框架可以更快复现前沿成果。同时不同框架在不同模型上有性能差异,掌握多个框架也可以选择在某个场景下最适合的框架。


在选择深度学习框架时有哪些经验可以分享?需要考虑哪些因素?


开发者通常用深度学习框架组建网络,去解决实际企业级业务中的具体问题,比如:词法分析、机器翻译等。选择框架时通常需要关注以下一些因素:


  1. 框架是否已经官方支持了当前最好的算法,比如中文词法分析任务。

  2. 框架是否高效。同样的算法用不同框架实现,训练速度更快,意味着更少的线下资源,更快的迭代速度;预测速度更快,意味着实际部署时可以为企业节省大量的机器资源,也具有更高的响应速度。

  3. 框架的接口是否容易使用。


掌握一个深度学习框架,开发者需要做哪些准备?


在开发者已经学习 Python 程序开发和深度学习基础知识的前提下,掌握一个深度学习框架,开发者需要了解框架的基本原理,学习并掌握框架的基本概念和用法。


  1. 通常可以先从官方文档开始,通过大致浏览官方文档对框架基本概念和用法有一个大致的了解。

  2. 另外可以结合官方提供的快速入门例子,在自己的机器上安装并练习使用。

  3. 然后可以再从官方的模型库里面挑选一些算法,进行学习参考。

  4. 结合自己具体任务组建网络,查看API接口文档,解决实际任务。


深度学习框架能“包治百病”吗?是否适用于所有应用场景需求?


需要提醒大家的是,深度学习框架不能包至百病,深度学习框架能够解决的是适合使用深度学习技术的应用场景。


深度学习(DL)是机器学习(ML)的一个分支,也是当下最流行的机器学习方法,虽然近几年在图像、语音、自然语言处理等应用方向,深度学习技术都取得了突破性的进展,但是我们依然不应该神话深度学习,认为深度学习无所不能。


适合掌握深度学习的任务应具备这样一些特点:


一、具备大量样本数据。如果样本数据难以获取或者数量太少,我们认为就不适合深度学习技术解决


二、样本数据对场景的覆盖度足够完善。深度学习模型的效果完全依赖样本数据表现,如果出现样本数据外的情况,模型的推广性会变差


三、结果对可解释性的要求不高。如果应用场景不仅要机器能够完成某项任务,还需对完成过程有明确的可解释性,这样的场景就不那么适合深度学习。


中国的深度学习框架有哪些不同于欧美国家主流深度学习开发框架的特点和创新?


从深度学习框架的特点来讲,中国和欧美的的区分未必是一个合适的分类方式。很多中国深度学习框架研发的主体是中国工程师,也是在中国公司成长起来的,自然对国内的实际应用特点把握得会更精准,而且在中文文档、中文教程以及中文模型配套上是独具特色的。


未来,框架发展会出现哪些趋势?


首先,当前仍处于深度学习研究和应用的持续火热期,深度学习框架及平台在研究界和工业界的需求仍持续增长。深度学习框架和平台在产业界的市场占有还未进入稳定期,当然未来一段时间应该也不会出现完全一家独大的垄断局面。一方面整体的市场需求是很大也很多样化的,另一方面不同框架在特性及发力点上自然会有一些差异性的适配。随着深度学习在各行各业的广泛应用,服务能力强的、更贴近用户需求的框架会有更大的提升机会。


过去一段时间,动态图的灵活性、易用性展现出对科研人员极大的吸引力,更多框架开始支持动态图,但需要进一步解决动态图下的性能优化问题。因为在工业界,训练效率和规模化始终是最重要的。所以,各框架取长补短趋同性比较明显,前端易用性、计算高效性、框架稳定性成为持续优化方向。当然,不同框架的先天基因的特性还是非常明显的。


此外需要注意的是,AI 专有芯片也在快速发展,框架和底层芯片的软硬结合一体化研发也日益引起关注。AI 应用部署场景快速扩张,框架对各硬件平台的快速部署和高效推理能力变得非常重要。整体而言,需要支持多硬件的高效计算。这也使得框架内部架构上倾向于更好的抽象分层,保持整体逻辑的统一性和异构硬件执行的高效性。


另一方面,深度学习框架的内涵也在延展。深度学习框架的出现本身就是为了深度学习研究、实验和应用的便利性,节省了开发者很大的编程代价。但对于深度学习技术而言,网络设计其实也是非常重要的一环,基础的深度学习框架是无法解决这个问题的。所以当下神经网络结构的自动设计 AutoDL 技术就成为新的热点,也和深度学习框架进行更紧密的结合


从便利深度学习技术应用来讲,只靠开源框架还是不够的,需要场景化组件、模块、平台和产品的组合打法,框架之上的平台、配套组件构成的深度学习全流程解决方案对实际应用非常关键。若想深度学习框架在实际应用中发挥更大作用,是需要更全面的综合服务配套建设的


如何看待接下来的框架之争?


随着深度学习技术的普及,各家框架的成熟化,深度学习技术的门槛会越来越低。在研究场景中,好用、灵活易扩展是最重要的考量因素,从目前的趋势来看,PyTorch 在易用性上有一定优势。PaddlePaddle 在实际生产场景中,框架的易用性、稳定性、生态资源的丰富度将取代技术的领先性成为开发者更重要的考量因素。从这点上,拥有完整生态资源、有实际应用场景支撑的框架会争夺到越来越多的企业开发者用户。在国外,依赖于谷歌生态的 TensorFlow,依赖于 AWS 云生态的 MXNet,未来都有一定的机会。


想要形成自己的产品生态,需要哪些必备条件?


想要形成自己的产品生态,需要具备四大条件:


一、 掌握能为最终用户提供巨大收益的核心技术。如深度学习领域框架所涉及的异构计算、并行训练、多路通信、多端部署及核心算法等关键技术。厂商需要拥有深度学习核心技术并形成自己的特色,才具备了生态号召力。


二、 核心产品或服务能够规模化地应用和落地。在生态拓展的过程中,厂商有能力通过平台和资源沉淀足够多的通用解决方案。


三、 能为最终用户提供全面的体验。深度学习框架应用门槛较高,真正在企业广泛落地,还有很多的工作要做,比如结合企业需求的深度定制优化、深度学习配套工具建设、细致的企业服务等等,这要求厂商能够有效整合生态系统中的各个伙伴能力,为最终用户提供更全面的产品体验。


四、 拥有持续创新的能力。厂商应该有足够的资金和动力让核心技术和产品持续创新,使得生态系统的用户相信核心业务能够一直使他们受益。


2019 年 1 月 22 日 08:056084
用户头像

发布了 42 篇内容, 共 10.1 次阅读, 收获喜欢 51 次。

关注

评论

发布
暂无评论
发现更多内容

面试官:为什么需要happens-before规则和什么是指令重排序

无予且行

Java 编程 程序员 happens-before java面试

GeekPwn 2020少年黑客马拉松大赛即将开启 谁将CARRY全场?

Geek_116789

一致性哈希 -- java 实现

lei Shi

小白也有大厂梦,如何从零开始掌握高薪Java工程师必备技能?

无予且行

Java 架构 面试 后端 大厂

现在面试这么难,背下题就能过的时代一去不复返了

小谈

Java JVM Java 面试 springboot SpringCloud

工业4.0|振动分析能做到预防性维护吗?

清水河路人甲

计算机操作系统基础(十三)---线程同步之读写锁

书旅

php laravel 线程 操作系统 进程

[1.3万字] 玩转前端二进制

阿宝哥

Java 前端 base64 Blob

重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」

小傅哥

Java 设计模式 小傅哥 重构 代码优化

Java线程池最细的解释,看完后彻底征服面试官

小新

Java 架构 面试 线程 线程池

JVM中的双亲委派机制你还没懂吗?

阿文

Java JVMTI JVM 深入理解JVM JVM原理

Java程序员的必修课之Spring理解透彻了吗?不会还咋去面试?

犬来八荒

Java spring 面试 后端 框架

三十张图助你看清红黑树的前世今生

淡蓝色

Java 程序员 数据结构 算法

Raft探索历程--Part2

老胡爱分享

分布式系统 raft

碎片化学习行不行

封不羁

Hexo blog 创建指导手册

想飞的鱼

GitHub Hexo GitHub Pages Blog

大厂经验(3):Android端埋点自动采集技术原理剖析

DeeperMan

前端 数据采集 采集 埋点

Cordova项目使用Android Studio真机调试

麦叔

android Android Studio 真机调试

Hash一致性算法的Java实现

wei

Git 的远端操作及解析(含思维导图)

多选参数

git GitHub gitlab

【Python】 any() 和 or 区别你真的知道吗?

Leetao

Python 数据结构 Python基础知识

它们为什么这么快:从多进程到多线程再到I/O复用

Ya

多线程 进程 并发

架构师训练营第五周 - 总结

Eric

极客大学架构师训练营

如果张东升是个程序员

程序员生活志

程序员 张东升

道路千万条,安全只三条

石君

安全评估 安全设计

k6简单入门

IT民工仁兄

性能测试

对mysql事务的认识,再不懂我就捶死我自己!

你是人间四月天

MySQL 面试 mysql事务 Java 面试 大厂面试

针对GPU单指令多数据流的编译优化算法

GPU

gpu 编译器 程序语言 if-conversion

有了多线程,为什么还要有协程?

八两

线程 进程 协程 GMP 进程线程区别

区块链系列教程之:比特币的问题

程序那些事

比特币 区块链 智能合约 以太坊

公司一直用Mybatis的原因原来在这!不得不竖起我的大拇指

小闫

Java mybatis mybatis-config.xml mybatis缓存

深度学习框架不能“包治百病”,开发者如何选出最适合自己的?-InfoQ