本文主要从框架概览、系统架构、编程模型、分布式架构、框架对比这五大方面比较TensorFlow和PaddlePaddle框架。作为国际两大搜索引擎研发的深度学习框架,使用侧重点不同,却同样提供了优雅简洁的设计架构,并且还在不断发展。
对于PaddlePaddle来说,它的易用性和本土性、快速业务集成性,对国内以速度致胜的互联网公司是一个非常有利的武器;而TensorFlow的灵活性和相对偏科研性,是AI研究领域的一大利好。
框架概览
PaddlePaddle的研发始于2013年,伴随着百度广告、文本、图像、语音等训练数据的快速增长,以及百度外卖、搜索、无人驾驶领域的算法要求,百度深度学习实验室在基于单GPU训练平台的基础上,研发了Paddle(Parallel Asynchronous Distributed Deep Learning)这个多机并行GPU这个训练平台。
PaddlePaddle自开源以来,它的设计和定位就一直集中在“易用、高效、灵活、可扩展”上。正如官网的设计定位: An Easy-to-use, Efficient, Flexible and Scalable Deep Learning Platform 。
PaddlePaddle框架的开源始于2016年9月份,它最大的特点和定位是easy to use,因此对很多算法进行了完整的封装,不仅是针对只目前现成的CV、NLP等算法 (如VGG、ResNet、LSTM、GRU等),它在模型库models(https://github.com/PaddlePaddle/models)模块下,封装了词向量(包括Hsigmoid加速词向量训练和噪声对比估计加速词向量训练)、RNN 语言模型、点击率预估、文本分类、排序学习(信息检索和搜索引擎研究的核心问题之一)、结构化语义模型、命名实体识别、序列到序列学习、阅读理解、自动问答、图像分类、目标检测、场景文字识别、语音识别等多个技术领域人工智能的通用解决方案。
上述的每个解决方案都是针对某个技术场景而设计,因此,开发者可能只需要略微了解下源码原理,按照官网的示例执行运行的命令,更换成自己的数据、修改一些超参数就能运行起来。并且因为没有向用户暴露过多的python接口,理解和使用起来还比较容易。但是因为侧重在使用,在科研或者新增功能方面,如果修改算法,需要从框架的C++底层开始实现。
它的第二大特色是分布式部署,并且是目前是唯一很好的支持Kubernetes的深度学习库。在本文的“分布式架构”中会进一步说明。
TensorFlow官网上对TensorFlow的描述是 An open-source software library for Machine Intelligence,一个开源的机器学习库。
从使用人数和活跃度上来说,TensorFlow是目前最流行的人工智能的算法引擎。它提供了深度学习的基本元素的实现,例如conv、pooling、lstm和其它的基本算子。如下图是TensorFlow支持的常用算子:
2016年4月,TensorFlow的0.8版本就支持了分布式、支持多GPU运算。2016年6月,TensorFlow的0.9版本改进了对移动设备的支持。
2017年2月,TensorFlow的1.0正式版本中,增加了Java和Go的实验性API,以及专用编译器XLA和调试工具Debugger,还发布了tf.transform,专门用来数据预处理。
同时,围绕着模型部署推出了TensorFlow Serving,用于将算法动态部署到线上;以及逐步完善的类似于scikit-learn功能的tf.contrib.learn。并且还推出了“动态图计算”TensorFlow Fold,这是被评价为“第一次清晰地在设计理念上领先”
用户还可以使用谷歌公司的PaaS TensorFlow产品Cloud Machine Learning来做分布式训练。现在也已经有了完整的TensorFlow Model Zoo。
2018年1月,TensorFlow已经支持到1.5.0版本,完整开放了TensorFlow Lite移动端应用以及动态图机制E