雷锋网 AI 研习社按:PaddlePaddle 的前身是百度在 2013 年自主研发的深度学习平台,在百度内部已经使用多年,支持百度内部各项业务。 2016 年 8 月底百度开源了 PaddlePaddle 之后,在短时间内迅速成为全球开发热度(Github Pull Request 数量)增速最高的开源深度学习平台。PaddlePaddle 项目不仅提供深度学习框架,还提供各种简化调试和支持大规模训练的附加技术。PaddlePaddleVisualDL 开发不到半年的时间,在Github 上的“star”数就逼近了开发了两年多的 Google TensorBoard。
PaddlePaddle 的社区增速和其技术迭代速度密不可分。刚开源的时候,PaddlePaddle 的设计思路和四年前开发的Caffe类似。在一年时间里,连续推出了“v2”和“Fluid”两代新技术:其中 v2 像 MxNet 和Caffe2 一样参考 TensorFlow 增加了 operators 的概念;Fluid 类似 PyTorch,但是不依赖 Python 的控制流(if-else、for等),而是提供自己的解释器甚至编译器,所以不受限于 Python 的执行速度问题。
在 2017 年 11 月的百度世界大会上,PaddlePaddle 发布了三项新功能:
PaddlePaddleFluid 提供高级语言中的 while 和 if 等控制流结构,提升使用者的开发效率,同时利用编译优化技术保证计算性能。
PaddlePaddleCloud 支持使用者在浏览器里开发 AI 应用,在云端调试运行,开发者不需要在个人电脑和机群之间切换,提升了工作效率。
PaddlePaddleEDL 是全球首个支持弹性作业调度的开源 AI 云解决方案,通过与 Kubernetes 合作实现弹性作业调度。
三大新功能的推出,进一步加强了 PaddlePaddle 的易用性,提高了效率,并降低了开发者的使用门槛。
陆奇曾表示,开源代码写得好,不仅能解决大家的痛点,开源代码也会变得越来越强,开源代码的生命力必然会超过封闭体系的代码。PaddlePaddle 开源至今,还会为开发者提供哪些服务?怎样在大量流行开源框架的竞争之下脱颖而出?如何成为陆奇口中所说的“越来越强”的开源平台?带着这些疑问,雷锋网 AI 研习社采访了百度 PaddlePaddle 的技术负责人王益,他将分享在开发 PaddlePaddle 过程中的经验点滴。
嘉宾简介:王益,在加入百度之前曾任硅谷 AI 创业公司 Scaled Inference 创始科学家,LinkedIn 高级主任数据科学家,腾讯社交广告技术总监,Google研究员。王益曾在清华大学和香港城市大学学习,并取得了清华大学机器学习和人工智能博士学位。此外,他还是 IEEE 的高级会员,著有《推荐系统实践》一书。
以下是雷锋网 AI 研习社对王益的采访内容:
PaddlePaddle 其实已经有很多年的历史了,从 2013 年发展至今,PaddlePaddle 在设计的过程中经过了哪些重大变化?
王益:PaddlePaddle 的2013年版本是百度杰出科学家徐伟老师主持设计和开发的,其设计思路和同时代的 Caffe “心有灵犀”:表示一个模型的方式都是“一串 layers”。这个设计沿用了三年。2016年8月底,PaddlePaddle 开源之后,我们在徐老师指导下做了两代升级:2017 年 4 月推出 PaddlePaddle v2,2017 年底推出PaddlePaddleFluid。
PaddlePaddle v2 的推出把 PaddlePaddle 的技术升级到了 2015 年 Google 推出的TensorFlow 的水平 —— 把 layers “打碎”成更细粒度的 operators,同时支持更复杂的网络拓扑“图”而不只是“串”。
PaddlePaddle Fluid 的设计思路和 PyTorch 以及 TensorFlowEager Execution 很像 —— 已经不再有“模型”的概念,也就不在意“图”(graph ofoperators)或者“串”(sequence oflayers)了,而是只有“程序”的概念。当然,从程序是可以导出一个图的,这也是 从一个 PyTorch 程序可以被导出成 ONNX 文件格式的模型一样。
需要提醒的是,PyTorch 和 EagerExecution 程序中的控制流(比如 if-else, for)都是用的 Python,而 Python 执行速度慢且难以提速,这是一个瓶颈。Fluid 程序也是一个 Python 程序,但是执行这个程序会先把自己输出成一个 protobuf message,随后调用 Fluid 解释器(而不是 Python 解释器)来解释执行这个 protobufmessage,这样比 Python 解释器的执行速度更快,和 TensorFlow 执行图的速度一样。甚至更进一步,我们在开发编译执行的方式 —— 写一个 transpiler 把 protobuf message 表示的程序翻译成 C++ 程序,然后可以用 nvcc、icc、gcc 编译成二进制代码,直接运行在服务器和手机上。从而彻底解决 PyTorch 和 Eager Execution 程序的执行速度受限于 Python 的执行速度的问题。
在知乎上,Caffe 的作者贾扬清称赞了百度的 PaddlePaddle,并说“整体的设计感觉和 Caffe 心有灵犀”。那么,您认为,跟 Caffe 以及 TensorFlow、PyTorch、MXNet 等热门框架相比,PaddlePaddle 的优势在哪?
王益:知乎上贾扬清的称赞是在 PaddlePaddle 开源之初。如我上文所述,当时的 PaddlePaddle 和 Caffe 确实很像。今天在百度内外推动的都是 PaddlePaddleFluid 了,是一个比 PyTorch 和 Eager Execution 更激进的技术思路。
陆奇曾表示,要将 PaddlePaddle 发展成具有中国特色,最适合中国国情的深度学习平台。请问“适合中国国情”的深度学习平台怎样理解?它和国外的深度学习平台有何区别?
王益:从我的理解来看,一方面是基础计算架构要适应中国的现状;另一方面是计算技术上要世界领先,能人所不能。这两方面都有很多可以做的工作,而且百度还是足以自信的。
虽然现在很多深度学习应用用一个几台机器的小集群就可以解决,但是 Web scaled 应用,比如广告和搜索引擎,或者新的应用,比如通过 Lidar、Radar、cameras 采集海量数据的无人车,都是需要大规模深度学习计算能力的。通过扩展 Kubernetes 这样的先进的集群管理系统,PaddlePaddle EDL 比 Google KubeFlow 优势很明显 —— EDL 不仅可以把 PaddlePaddle 程序在 Kubernetes 上跑起来,而且可以弹性调度—— 不忙的时候一个训练作业多用一些资源,忙的时候少用一些,但是资源变化不会导致作业失败;而 KubeFlow 只是把 TensorFlow 程序在 Kubernetes 上跑起来,不能实现弹性调度。另外,EDL 不仅调度深度学习作业,也弹性调度其他作业,比如 Nginx、MySQL 等,从而极大地提升集群总体利用率—— 在国家深度学习重点实验室机群上实测效果高达 91%,远超一般的高性能计算集群的 30% 左右的利用率。这样的技术在公有云和私有云上的推广,很容易就能用 1/3 的机器做同样的工作,为一家单位一年节省的计算成本可以高达百万、甚至数百万美元。
深度学习平台和编程语言一样,不是一个独立的程序,而是一个社区 —— 训练要能在国内的云服务上跑;要能部署到国内的企业的私有云上;国内的科技创新企业在制造定制化的加速芯片,PaddlePaddle 应该是连接这些基础创新和应用的桥梁;要开放中文数据和中文模型—— 比如图像识别的 label 是中文的;语音识别和语音合成等应用也是和中文强相关的。
现在 Google 正加速 TensorFlow 在国内的推广(开设 TensorFlow 微信公众号、中文网站等),百度的 PaddlePaddle 会采用怎样的策略应对?
王益:在宣传和推广方面,PaddlePaddle 团队也在建设宣传渠道。欢迎大家访问我们的官方网站 paddlepaddle.org,也欢迎大家订阅我们的微信公众号(微信号:PaddleOpenSource)。前一年里,PaddlePaddle 团队的人数也在迅速增长,虽然和 TensorFlow 团队的规模相比还是有一定的距离,我们在 Github 上的 pull request 和 issues 数量增长和 TensorFlow 是同量级的,这背后是团队持续一年多努力工作的结果。
从 PaddlePaddle 的发展过程可看出,百度正努力降低 PaddlePaddle 的开发门槛,同时提升其开发效率,从而让开发者能够顺畅地使用 PaddlePaddle 开发产品。那么除了不断优化 PaddlePaddle 之外,百度还提供了哪些措施来获取更多的开发者使用 PaddlePaddle ?
王益:PaddlePaddle 有一个 Web-based IDE,可以让大家在浏览器里用 JupyterNotebook 编程,然后按一个键,就把程序发送到云端(Kubernetes 集群上)运行,程序运行时候的输出实时地显示在浏览器里。这样大家不需要在多个编程环境之间切换—— 在笔记本上开发,在 GPU server 上验证,在集群上跑试验,也就不需要维护多个环境里的各种软件(比如 Python)的版本和配置一致。
PaddlePaddle 还提供一个训练过程可视化的工具 VisualDL:https://github.com/PaddlePaddle/VisualDL。 这个工具很方便,社区反映非常热烈。开始开发才不到半年,Github 上的“星”的数量(1071)就直追开发了两年多的 Google TensorBoard 了(1144)。
我们还在为 PaddlePaddle Fluid 开发一个类似 GDB 的调试器。希望今年夏天的时候可以面世,进一步方便大家调试深度学习程序。
有开发者反馈,和其他框架相比,PaddlePaddle 的文档资料较少,请问百度未来在 PaddlePaddle 社区运营以及开发文档资料的支持工作上会有哪些具体的措施?
王益:文档问题确实存在。我们也一直在反思原因和寻求解答。原因有几个:
开源一年多以来,技术演进速度很快,文档没有跟上。
开源之前,作为公司内部项目,很多用户交流都发生在公司内部的通信工具上,没有归档到文档里,很可惜。
团队人力较少,顾不上文档的完备。
中国工程师用英语写作文档的能力有限。
针对这几个问题,最近几个月我们做了很多工作:
鉴于 Fluid 已经是目前最新一代技术,2018 年我们会努力稳定和完善它,并且不断补足文档。
绝大部分用户交流发生在 Github issue 里,这些讨论过程会被不断收集起来,形成文档,或者帮助我们把现有文档修改得更简洁易懂。
百度在最近一年里为 PaddlePaddle 配置了更多的工程师,我们也在不断提升自己的文档能力。
API reference 类型的文档尽量通过工具自动从代码生成。
其他类型的文档,我们建立了审核机制作为组织开源贡献的基础。我们也为百度之外的文档和源码贡献者们准备了礼物:https://github.com/PaddlePaddle/Paddle/issues/6542。欢迎大家加入到 PaddlePaddle 项目里来,一起把它做得更好。
您曾经在 Google、腾讯、LinkedIn 做过与分布式机器学习相关的工作,为什么最终会选择来百度领导开发 PaddlePaddle?
王益:一个主要的原因是百度的 AI 布局是真的很开放,没有什么藏着掖着的。比如PaddlePaddle 100% 都在 Github 上公开,没有内部版本。从芯片、到手机、到各种AI 应用,中国在 AI 领域每个层次上都有值得骄傲的工作在做值得骄傲的技术。如果有一个开放的软件平台把他们能连为一体,无疑是一件独具社会价值和面向长远未来的事儿。这是一个很有挑战的机会。另一个主要原因是百度的管理层都很支持 AI 开放这件事。陆奇、王海峰老师在技术成果宣传和公司间的战略合作方面,都是亲力亲为的,PaddlePaddle 的开源也得到了吴恩达老师的支持。
根据目前的发展现状来看,您认为未来机器学习领域的发展趋势是怎样的?您比较看好哪些技术的应用潜力?
王益:机器学习有很多具体的工作方向,每一个都很有意思。我最近十年来都专注在大规模分布式计算——除了提升计算速度(开始运行到结束之间的时间),还要综合提升整个机群的利用率,以及降低每个作业提交之后到开始运行之前的这段等待时间。这是我最感兴趣的方向。它能够为公司节省计算成本,保障研究员们的工作效率,更是大规模互联网业务成功的基石。
如今人工智能大热,有很多程序员以及研究员有意转向人工智能的开发和研究,对于这样的现象您是怎么看的?您能否提供一些建议给这些想转型人工智能的技术人员?
王益:计算机科学有两种形式:一种是,人来学习和积累知识,然后对给定问题想出来一个解法,把解法描述成程序,然后计算机照着执行。很多程序员学习算法和数据结构是为了掌握这种形式。另一种形式是,人想不出解法,所以写一个程序,让程序通过分析数据,归纳规则,再利用这些规则解决问题。后一种是人工智能。为了写这个人工智能程序,当然也得学好算法和数据结构;同时人工智能程序区别于一般程序的地方是需要程序员有必要的数学基础。
我们以前做的统计学习要求的统计学和统计学习理论相对比较难学一些,深度学习基本只需要高等数学为基础,门槛一下子就降低了很多。这是一个大家学习把握第二种形式的好机会。
不管高等数学还是概率统计,都是大一课程,不需要超常的智慧,只是需要耐心积累知识体系之后,才能看到效果。我看到不少朋友们觉得难,其实不是这个学习的事儿难,而是要克服焦虑感,维持耐心比较难。如果大家因为着急想要放弃,请想想以下事实:
计算机科学发展了半个多世纪,能用第一种形式完全解决的核心问题,包括操作系统、编程语言、Web server、GUI 系统等,都解决的差不多了。而很多新的问题,比如:如果展示这个广告,用户有多大的概率会点击;如果推荐这个衣服,用户有多大可能性会购买;如果推荐这个小视频,用户有多大可能会观看;这个照片看上去像是哪个知名景点等等,都需要用第二种形式的编程来解决,并且这些进展已经在最近二十年里支撑起 BAT 和 FLAG 这样的伟大的公司。
2017 年夏天,北京工业大学的四位学生利用 PaddlePaddle 制造了一台智能桃子分拣机,从形状、大小、色泽等多维度对桃子自动分级,实现桃子的自动分拣。对于自家的 PaddlePaddle 平台,李彦宏表示:“经过了五六年的积累,PaddlePaddle 实际上是百度深度学习算法的引擎,把源代码开发出来,让同学们、让社会上所有的年轻人都能够学习,在它的基础上改进,我相信他们会发挥出创造力,做到很多我们连想都没有想过的东西。”
总结起来,百度 PaddlePaddle 平台的使用成本更低、更加简洁易用,从开放力度上来讲,PaddlePaddle 也是前所未有的,不仅将高性能的分布式框架彻底开源出来,同时还开放了大量的模型,在技术、营销和客户资源方面为企业和个人开发者提供帮助。不过,在竞争激烈的机器学习平台领域,PaddlePaddle 如何获得更多开发者的青睐,如何拓展 PaddlePaddle 的技术生态,对于百度来讲还有很长的路要走。