赞
踩
之前我们已经深入探讨了深度学习与大数据的关系能够为研究领域带来重大变化的原因。此外,一个集中的系统并不会随时间的推移明显改善这种关系。因此,跨服务器的深度学习网络分布已经成为当前深度学习实践者的主要目标。然而,在分布式环境中处理大数据总会面临一些挑战。在往期,我们已经对大部分挑战进行了深入的讲解,其中包括处理更高维度的数据、具有很多特征的数据、可用于存储的内存量、处理海量大数据集等。此外,大数据集对CPU和内存具有很高的计算资源需求。因此,缩短处理时间俨然成为分布式深度学习的一个非常重要的准则。分布式深度学习的核心和挑战如下:
1.如何将数据集的块保留在节点的主内存中?
2.如何保持数据块之间的协调,以便以后一起移动,从而获得最终结果?
3.如何让分布式和并行处理安排并协调的极其合理?
4.如何跨数据集实现协调的搜索,已实现高性能?
使用大数据集的分布式深度学习的方式有很多。然而,当我们谈论大数据时,在过去5年内为应对大部分挑战做出巨大贡献的框架正是Hadoop。Hadoop无疑是最受欢迎且受众者最为广泛的框架。其允许并行和分布式处理,与其他的传统框架相比,Hadoop可以更为高效的存储和处理海量数据。包括Google、Facebook在内的几乎所有主要的技术公司都在使用Hadoop,从而以高级的方式来部署和处理数据。Google设计的需要用到海量数据的软件几乎都会用到Hadoop。Hadoop的主要优势是可以在数千台服务器上存储和处理海量数据,且得到规整的结果。根据目前深度学习的现状,我们普遍认为深度学习确实需要这种分布式计算能力,以根据输入数据生成一些令人惊叹的结果。大数据集可以分解为多个块,并分布在多个商业软件上以进行并行训练。此外,深度学习神经网络的整个阶段可以划分为多个子任务,然后可以并行处理这些子任务。
Hadoop已经成为所有数据池的融合点。将深度学习转移到数据,这一需求已存在于Hadoop中,并且已经变得极为典型。不信的话你可以打开招聘网站查询深度学习算法工程师的要求,有很多都需要你熟练使用Hadoop,其重要性可见一斑。
Hadoop基于移动计算比移动数据更便宜这一理念进行操作。允许跨商业服务器集群进行大规模数据集的分布式处理。还提供了有效的负载平衡,具有非常高的容错能力,并且具有极高的水平伸缩能力。他可以检测和容忍应用层中的故障,因此非常适合在商业硬件上运行。为了实现数据的高可用性,Hadoop的复制因子默认为3,也就是说每个块的副本放在另外两台独立的机器上。因此,如果一个节点出现故障,则可以从其他另两个节点立即进行恢复。根据数据的价值和数据的其他相关要求,可以轻松地增加Hadoop的复制因子。
因为最初主要用完成批处理任务,所以Hadoop主要适用于深度学习神经网络,后者的主要任务是查找大规模数据的分类。学习如何进行数据分类的特征选择主要是在大规模数据集上进行的。
Hadoop易于配置,可以根据用户需求轻松地进行优化。例如,如果用户想要保留更多的数据副本以获得更好的可靠性,那么可以增加复制因子。然而,副本数量的增加会增加存储需求。这里不再对数据的特性和配置进行过多说明,读者有需要时请自行进行更为深入的学习,接下来我们主要讨论在分布式深度神经网络中广泛使用的Hadoop部分。
在Hadoop的新版本中,我们主要使用的部分是HDFS(Hadoop Distributed File System即Hadoop分布式文件系统)、Map-Reduce以及YARN(Yet Another Resource Negotiator即另一种资源协调者)。其中YARN已经很大程度上主导了Hadoop的Map-Reduce。目前,YARN的责任是将任务分配给Hadoop的Data节点(数据服务器)。另一方面,HDFS是一个分布式文件系统,分布在名为NameNode的集中式元数据服务器下的所有Data节点上。为了实现高可用性,更高版本的Hadoop框架集成了二级NameNode,其目的是在某些检查点后从主NameNode获取元数据的副本。
Map-Reduce范式是Google于2004年开发的一种分布式编程模式,它与在机器集群上使用并行和分布式算法处理大数据集相关联。整个Map-Reduce应用对大规模数据集来说都是很有用的。Map-Reduce有两个主要组件,分别是Map和Reduce,还包括一些中间阶段,如混洗、排序和区分。在Map(映射)阶段,大型输入作业被分解为较小的作业,每个作业分配到不同的核心。接着在这些机器上的每个小任务上执行操作。Reduce(规约)阶段将所有分散和转换后的输出放在一个单独的数据集中。
Map-Reduce的主要思想均是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式编程的情况下将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(规约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
深度学习算法在本质上是迭代的,即模型从优化算法中学习,经过多个步骤让误差最小。对于这些类型的模型,Map-Reduce应用程序似乎不如在其他用例中那样高效。
迭代Map-Reduce是下一代的YARN框架(与传统的Map-Reduce不同),仅通过一次Map-Reduce即可对数据进行多次迭代。虽然迭代Map-Reduce和Map-Reduce的架构设计上是不同的,但在一定高度上了解它们的架构还是很简单的。迭代Map-Reduce只不过是一个Map-Reduce操作序列,其中第一个Map-Reduce操作的输出会成为下一个操作的输入,以此类推。在深度学习模型中,Map阶段将特定迭代的所有操作放置在分布式系统的每个节点上,然后将大量输入数据集分发到集群中的所有计算机。模型的训练是在集群的每个节点上执行的。
在将聚合的新模型发送回每台计算机前,Reduce阶段将收集Map阶段的所有输出,并计算参数的平均值。迭代Reduce算法会反复迭代相同的操作,直到学习过程完成,且错误最小化到几乎为零。
下图比较了两种方法的高级功能。左图显示了Map-Reduce的框图,右边是迭代Map-Reduce的框图。每个“处理器”都是一个工作的深度网络,正在从较大数据集的小块中学习。在“Superstep”阶段,参数的平均值在整个模型被重新分配到整个集群前完成。
YARN的主要作用是将作业调度和资源管理从数据处理中分离开来。因此,数据可以通过Map-Reduce批处理作业继续在系统中并行地进行处理。YARN有一个中央资源管理器,主要根据需要管理Hadoop系统资源。节点管理器(特定于某个节点)负责管理和监视集群的各个节点的处理。该过程只有ApplicationMaster控制,它监视来自中央资源管理器的资源,并与节点管理器一同监视和执行任务。下图展示了YARN的架构。
Hadoop的所有这些组件主要用于分布式深度学习,以克服前面提到的所有挑战。接下来将展示为提升分布式深度学习性能所需满足的标准。
总结一下,分布式深度学习设计的主要特征大致如下:
1.小批量处理。在分布式深度学习中,网络必须并行且快速地获取和分析数据。为了更精确地处理和提供结果,集群的每个节点应该一次接收大约10个元素的小块数据。
例如,如果YARN的主节点正在为200GB的大数据集协调20个工作者,那么主节点会将数据集分为20个10GB的小批量数据,从而为每个工作者分配一个小批量数据。这些工作者将并行处理数据,并在计算完成后立即返回结果给主节点,主节点汇总所有结果,结果的平均值将重新分配到每个工作者。
相较于100GB或200GB的大批量数据,深度学习网络能够更好地处理近10GB的小批量数据。小批量数据使得网络能够从数据的不同方向进行深度学习,随后重新编译,从而为模型提供更广泛的知识。
另一方面,如果批量处理规模过大,网络将尝试快速学习,这会使得误差最大化。相反,较小批量的数据会降低学习速率,并减小网络在趋近最小误差率时出现分歧的可能性。
2.参数平均。参数平均是分布式深度网络训练的关键操作。在网络中,参数通常是节点层的权值和偏移量。正如前文提到,一旦对工作者完成训练,它们会将不同的参数返回到主节点。随着每次的迭代,参数会被平均而后更新并发送回主节点,以求得更优解。
参数平均的顺序过程如下:
1.主节点配置初始网络并设置不同的超参数。
2.基于训练中的主节点的配置,大数据集被分割为几个较小的数据集。
3.对于每个小数据集执行以下操作,直到错误率接近零:
主节点将参数从主节点分配到每个单独的从节点;
每个从节点使用专门的数据块开始训练模型;
计算参数的平均值并返回给主节点。
4.训练完成,主节点将得到训练网络的一个副本。
值得一提的是,分布式训练的情况下,参数平均会有以下两个主要优点。
1.通过生成同步结果来实现并行。
2.有助于通过将给定数据集分成多个较小的数据集来防治过拟合。然后使网络习得平均结果,而不仅仅是汇总来自不同较小批次的结果。
下图展示了小批量处理和参数平均运算的组合示意图。
拓展阅读:深度学习的开源分布式框架Deeplearning4j
https://blog.csdn.net/weixin_43106248/article/details/100803436
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。