从DistBelief看深度学习早期的并行化

从DistBelief看深度学习早期的并行化

背景

DistBelief是TensorFlow的前身,与TF的名扬天下如雷贯耳相比,DistBelief简直是不值一提,但是仔细琢磨就能发现,大部分深度学习框架的问题,在DistBelief里面就已经有了回答。其中就有今天要讨论的并行部分。

一言以蔽之,深度学习,或者说机器学习,在工程上最大的难题就是满足大规模数据的要求。与摩尔定律相比,数据的爆发显然更令人惊讶,所以如何处理大规模数据,并从中学习到一个好的模型,是一个非常严肃的问题。

大规模数据首先是大规模的存储和计算,这个问题在Map-Reduce等分布式存储框架出现后,可以看做是有解问题。

随后难题是如何解决大规模参数更新。举个例子,假设某个模型有100亿的参数量,单机是完全不可能,而彼时常用的大数据框架,也无法很好的解决深度学习模型中的迭代更新问题,另外,深度学习模型(视觉)大部分是有向无环图,如何挖掘这个结构的特点,并提供最优的性能?

并行化

深度学习的并行化可以大体上分为两个部分:模型并行和计算并行。计算并行指的是针对具体的计算过程,进行函数级的并行(多线程)以及数据级的并行(向量操作等),这部分并行都在底层Operation Kernel中实现。模型并行指的是对模型进行划分,将一个模型分成若干份,每一份单独计算,并做参数同步,来达到快速训练大模型的目的。

模型并行

模型并行的过程不复杂:将模型按照某个规则划分成若干块,分别部署到每个机器上,然后在计算的时候,按照顺序每部分分别计算,存在依赖的地方,通过一个公共机器来提供数据的同步,就搞定了。

看起来似乎是合理的,可以满足大规模模型的计算需求,不管是部署还是训练,看起来都可以通过这个最简单的框架来搞定。

分布式优化方案Downpour SGD

最大的问题是同步!同步有什么问题?一是效率,二是容错。同步决定了整体效率只能和系统中效率最低的机器保持一致,而且一旦某台机器出现问题,其他机器只能强行暂停等待。针对这两个问题,DistBelief提出了使用Downpour SGD来解决:
Downpour in Distbelief

Downpour SGD首先是Parameter Server架构,简单来说,就是将机器分为两类,一类Server用来保存并更新模型参数,另一类Worker用来完成模型的Kernel计算。将模型Graph划分部署到多个机器上,每个机器单独计算,每次处理训练数据前,先从Server拉取参数,然后处理数据,再将参数推到Server。

进一步,每一个机器的计算是完全独立的,互相不影响,异步完成参数的拉取和上传,甚至,拉取和上传这两个操作也是

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值