序言:说点历史
十年前,当我在学校跟着老板苦哈哈地做图像识别的时候,我想不到十年后的今天机器学习技术有了如此长足的发展,而AI的概念也由之深入人心。冈萨雷斯的图像处理,是我们曾经挑灯夜读的经典;opencv和C++或matlab是我们仅有的工具;后来我们又有了libsvm&liblinear;但即便在刚毕业工作的时候,想要实现一个稍复杂的算法也要遍查论文和各种博客。再后来,我们有了github,这一技术人的军火库;我们用起了python,毕竟人生苦短;我们也开始有了sklearn,算法人的工具箱内趁手的工具越发多了起来。
当深度学习发展起来以后,相似的一幕又一次上演,最早自己写反向传导,测试的时候战战兢兢,深怕哪里写错一点功亏一篑。到后来,有了caffe、有了theano、有了TensorFlow、有了mxnet、有了上层封装的keras,也有了越来越多的model zoo。后来的事,大家都知道了,在这些炙手可热的平台上,研究人员和工业界从大量的重复体力劳动中解放出来,得以将自身智慧更多地投入到更具创造性的研究与业务中去,并做出了很多非常棒的结果。
回首这十年,人工智能可以说经历了从刀耕火种时代到第二次工业革命这样的巨变,而我们也正站在新的黎明之前。
一、 PaddlePaddle是什么
我们说了很多历史,也提到了一些舞台上正兴的机器学习平台,而这篇文字,是想介绍一下一个新的选择:来自百度的paddlepaddle。Paddle(Parallel Distributed Deep Learning,并行分布式深度学习)。paddle的原意是“用浆划动”,其logo也是两个划船的小人,莫名萌出一脸血……
(此处加入logo)
书归正传,从2016年9月27日发布至今,PaddlePaddle也有一年多的时间了,而其前身是百度于2013年自主研发的深度学习平台,且一直为百度内部工程师研发使用。可以认为是一个类似google、facebook等工业优而开源的又一个典范。
这里不妨先从全局看一批数据。一般开源项目的热度指标从github可以略见一斑,paddle的数据是这样的(截止17.12.22):
-star(可以认为是技术人的点赞)有6099人;
-forks(想自己基于此做修改)有1599人;
-commits(代码更新次数)有10073,也就每天更新几十次吧;
-以及90个contributors(代码贡献者)。
这样的受关注程度,和更新的频次,即使和现在如日中天的TensorFlow比,虽说整体热度仍有差距,但PaddlePaddle也处于迅猛的上升期中。除了Github直接的用脚投票,在知乎等平台上,PaddlePaddle也引起了热烈的讨论,包括架构层面和应用层面:
caffe的设计者贾扬清,评价说“很高质量的GPU代码”、“非常好的RNN设计”、“设计很干净,没有太多的abstraction,这一点比TensorFlow好很多”、“总之是一个非常solid的框架,百度的开发功底还是不错的”,这可以算是技术人之间的惺惺相惜了吧。
CPU/GPU的单机和分布式的模式也是开发者们关注的点,毕竟得益于原来parameter server的工作,而TensorFlow不能对多机CPU有很好的支持。以及速度快,显存占用小等特性,这些在github的benchmark跑分中提到的优势,也被开发者们着力关注到了。
框架和功能的细节,我会在第二节挑一些感兴趣的点,仔细剖析一下。应用层面,是作为使用者最为关心的,有哪些实际的业务中,用到了PaddlePaddle,用得如何,我们将在第四节揭晓。功能和优点提到了不少,但是现实是PaddlePaddle确实还有更广大的开发者群体需要触达,才能发挥更大的影响力和作用。
所以在第三节我也打算聊聊paddle的劣势,以及在第五节探讨一下这个优秀工具的发展路径。
二、 PaddlePaddle探秘
每一个成功的开源项目,文档和教程都必不可少,而且很大程度上是项目易用性的保证、是深度钻研的辅助,更为项目的成功增色。PaddlePaddle当然也是这样,它有自己一套较为详实的辅助材料:
单从文档形态的角度,相较于TensorFlow和keras的中文文档基本是爱好者翻译而成,paddle的文档来自于百度一线的工程师,多少会觉得亲切和信赖稍多一些不?至于文档的内容,从全面性的角度出发,一般都很庞杂,所以,我想抽取其中比较感兴趣的几个点,做一下介绍:
① Docker
如果说docker是什么,搞纯算法的人一般不太接触的话,那提到virtualenv、anaconda或者winpython,应该很多人都有所耳闻,或者自己就确实在用。无论是在Linux下,还是在Windows下,科研工具的迭代一日千里(真的比游戏什么的更新快多了),带来的问题就是,版本间的依赖问题、配置问题,以及由此带来的安装和使用的方便性问题。尤记得,Github上的opencv安装脚本,都有大量的star。我自己在6、7年前也被scipy和numpy之流摆了一道。
数据和算法科学家本着应该把时间花在更有价值的研究和业务任务上来的目的,类似虚拟化发布地使用,进一步方便了大家,和虚拟机不同的是用docker的方式,性能和直接安装在本机是一样的。paddle的官网上是这么写得:
“为了开发PaddlePaddle,我们需要:
A.一台电脑,可以装的是 Linux, BSD, Windows 或者 MacOS 操作系统,以及
B.Docker。不需要依赖其他任何软件了。即便是 Python 和 GCC 都不需要,因为我们会把所有编译工具都安装进一个 Docker image 里。”
简单来说就是:
1、下载CPU或GPU版本的镜像:
比如CPU版本的就是docker pull
2、编写适用于Paddle的程序:
可以参考
顺便说一句,这本书也可以以docker方式安装,并且支持Jupyter Notebook方式运行。
3、运行(假设/home/work/train.py为第二步完成的程序):
cd /home/work
docker run -it -v $PWD:/work paddlepaddle/paddle /work/train.py
进入docker以交互的方式执行和调试代码也是可接受的。
②感兴趣的业务
如TensorFlow和keras,都有自己的example模块,主要功能有二:
1、提供一个demo的作用,对主要框架模块的使用进行演示;
2、解决一些实际的问题,方便部分用户直接使用。
比如,针对文本分类的任务,keras对于imdb数据的情感识别,提供了cnn、lstm、cnn_lstm、fasttext等多种方案,不仅对不用的网络模型和组合的使用做了演示,稍微改一改其实就可以用到实际的业务中去。以及图像方面keras下minst手写数字识别对应的相关任务demo代码就更多啦。
paddle自然也有类似的模块,体现在两块:
1、 前文提到的PaddlePaddle – Book
它提供了从linear regression到mnist手写数字识别;从基于cnn的图像分类到nlp领域的word2vec实现(做nlp的同学肯定记得分布式表述相较于onehot表述的优势,以及king-queen=man-woman的例子);以及“个性化推荐”、“情感分析”、“语义角色标注”、“机器翻译”等典型应用。
不得不说,作为一个算法或机器学习的初学者,且不论使用何种平台开始自己今后的学习和研究,这个book里对业务场景的描述、对算法背景和流程的介绍、以及提供的数据集,都是非常值得看一看得。