2021年Paddle发展得怎么样了?

最新的2.0版本相对于tensorflow、pytorch,caffe有哪些优缺点?比如文档,社区,设计等方面。 我是新手,想选择一个框架使用,熟练之…
关注者
269
被浏览
267,674
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

利益相关, 虽然不是PaddlePaddle的人,但是和PaddlePaddle合作的比较多

说下个人背景吧

之前算法出身,后来在鹅厂有幸作为核心开发参与分布式机器学习框架无量的开发,相关工作也还取得蛮不错的效果,现在无量还在PCG看点业务充当大规模分布式的框架支持,后来又去了猪厂做算法框架平台的开发。因为做过算法也做过算法系统,相对我接下来的表述,我个人认为还是比较公平的。

  1. 所谓的算法工程师,可能真的只是调参侠,所以文档也很重要,但是也建议能step in 去看源码,至少是python端源码,无论是PaddlePaddle、TensorFlow、PyTorch,其python端的源码质量都是很高的,都是可以学习的很好的素材。

最近两年,我作为平台、框架方,支持比较多的业务,很多业务方同学在机器学习框架方面可能真的只是调参侠,他们不懂得数据读取的原理,也不懂多线程、流水线,通常会逮着几篇技术pr文档,去copy其中的代码,稍微好一些的会自己主动研究文档,研究某个api或者某类操作的更高效的使用方法,但是很少有人跳进代码,我这里指跳进python端的代码去看一些操作(这里不用质疑,真的存在,如果你有step in python的代码习惯,那么恭喜你,你其实超过了很大一部分算法工程师)。所以,在大部分算法工程师眼里,其实文档中告诉API如何使用还就罢了,真正他们需要的是example,能够直接复制就能run的example,所以所谓“文档的好坏”其实不是解释API,而是给一个或者多个例子,如何去run起来,但是呢,通常文档给了example,也通常不会覆盖到API接口中所有的args,阅读文档说明,step in code是特别重要的,这点TensorFlow做得很不错,频率使用较高的API,能够很快的导航到github repo的文件, 你可以很快地去看一些实现,来弥补文档中args的说明文档的不足,之前PaddlePaddle坦白来讲做的一般,但是最近开始做的不错了,我比较喜欢的能够跳进github repo去读python源码,对我而言,在一些API上,尤其是不熟悉的API上很有用,这里也建议一些算法同学,能够多多地进去看一些API的基础实现,尤其是python端的,对你理解还有提升自己python的编程水平有好处的,千万不要把python当作胶水语言;

不过有一说一,Web UI上来说, 还是和TensorFlow、PyTorch有明显的差距, TF、PyTorch也有不好的,偶尔会被强,查看到不到,尤其是TF;

2. 对新人友好程度,一个新人是否能快速地使用框架完成相应逻辑,是框架给人的第一印象

这方面,PyTorch是我认为做的最好的,我本人用PyTorch机会比较少,大概两年前,因为帮小伙伴忙改个部署的东西,在花了一个下午,跑了PyTorch的tutorial之后,基本了解PyTorch在CV下的一些基础API,很快就完成了相应地工作,这一点一直到现在,个人感觉都是PyTorch做的最好,基本上从文档层面就可以教会你基本上需要了解的,而且很简便,不臃肿, TensorFlow和PaddlePaddle在这块其实做的蛮一般的,光从文档上,TensorFlow的tutorial跑下来和没跑没啥区别,但是TensorFlow很聪明,在Google Cloud上有很多好玩的notebook,可以来教会你使用其中功能完成相关的开发,而PaddlePaddle也是这样的思路,PaddlePaddle是在Ai Studio上去教会尝试去try的同学,个人觉得虽然也不错,但是尝试成本还是太高。在PaddlePaddle官网上, 文档内容很多,组织上感觉又有点问题,感觉没有收拢在一起,看着是有点吓人,很难快速定位到和自己业务相关的tutorial代码吗,如果能像PyTorch给我的初体验,那想必是很好的。但是PaddlePaddle有一点特别好的,就是它有比较多的企业级的包,可以直接在产业界落地使用,这个我作为一个技术人员,其实蛮欣赏PaddlePaddle把这部分开源出来给大家用的。

3. 社区运营

