您好、欢迎来到现金彩票网!
当前位置:迪士尼彩乐园 > 概率并行算法 >

通向分布式深度学习系统

发布时间:2019-05-30 20:02 来源:未知 编辑:admin

  通常来说,分布式机器学习(DML)是一个跨学科的领域,它几乎涵盖计算机科学的各个领域:理论(譬如统计学、学习理论、优化论)、算法、以及机器学习核心理论(深度学习、图模型、核方法)。在这些子领域中,有无数的问题需要探索和研究。另外,分布式能够很好地利用大数据,它已经成为目前工业界最广泛应用的机器学习技术。

  为了最容易的理解 DML,我们将它分成四类研究问题。但请注意,这些类别并非是相互排斥的。

  由于大多数机器学习任务本质上是在减小一组训练数据的「损失」,我们就更多关注以下问题:

  为了研究这些问题,研究人员采用了理论分析工具,如优化理论或统计学习理论。然而,在大规模机器学习的背景下,我们给出了更多的计算资源,我们的目标是通过并行或分布式计算技术利用额外资源来加速(即减少模型的训练/测试时间),我们也很想弄清楚另一组看上去相似但不同的问题:

  通过分布式或并行训练,我们的模型和参数是否保证在没有加速的情况下收敛到相同的状态?

  如果他们没有收敛到同一个状态,那么我们离原始解决方案有多远,我们距离真正的最优解决方案有多远?

  如果我们将分布式训练和非分布式训练进行比较到底能有多快?我们如何评估这个?

  我们如何设计培训过程(例如数据采样,参数更新)以确保良好的可扩展性和良好的收敛性?

  这一研究重点是开发新的机器学习模型或调整(扩展)现有模型以处理更大规模的数据。

  还有一些特定的应用问题,如大规模图像分类,它需要扩展非常具体的模型/算法的研究。大多数这些解决方案可以直接部署到生产线中。

  这一系列研究相当直观:如果我们的模型或算法无法在一个节点上完成计算工作流程,我们可以尝试开发分布式系统以使用更多节点(和更多的计算资源)。但是要做到这一点,我们需要面对很多系统问题:

  一致性:如果多个节点同时朝着一个目标努力,我们如何确保它们的一致?例如,如果他们一起解决一个优化问题,但却有着数据集的不同分区呢?

  容错:如果我们将工作负载分配到 1000 个计算节点的集群,那么 1000 个节点中的一个崩溃会怎么样?有没有办法能解决它而不只是从任务的最开始重新启动?

  通信:机器学习涉及大量 I / O 操作(例如磁盘读写)和数据处理过程 - 我们是否可以设计存储系统,以便为不同类型的环境实现更快的 I / O 和非阻塞数据处理程序(例如,单节点本地磁盘,分布式文件系统,CPU I / O,GPU I / O 等等)?

  资源管理:构建计算机集群的成本非常高,因此集群通常由许多用户共享。我们应该如何管理集群并适当地分配资源以满足每个人的要求,同时最大限度地提高使用率?

  编程模型:我们是否应该按照与非分布式机器学习模型/算法相同的方式对分布式机器学习模型/算法进行编程?我们能否设计一种需要更少编码并提高效率的新的编程模型?我们可以用单节点方式编程,同时使用分布式计算技术自动放大程序吗?

  这就是我们专注于 Petuum 研究方向的方面。事实上,我们今天使用的大部分主流 ML 软件都位于同一方面(例如 GraphLab,TensorFlow 等)。

  分布式深度学习是通用分布式机器学习的一个子领域,由于其在各种应用中的有效性,最近变得非常突出。在深入分析深度学习的细节及其解决的问题之前,我们应该定义一些重要的术语:数据并行性和模型并行性。

  数据并行性是一种通过分区数据启用的并行化技术。在数据并行分布式计算中,我们首先将数据划分为几个分区,其中分区的数量等于工作机器的数量(即计算节点)。然后,我们让每个工作者拥有一个独立的分区,让他们对该数据进行计算。由于我们有多个节点并行扫描数据,因此我们应该能够扫描比使用单个节点时更多的数据 - 我们通过分布式并行计算提高吞吐量。

  在分布式机器学习中,我们的目标是加速使用多个节点的模型训练的收敛速度,应用数据并行性是相当直观的:我们让每个工作机在自己的数据分区上执行训练(即随机梯度下降)并生成一组其上的参数更新(即梯度)。然后,我们让所有节点通过网络通信同步其参数状态,直到达成一致。只要同步不花费太多时间并且我们得到较单节点结果的改进,我们就实现了目标!从本质上讲,这就是 Google 深度学习系统 DistBelief 的工作原理。

  与数据并行性相比,模型并行性是一个更复杂和模糊的概念。一般来说,在模型并行性中,我们尝试对机器学习模型本身进行分区,以将工作负载分配给多个工作机,而不是对数据进行分区。例如,假设我们正在解决矩阵分解问题,其中矩阵非常庞大,我们想要学习这个巨大矩阵的每个参数。为了要应用模型并行性,我们必须将矩阵划分为许多小块(子矩阵),然后让每个工作机处理一些小块。这样,如果一个节点上的 RAM 不足以存储矩阵中的所有参数,我们就能够利用多个节点的额外 RAM 起到杠杆作用。由于不同的节点具有映射到矩阵的不同块的不同工作负载,我们因此能在并行计算时获得加速。

  问题是,我们应该如何划分模型?由于我们有这么多的机器学习模型,每个模型都有自己的特征和表示,因此就没有实现模型并行的主要方法。

  不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。

http://attack11.net/gailvbingxingsuanfa/433.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有