美文网首页嵌牛IT观察
分布式机器学习(一)基本概述

分布式机器学习(一)基本概述

作者: Lontano_wjk | 来源:发表于2022-03-21 15:08 被阅读0次

    姓名:王佳昆

    学号:21011210148

    学院:通信工程学院

    【嵌牛导读】分布式机器学习也称为分布式学习,是指利用多个计算节点 ( 也称为工作者,Worker ) 进行机器学习或者深度学习的算法和系统,旨在提高性能、保护隐私,并可扩展至更大规模的训练数据和更大的模型。

    【嵌牛鼻子】分布式机器学习;数据并行;模型并行;TF分布式策略的实现

    【嵌牛提问】为什么需要分布式来进行机器学习?如何实现?

    【嵌牛正文】

    为什么要分布式机器学习

            近年来随着大数据时代的到来与机器学习人工智能技术的迅速发展,深度神经网络模型在诸多领域取得突破性的进展并得到广泛应用,在语音处理、计算机视觉、自然语言处理、人机对弈、自动驾驶等方面取得了前所未有的效果。机器学习通过不断的求导迭代更新模型来提高自己的能力,需要大量的计算,是典型的计算密集型任务,因此这些神经网络的训练过程非常耗时。尽管近些年计算机硬件性能、轻量级网络模型以及高效的训练方法均取得了一定的进展,但是单机训练依旧耗时过长。其次,机器学习要求很大的模型与大量的训练数据,随着数据与模型参数量的越来越大,单机的内存的增长速度并将不能与之相匹配。由此,单节点进行机器学习训练己经无法满足要求。分布式由于其良好的灵活性与可扩展性,将单机资源有效的结合起来,分布式机器学习成为解决该问题的有效手段。此对分布式机器学习加速大数据、大模型训练的研究是目前人工智能领域的主流方向之一。

    常见的分布式策略

            针对一个具体机器学习用户而言,可以根据现实中任务的实际特性从上述抽象中选择不同的组合,选择自己合适的方案。但是对于本身意在成为深度学习基础设施的TF框架而言,要在高层API上支持常见的分布式策略,同时也要支持用户定义拓展自己的策略。所以我们先看看常见的分布策略有哪些。        

            根据到底将什么东西切分到不同的设备上,分为两种+混合:

    1、数据并行(Data parallelism)

            切分数据。不同的设备上保留完整的模型参数副本,将数据切分到不同的设备上,分别去计算出模型输出及反向传播的梯度。最终以某种形式将梯度汇总起来,更新各个模型参数副本,完成一轮训练任务后。

            现实中,数据并行的方式是最常见的分布式训练方式,相对而言也比较容易实现,其本身天然有负载均衡和高容错的特性。虽然类似自然语言处理领域CPT-2这种超大模型很多时候眼球效应比较足,但是以现在GPU单卡(16G或者32G)或者单机多卡的内存量,大多数日常任务采用数据并行是足够的。

    数据分而治之

    2、模型并行(Model parallelism)

            切分模型&参数。当单个设备内存无法容纳模型的所有参数时,需要将模型的参数切分到不同的设备上。另一种情况就是模型某个单独的部分计算比较重,可能也需要单独的拎出来。但是如何切分一个模型的各个部分:典型的纵向切分、横向切分足够吗?并且:如何保证切换后任务达到负载均衡的效果,如何做到比较高的分布式容错性等,问题很多。相对于数据并行而言,实现会更加的复杂。

            在TF的编程接口中,用户可以使用with tf.device('/gpu:1')指定模型的某个部分运算在哪个设备上运行,这样的操作一般被称为Device-Placement。但是做到比较合理的设备间任务划分需要用户对于模型各个阶段的计算量、数据交互的带宽等有着清晰的认识,有时候甚至需要对硬件层面进行干预(增加部分通信带宽、为某些任务单独建立独占的计算节点等)。否则,不佳的任务划分会使得整体计算资源的使用率较低,达不到令人满意的系统扩展效果。

            下面是个手工进行任务划分的例子:

    手工划分任务的一个案例

            自然的,如何屏蔽这种复杂性,做到一定程度的自动任务划分排布(Auto Device-Placement),也是近一段时间比较重要的话题。

    3、混合并行(Hybrid parallelism)

    在现实的复杂任务中,模型的划分有时候很难通过单纯的数据并行或者简单的模型并行策略就达到很好的扩展效果。所以有时候需要进行较为复杂的数据和任务的划分。

    TF的数据并行实现

    接下来,拿TF对于数据并行的几种实现做例子,简单再重复一下:

    1、ParameterServerStrategy

    参数服务器模式

            左侧为worker任务节点,负责从ps中读取参数,进行计算得出梯度,并提交梯度(或本地更新后的参数)到参数服务器。右侧为参数服务器(ps)节点,负责模型参数的读写更新。

            谷歌的第一代深度学习框架DistBelief就采用这种架构:

    参数服务器 (Parameter Server, 常称为 PS) 的系统架构

            这里,各个worker节点的参数和ps的配比和同步频率如何,是否允许一定worker落后轮次的更新消息发送消费,相关领域研究有些可以参考的结论。大体而言,ps架构对于worker间对参数更新是否强制同步是不敏感的。

    2、CentralStorageStrategy

            对应单机多卡的情况。所有的参数在cpu侧集中存储(CentralStorage),而每个GPU上都会运行完整的模型。这种策略也比较适合拥有大规模embedding的情况,将大规模参数都放到cpu host一侧。

    单机参数集中存储模式

    3、MirroredStrategy&TPUStrategy

            无论是ps模式还是中心存储模式,都需要计算节点(设备)和参数存储部分通信,最终将计算参数更新结果汇总在一起。只不过前者是独立的主机,后者是本机上的cpu侧。这部分通信开销通常会成为系统的瓶颈。

            那么假设能够以某种方式,让各个计算节点间的参数以较低的成本达到同步更新,就像互为镜像一般。这样就不再需要一个中心存储节点,直接避免参数存储节点成为系统的瓶颈。

    AllReduce

    镜像参数变量,在各个设备上保持同步更新  

            怎么保证多个节点(设备)间的参数更新同步呢?这就是AllReduce系列算法。百度提出的Ring AllReduce是其中比较知名的代表。相关的工作发展路程可以看这篇综述:

            兰瑞Frank:腾讯机智团队分享--AllReduce算法的前世今生

    4、MultiWorkerMirroredStrategy

            将Mirrored Variable的理念拓展到多机实现上,就被成为MultiWorkerMirroredStrategy。

    使用定义好的算子进行设备间的更新同步  

            其中各主机间的通信,可以直接采用Ring AllReduce算法,也可以采用在单机内采用AllReduce算法,机器间使用广播的方式进行更新同步,后者也被称为层次化的AllReduce。

    分层AllReduce

            所以不管单机多卡、多机多卡,都可以用AllReduce的思路来降低通信开销。而集中式存储的好处,就在于比较方便处理有embedding这种特别大规模稀疏参数的存在导致单设备内存不够用的情况。

    总结

    分布式机器学习的三个基本目标:

    1、达到更快的训练收敛时间。

    并行计算只有在通信开销<并行加速开销的前提下,才能够有加速的效果。

    2、支持更大的训练数据量,更大的模型参数规模。

    如何自动化的切分模型,是达到高性能的关键。

    3、有了2,经常能够达到更高的模型精度。

    常见的数据并行方案:

    1、参数服务器模式。

    2、单机多卡集中参数存储模式。

    3、单机多卡、多机多卡的镜像模式,采用AllReduce系列算法保持参数同步。

    资料

    Mesh-TensorFlow: Model Parallelism for Supercomputers (TF Dev Summit ‘19)

    Inside TensorFlow 2.0 2020

    兰瑞Frank:腾讯机智团队分享--AllReduce算法的前世今生

    分布式机器学习:算法、理论与实践》2018

    相关文章

      网友评论

        本文标题:分布式机器学习(一)基本概述

        本文链接:https://www.haomeiwen.com/subject/ruhtjrtx.html