百度技术沙龙第67期 百度开源专场

本文做者:HelloDevelopergit

具体的产品案例,分享百度开源技术最新实践经验。目前这些项目都已经在 github/baidu 上开源。github

什么是 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 通讯框架。

百度搜索开源基础架构

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

当前,用户经过互联网搜索引擎的指望在不断的变化,整个搜索引擎的指望从以前的几周变成如今的几分钟,以前几周以内能够处理几百亿的数据,如今要在几分钟以内处理几万亿的数据,这是个鲜明的矛盾。其实解决方案就是构建一个大数据处理平台,也称之为“基础架构系统”。这个基础架构系统目标首先是海量的目标数据。其次就是在于集群利用率的保证,这个利用率多是 CPU 利用率,它会为你节省成本。

这里能够简单介绍一下百度内从事开发的平台——baidu stack(如上图)。这个平台分三层,最的底层是网络通信,是一个高性能的 RPC 框架,它会把全部的网络问题屏蔽掉,让上层的系统在开发中不须要考虑网络拓扑。中间一层是基础服务,包括分布式文件系统,它解决了数据处理。

第二就是集群管理系统,它管理的数据可让程序部署变得代价很小。第三是分布式的协调服务,一方面用作服务发现,另外就是分布式。最上层是核心数据库和数据处理系统。

在理解上能够将这套系统和 Hadoop 相关的系统类比。从中间这层提及,Hadoop 有 HDPS,Hadoop 在分布式服务这块使用 Cukaber,好比也有 Storm、Spark 这些。整个基础架构系统的设计思想有两个,第一是分层。不管是 Hadoop 系仍是谷歌,他们都使用相似的思想,这个思想主要是分工和借用,让不一样分工解决不一样问题。

另一个思想就是高效,解决用户对处理速度的指望。百度主要使用 SSD、万兆网卡,这套分布式基础架构彻底是用 C++实现的。首先是核心的数据库 Tera,这里列了 Tera 数据库的核心功能,包括全局有序、自动分裂、合并、支持快照。

Tera 的架构能够看(如上简图),从图上咱们能够看到它有核心就是绿色两部分,是 Master 和 TableServer,提供整个数据节点都是 TableServer,全部的访问通过 Master,让它扩展到几千台服务器中。

灰色的底层数据都是在分布式文件系统上,自身没有任何数据,被设计成无状态,当一个 TableServer 宕机后,会从另一个机器拉取数据,不会有任何损失。一样底层的分布式文件系统能够提供很大的帮助,它是经过 Nexus 作的。

这里简单介绍一下 Tera 的核心技术。⽔水平扩展方面能作到无单点;在线分裂、合并;⾃自动负载均衡;经过 LSM-Tree 作到实时同步,而且 Tera 还具备多语言支持的特色。Tera 在百度内部有很是普遍的应用,例如百度的网页库, 百度将万亿量级的网页存储在 Tera 中。

这里再介绍一下如上图的百度文件处理系统(BFS),不只在百度,BFS 在外部的使用价值也是很高的。那么 BFS 具备哪些特色呢?首先是持续可⽤:分布式 Master,多机房数据冗余。其次就是实时高吞吐:慢节点处理,元数据管理。

原文连接地址:https://developer.baidu.com/topic/show/290220