基于基于Spark的异构分布式深度学习平台的异构分布式深度学习平台
导读:本文介绍百度基于Spark的异构分布式深度学习系统,把Spark与深度学习平台PADDLE结合起来解决PADDLE与业务
逻辑间的数据通路问题,在此基础上使用GPU与FPGA异构计算提升每台机器的数据处理能力,使用YARN对异构资源做分
配,支持Multi-Tenancy,让资源的使用更有效。
深层神经网络技术最近几年取得了巨大的突破,特别在语音和图像识别应用上有质的飞跃,已经被验证能够使用到许多业务
上。如何大规模分布式地执行深度学习程序,使其更好地支持不同的业务线成为当务之急。在过去两年,百度深度学习实验室
在徐伟的带领下开发了分布式深度学习平台PADDLE(Parallel Asynchronous Distributed Deep Learning),很好地满足了许
多业务需求。但由于PADDLE是独立的深度学习平台,不能很好地跟其他业务逻辑结合,导致PADDLE与其他业务逻辑间的数
据通路成为了性能的瓶颈。为了让更多的业务使用上深度学习技术,我们开发了Spark on PADDLE平台,让PADDLE变成百
度Spark生态系统的一个功能模块。在第一版完成之后,我们发现CPU计算能力已经满足不了百度巨大的数据量需求,于是我
们在Spark on PADDLE的基础上增加了对异构的支持,充分利用了GPU和FPGA等资源去加速PADDLE上的作业。
深度学习系统PADDLE的设计
PADDLE是一个成熟的分布式深度学习平台,广泛应用于百度的图像识别、自然语言理解、语音、无人车等领域,其主要的特
点是训练算法高度优化,支持多GPU/CPU训练,训练效率高,对稀疏特征有独特的优化。
现有的深度学习平台,一般都是通过单机方式进行训练,如开源的Caffe平台也是通过单机多卡的方式进行训练。但当数据或
者模型规模上去以后,要提高训练效率,必然要进行分布式训练,主要有数据并行和模型并行两种方法。
数据并行是分布式深度学习用得最多的并行方法。所谓数据并行,就是因为训练数据规模非常大,需要把数据拆分,把模型分
布到N个机器训练。但是因为最终训练的是一个模型,同时每个机器只能分配到一部分数据,训练的同步和收敛性必须得到保
证。最经典的做法是在《Parameter Server for Distributed Machine Learning》中提到的用参数服务器(Parameter Server)
的方法。具体的想法是用模型参数服务的方法来同步参数的更新,每个参数服务器只负责同步公共参数的一部分。举个例子来
说,如果模型M,被分布到N个机器上面训练,每个机器拿到一部分数据.
假设训练的参数集合是W,每个机器首先进行本地训练,假设他们初始化参数都是
根据
每台机器都能算出相应的代价函数的梯度,一般按照单机神经网络反向传播的方式,每个层都可以梯度来得到参数的修正值,
这样参数就变成
因为是多机,每个节点对参数的修正量不同,就会多了一个步骤把各自参数的修正量push给参数服务器,由它统一决策下个
训练循环的修正量,这样大家的训练模型就会被统一起来。
图1 数据并行
图1展示了深度学习数据并行的部署架构。一般分为以下步骤;
1.训练数据预处理,把数据切分为data shards;