解秘:百度PaddlePaddle深度学习框架和搜索引擎基础架构

  前不久在百度世界大会上,百度首席科学家吴恩达首次宣布对外开放百度深度学习平台,以推动人工智能技术的快速普及,把在搜索、图像识别、语音识别、自然语言处理、用户画像及情感分析等人工智能领域的优势整合升级,为程序开发者提供了一个功能更全、效果更好的深度学习框架。

  其实,百度很重视对于开源软件的使用,也愿意把内部的技术以开源的形式贡献出来,正如在10月22号由百度开发者中心、百度开源委员会联合举办的第67期“百度开源专场”技术沙龙上,来自百度的工程师 于洋和颜世光 ,分别分享了百度开源的两个最新项目: PaddlePaddle 百度深度学习框架和百度搜索架构开源产品线(例如 Tera、BFS、Galaxy 等),并结合具体的产品案例,分享百度开源技术最新实践经验。目前这些项目都已经在 github/baidu 上开源。

  什么是 PaddlePaddle 深度学习平台?

  首先做个简单的介绍,PaddlePaddle 是百度自主研发的性能优先、灵活易用的深度学习平台,是一个已经解决和将要解决一些实际问题的平台。目前百度有超过30个主要产品都在使用 PaddlePaddle。关于机器学习、深度学习和浅层学习的内容就不详细介绍了,接下来重点讲述一下 PaddlePaddle 的整体架构。

  关于 PaddlePaddle 整体架构

  说到 PaddlePaddle 的整体架构,主要从这几个方面入手:多机并行架构、多 GPU 并行架构、Sequence 序列模型和大规模稀疏训练。多机的并行架构和序列模型的实现都是实现神经网络最复杂的东西,那么具体怎么实现全连接?

  PaddlePaddle 是2013年启动时比较流行的架构是 Pserver 和 Trainer 的架构。在多机并行架构中数据分配到不同节点,下图里灰色部分表示机器,方框里表示一个进程,Pserver 和 Trainer 是分布在两个进程里,中间的部分是网络通讯连接。

物联网

  下面来介绍一下什么是大规模稀疏模型训练。稀疏模型训练是说输入数据是稀疏的,由于稀疏输入,那么灰色的神经元和连接在训练中都没有作用,灰色神经元的输出是0,灰色连接的梯度是0,梯度是0的话,简单的 SGD 不更新权重。所以只有蓝色的连接有价值,需要从 PServer 服务器获得最新参数,需要计算梯度,并将梯度传送回参数服务器。(如下图)

物联网

  除了上面所提到的,还有两外两种情况下的稀疏模型:

  大规模稀疏模型(多机器)——每个 Trainer Prefetch 出自身需要的参数和服务器通信。

  大规模稀疏模型(正则化)——简单的 SGD 确实在梯度为0的时候,不去更新参数,但是加上正则化就不一定了;比如L2正则化,就要求参数的2范数持续减小。

  PaddlePaddle 实现时的一些思考

  基于 OP(操作)还是基于 Layer(层)?

  基于 OP——从矩阵乘法配起,一步一步对应一个一个数学运算。

  基于层——直接写一个全连接层,LSTM 层。

  基于 OP 的优势 Tensorflow——更灵活,更可以让研究人员构造新的东西

  基于 Layer 的优势 Caffe——更易用,让细节暴露的更少;更容易优化。

  基于 OP 还是基于 Layer?——支持大部分 Layer,但是也支持从 OP 开始配网络(矩阵乘发,加法,激活等等);对于成型的 Layer(LSTM)使用 C++重新优化。原因在于,PaddlePaddle 是企业解决现有问题的框架,不是纯粹的科研框架;企业需要性能,也需要灵活性。

  多机通信基于 MPI 还是 Spark 还是 K8s + Docker?PaddlePaddle 底层通信不依赖于任何网络框架,PaddlePaddle 的网络任务需求相对简单,根源在于任务周期短(连续运行几周);任务可以失败(多存checkpoint)。同时,PaddlePaddle 的网络需要高性能,从头手写网络库更方便性能调优,RDMA 可以更好的支持。同理,PaddlePaddle 底层不依赖任何 GPU 通信框架。

  百度搜索开源基础架构

  颜世光是百度搜索基础架构负责人,在这次沙龙上介绍了百度当前的这套搜索引擎,以及搜索引擎背后的事件。重点部分是百度这套开源的基础架构软件站,它包括分布式数据库、文件系统、管理系统、分布式协调服务、网络通信框架。下面来一一介绍。