社区运营来说,我觉得PaddlePaddle的社区运营无论从广度还是深度上都比Google在国内要好的多, 我参加过很多社区活动,无论是Google还是PaddlePaddle,异或其他, 我个人感觉PaddlePaddle的干货很多,印象特别深的是20年下半年吧,在上海组织的快车道活动,相当精彩的技术分享,尤其是PaddleOCR,我印象中是一个女工程师在分享, 我第一次在这种分享活动上,听到工程师分享了PaddleOCR调优的trick大概20来条(有点久远了,具体数量记不住了),一条一条的解释,虽然在图像这块我不是很资深,有很多点我无法理解,但是我很能感受到PaddleOCR的真诚,加入到相关的微信群之后,群的活跃度很高,和以往加入的一些美其名日技术分享,实际无脑PR的群不太一样,感觉PaddleOCR的技术和产品同学都是求着使用的小伙伴们提需求, 社区运营体验的确实不错,真诚。

4. 技术

可能大部分同学使用PaddlePaddle其实担心的就是它的技术深度,感觉造轮子没必要,但是其实真的是有必要的,无论是TensorFlow或者PyTorch,都有很明显的缺点(PyTorch我不熟悉,下面的说法是和一些资深小伙伴沟通了解的),TensorFlow的Sparse能力、大规模分布式的能力、Embedding内存利用率上,真的是一言难尽(很想吐脏话,但是感觉对技术同学不尊重,也有可能是我自己环境的问题,总之体验差),PyTorch也有类似的问题,我理解他们的关注点其实在于解决Dense计算下的问题,而在Sparse下,并未做太深的尝试(当然你能像阿里妈妈那样花费大量人力来改造TF,也是没有问题的)。而PaddlePaddle在很多点上十分吸引我(以下是我真实使用下的感受,可以背书):

  • 通用的分布式能力,Fleet是一套特别好的东西,当然现在其实易用性上还是有问题的,它提供一套通用的分布式能力,尤其在sparse的问题上,我在自己的业务场景上做过全流程的可行性分析,理论上可支持百亿级别的特征样本训练,并且在相关的扩展上,比较容易,比如增加一些元信息来帮助你去管理你的特征,相关的接口,可以直接从任意的op来导出模型,你可以很容易的将模型切分成embedding与submodel,这一点现有的开源框架支持的都不好,PaddlePaddle的Fleet大家可以尝试下,当然前面也提到易用性上,有点问题,我们团队在开始接入PaddlePaddle Fleet来解决我们的问题时,遇到一个Grpc的坑,和PaddlePaddle相关的同学查了快三周才真正定位到,所幸现在都fix掉了,直接使用Brpc体验会好很多;
  • 不仅仅是PaddlePaddle本身,相关的衍生的包也支持Fleet,比如PGL(当然现在有一些版本、动静态图的问题),其实在Graph Learning的问题上,Message Passing的解决思路其核心就在于解决sparse computing的问题, Fleet在PGL上提供的能力,恰好能很好地解决sparse的额问题,它提供了一套通用的分布式图存储、分布式Sampling还有分布式训练的接口,而不是case by case 解决大规模图计算的问题,这块,我觉得PaddlePaddle做的要好很多;
  • 前两点其实都是在解决分布式上的优势,最后一点我感受的是企业级的开发包,我自己试用过paddle video(一个repo), 虽然有一些周折(动静态图问题),但是从我第一次阅读repo里面提供的文档,到最后我将TCN在我们内部真实的数据集上跑出来, 我总共花费不到三天的时间(包括提取帧这些耗时的操作),PaddlePaddle在这块付出在我看来有点丧心病狂,我在参加Wave Summit,有问过一个小伙伴,PaddlePaddle提供那么多可以直接使用的企业级开发包:PaddleOCR、PaddleClas, 它这个以后商业化怎么做呀,感觉都share出去了, 而且效果还蛮不错,PaddlePaddle的小伙伴回答让我惊呆了,PaddlePaddle至少到现在完全没有商业化的任何打算,这方面,从一个技术同学角度上来讲,百度确实是相当之良心了, 但是作为一个在互联网闯了不算短的时间的从业人员,能够不计商业化去做一些技术工作,真的是蛮幸福的。

说了那么多,总结下,大家可以去尝试一下,有好有坏,但是轮子这种工作其实想想我们自己做也可以,外国的月亮也不是那么远,更何况好多也都是咱们华人面孔。


好好学习,天天向上,不管是2021还是2031,都要写代码呦