Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

八卦一下快手Bagua:突破TensorFlow、PyTorch并行瓶颈的分布式训练框架

快手八(Ba)卦(gua),了解一下?

近日,快手和苏黎世理工宣布开源分布式训练框架 Bagua(八卦),相比于 PyTorch、TensorFlow 等现有深度学习开源框架仅针对系统层面进行优化,Bagua 突破了这一点,专门针对分布式场景设计了特定的优化算法,实现了算法和系统层面的联合优化,性能较同类提升 60%。

随着摩尔定律的失效,单个计算单元的能力已经远远无法满足数据的指数级增长。比如,快手每天上传的新视频超过千万条,即便训练简单的分类模型(比如 ResNet),使用单机单卡的算力,训练快手日内新增视频都需要超过一百天的时间。因此,在数据爆炸性增长的互联网行业,多机多卡的并行训练成为了大数据时代的必然。随着深度学习模型功能的日益强大,分布式训练任务的通信成本和所需算力也随之急剧增长。

然而,由于多机多卡并行带来的额外通讯成本,加速比(speedup)经常让大家失望,从而形成了大厂「堆资源」,没资源的「干瞪眼」的局面。比如,Google 的 Downpour 框架 [1] 使用 80 个 GPU 训练 ImageNet,加速比却只有 12/80=15%。因此如何提升多机多卡中训练的通讯效率成为了并行训练乃至解决数据爆炸性增长的核心问题之一。

项目 GitHub 地址:https://github.com/BaguaSys/bagua

现有的深度学习开源框架(PyTorch,TensorFlow)主要针对系统层面优化,把已有的单机单卡优化算法扩展到多机多卡的场景。虽然系统层面的优化使得并行效率不断提升,但是边际效益却越来越明显。针对这个问题,快手和苏黎世理工(ETH Zürich)联合开发了一款名为「Bagua」的分布式训练框架,突破单纯的系统层面优化,专门针对分布式的场景设计特定的优化算法,实现算法和系统层面的联合优化,极致化分布式训练的效率。用户只需要添加几行代码,便能把单机单卡训练扩展到多机多卡训练并得到非常可观的加速比。


Bagua 设计思路

从单机单卡的训练到多机多卡训练的核心,是每个卡把自己的计算结果进行累加和传播。这个过程好比每个人把自己知道的信息传递给他人,然后又从其他人那里获取信息,最后完成全局的信息同步。如果把计算单元之间的信息同步类比为人与人之间的信息同步,那么社会实践经验告诉我们,「八卦」可能是消息传递最高效的模式。「八卦」消息传播具有去中心化、异步通讯、信息压缩的特点,这与 Bagua 里面实现的通讯算法刚好一一呼应。

为了提升分布式训练效率,Bagua 实现了自研以及前沿的算法,包括去中心化/中心化、同步/异步以及通讯压缩等基础通讯组件,通过软硬结合的设计极致优化了这些组件的效率,并且灵活支持这些算法的组合,以及更复杂的算法设计。

Bagua 将通信过程抽象成了如下的算法选项:

  • 中心化或是去中心化(Centralized or Decentralized):在中心化的通讯模式中,梯度或模型的同步过程需要所有的工作节点进行参与,因此,较高的网络延时往往会导致训练效率的降低。去中心化的通信模式 [5,6] 往往可以有效的解决这一问题:在该模式下,工作节点可以被连接成特定的拓扑结构(例如环),在通信过程中,每一个工作节点只与和它相邻的节点进行通信。
  • 同步或是异步(Synchronous or Asynchronous):同步模式中,在每一次迭代过程中,所有工作节点都需要进行通信,并且下一步迭代必须等待当前迭代的通信完成才能开始。反之,异步式分布算法 [2] 则不需要等待时间:当某个节点完成计算后就可直接传递本地梯度,进行模型更新。
  • 完整精度模式或信息压缩模式(Full-Precision or Low-Precision):完整精度模式,会使用与本地模型相同的 32 位浮点数(float32)进行传输。另一方面,在通讯存在瓶颈的情况下,基于大量已有研究通过量化 (quantization [3]) 或稀疏化 (sparsification [4]) 等方法压缩梯度,再用压缩后的梯度更新参数。在很多场景下,可以达到和完整精度相同的精度,同时提升通讯效率。

虽然为了提升通讯效率,Bagua 没有依照传统的方式同步所有计算节点的结果,甚至每次同步的信息还有偏差,但是得益于最新理论上的进展,这几种通讯策略以及他们的组合最终收敛解的正确性和效率仍然能得到充分保证,而且计算复杂度跟同步中心化和信息无损的方法相当,但是通讯效率更高 [10]。

值得注意的是,在实践中,分布式训练算法往往会使用不止一种上述的优化方法,从而适配更为极端的网络环境 [7,8,9]。对于分布式算法感兴趣的读者,我们在这里推荐一份最新的完整综述报告 [10]。Bagua 提供了一套详尽的通信模式来支持用户在上述模式中任意选择组合,我们将这一分布式训练系统对于上述算法选项的支持情况总结在下表中:

从表格中不难看出,现有框架的优化只是针对较为通用的算法(中心化同步完整精度),对于其他的算法组合,这些系统的支持非常有限。对于中心化同步进行信息压缩,这些系统往往只能支持较为简单的 float32->float16 压缩,相较而言,Bagua 则可以支持更为复杂的 ByteGrad,QAdam 等算法。对于其他的算法组合,现有的框架通常无法支持,而 Bagua 则可以自由支持。

然而,简单地支持这项算法选项并不能直接在大规模集群上带来性能的提升。Bagua 的核心优势在于,为了追求极致化的性能,而实现算法和实现的联合优化。具体来讲,基于上述的通信层抽象,用户既可以方便得选择系统提供的各种算法组合从而获得性能提升,又能灵活得实现新的分布式 SGD 算法 —— Bagua 将自动为这一算法实现提供系统层优化。这些系统优化包含:

将通讯时间隐藏在计算时间中:为了降低通信开销,Bagua 能够将部分通信时间隐藏在计算时间中。具体来讲,在反向梯度的计算过程中,部分已经完成的梯度可以在剩余梯度的计算过程中同时进行通信——通过这种流水的处理方式,部分通信时间可以被有效地「隐藏」在反向梯度的计算过程中,从而减小数据并行带来的通信开销。

  • 参数分桶及其内存管理:频繁的传输碎片化数据,会降低通信的效率。因此,Bagua 将模型参数分割成桶,并且分配连续的内存空间来对每一个桶进行管理,这样通讯的单位就变成了桶,从而能够更高效地利用通信模型。此外,由于支持了信息压缩算法,对于压缩和解压的函数,其操作的基本单位也是桶,这样也能使得这些操作的开销降低。
  • 分层化的通信实现:由于工业级别的分布式训练往往需要多机多卡,而不同物理连接方式所带来的延时和带宽也有较大差异,因此,通讯的有效抽象也对性能的提升至关重要。Bagua 将涉及多机的通信抽象成:「机内」和「机间」,并对于相应的通信抽象做了优化。例如,对于信息压缩传输,分层化通讯将会把这一算法解读成「机内”完整精度,「机间」信息压缩,从而为不同的物理链接提供最合适的通信算法。 

我们想要强调的是,这些系统实现层面的优化是对于各种算法组合广泛适用,而非局限在某一特定的算法设置上。因此,所有的系统优化都可以被灵活的复用到各种算法实现中去,这在保证「端到端」的性能提升的同时,也为开发新的分布式算法提供了良好的平台。

经过实验,Bagua 的特点如下:

  • 并行性能显著提高:在 ImageNet 数据集上,相较当前开源分布式框架(PyTorch-DDP,Horovod,BytePS),当配置同样的算力(128GPU)与通信网络(100Gbps),达到相同的训练精度,Bagua 只需其他框架 80% 左右的时间;
  • 对网络环境更鲁棒:由于有效的支持了各类算法优化(信息压缩,异步,和去中心化),Bagua 在各类网络环境下(包括不同延时和带宽)都体现出了良好的适配性。尤其是在高延迟低带宽的情况下,Bagua 体现出比其他框架更优的加速比,比如:在 10Gbps 网络带宽环境下,同样的 ImageNet 任务,Bagua 只需其他框架 50% 左右的训练时间来达到同样的训练精度;
  • 「一键式」使用:Bagua 对于端用户非常友好,现有利用 PyTorch 的模型都可以作为 Bagua 的输入,Bagua 将自动为其提供丰富的并行方案——只需增加几行代码,训练就可以运行在分布式集群上;
  • 分布式通讯算法易拓展性:Bagua 提供了针对算法的高拓展性,对于分布式优化算法的开发者,Bagua 提供了有效的通讯抽象,开发者实现的新算法也可以直接复用 Bagua 的系统优化;
  • 可用于工业级场景大规模使用:Bagua 为 Kubernetes 实现了定制化的 operator,支持云原生部署,同时考虑机器资源和故障问题,有机结合 PyTorch Elastic 和 Kubernetes 实现了容灾功能和动态训练扩缩容。用户可以通过使用 Bagua ,在少量机器空闲时就开始训练,在更多机器资源释放的情况下,训练任务自动扩容到更多机器。同时机器节点损坏时,自动剔除坏节点继续训练。方便工业级训练场景使用,也方便与机器学习平台结合使用;
  • 安全、故障易排查:Bagua 通讯后端由注重内存安全、速度和并发性的 Rust 语言实现,在编译期就排除了大量的内存安全问题。同时基于 tracing 实现了分模块、分层级的 log 输出,使得实际场景中故障排查更加轻松。

此外,Bagua 在快手内部也经过了工业级任务的实践检验,Bagua 已经在快手内部多个核心业务场景投入使用,相较其他开源框架取得了显著的性能提升:

  • 大规模自然语言处理(GPT2-xl 量级大小的模型),提升效率 65%
  • 大规模图像识别(10+ 亿图像 / 视频),提升效率 20%~30%
  • 大规模语音识别(TB 级别语音资料),提升效率 20%~30%
  • 大规模推荐系统(万亿级别参数模型训练,支持亿级别 DAU 的应用),提升效率 100% 以上


Bagua 和其他开源方案的性能对比

快手选用了包括图像,文本,语音,图像文本混合等多个训练任务对 Bagua 的性能进行测试,并与 PyTorch-DDP,Horovod,BytePS 进行比较。得益于 Bagua 系统的高效性和算法的多样性,Bagua 可以在不同任务中选用相应最优的算法,从而保证在训练精度和其他系统持平的前提下,训练速度明显提高。值得注意的是,当网络状况不佳时,Bagua 系统的优势将更加明显。下面我们选取 GPT2-XL,BERT-Large 和 VGG16 三个典型的通信密集型任务进行对比说明,更多结果可在 Bagua 论文和网站中(https://github.com/BaguaSys/bagua)进一步了解。

1. End-to-end 训练时间对比

下图展示了在 128 个 V100 GPU 上 fine-tune BERT-Large (SQuAD 数据集),模型 F1 精度随训练时间的变化曲线。Bagua 使用 QAdam-1bit 算法加速,机器之间采用 100Gbps TCP/IP 网络互联。我们可以看到,即使在高速网络下,达到相同的训练精度,Bagua 需要的时间仅为其他系统的 60%。

2. 扩展性对比

下图展示了各个系统在 VGG16 模型(ImageNet 数据集)上的训练速度与 GPU 数量之间的关系。在测试中分别使用了 1,8,16,32,64,128 个 V100 GPU 进行测试。该任务中 Bagua 使用 8bitsGrad 算法加速。可以看出 Bagua 的扩展效率相比其他系统有较明显的提升。

下图展示了各个系统在 GPT2-XL 模型上的训练速度与 GPU 数量之间的关系。GPT2-XL 模型有 1.5 billion 参数,在大模型中具有一定代表性。Bagua 使用 8bitsGrad 算法加速。在测试中分别使用了 8,16,32,64,80 个 V100 GPU 进行测试。同样可以看出 Bagua 的扩展效率相比其他系统有较明显的提升。

3. 不同网络环境对比

算法是 Bagua 的灵魂。当网络环境变化时,不同的算法会表现出不同的性能特点。在下图中,我们以 BERT-Large fine-tune 为例,调整机器之间网络的带宽和延迟,对比 Bagua 中各个算法的 epoch 时间。可以看出,随着带宽降低,压缩算法的优势会越来越明显,且和压缩程度相关;当延迟逐渐升高,去中心化算法逐渐展现出优势。除此之外,当网络环境不佳时,Bagua 对比其他系统的优势也进一步扩大。

Bagua 使用实例 

在已有的训练脚本中使用 Bagua 非常简单,在代码中算法使用者只需要增加如下几行代码对已有模型进行初始化操作即可。以使用 GradientAllReduce 算法为例:

首先,我们需要 import 一下 bagua

import bagua.torch_api as bagua

随后,我们可以初始化 Bagua 的进程组:

torch.cuda.set_device(bagua.get_local_rank())bagua.init_process_group()

对于数据集的初始化,Bagua 完全兼容 PyTorch 的实现:

train_dataset = ...test_dataset = ...train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset,    num_replicas=bagua.get_world_size(), rank=bagua.get_rank())train_loader = torch.utils.data.DataLoader(    train_dataset,    batch_size=batch_size,    shuffle=(train_sampler is None),    sampler=train_sampler,)test_loader = torch.utils.data.DataLoader(test_dataset, ...)

最后,用户只需要选择要训练的模型和优化器即可以使用 bagua:

# 定义模型model = ...model = model.cuda()# 定义优化器optimizer = ...# 选择 Bagua 算法来使用from bagua.torch_api.algorithms import gradient_allreduce# 实例化 Bagua 算法algorithm = gradient_allreduce.GradientAllReduceAlgorithm()# 对现有模型启用 Bagua 算法model = model.with_bagua(    [optimizer], algorithm)

这样,使用 Bagua 的多机多卡训练算法就实现完成了。完整例子和更多场景,欢迎参考 Bagua Tutorial 文档(https://github.com/BaguaSys/bagua)。

论文https://arxiv.org/abs/2107.01499

项目 GitHub 地址:https://github.com/BaguaSys/bagua


参考文献

[1] Dean, Jeffrey, Greg S. Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Quoc V. Le, Mark Z. Mao et al. “Large scale distributed deep networks.” (2012).

[2] Zhengyuan Zhou, Panayotis Mertikopoulos, Nicholas Bambos, Peter Glynn, Yinyu Ye, Li-Jia Li, and Li Fei-Fei. 2018. Distributed asynchronous optimization with unbounded delays: How slow can you go?. In International Conference on Machine Learning. PMLR, 5970–5979.

[3] DanAlistarh, DemjanGrubic, JerryLi, RyotaTomioka, and MilanVojnovic. 2016. QSGD: Communication-efficient SGD via gradient quantization and encoding. arXiv preprint arXiv:1610.02132 (2016).

[4] Dan Alistarh, Torsten Hoefler, Mikael Johansson, Sarit Khirirat, Nikola Konstanti- nov, and Cédric Renggli. 2018. The convergence of sparsified gradient methods. In Proceedings of the 32nd International Conference on Neural Information Processing Systems. 5977–5987.

[5] Anastasia Koloskova, Sebastian Stich, and Martin Jaggi. 2019. Decentralized stochastic optimization and gossip algorithms with compressed communication. In International Conference on Machine Learning. PMLR, 3478–3487.

[6] Xiangru Lian, Ce Zhang, Huan Zhang, Cho-Jui Hsieh, Wei Zhang, and Ji Liu. 2017. Can decentralized algorithms outperform centralized algorithms? a case study for decentralized parallel stochastic gradient descent. In Proceedings of the 31st International Conference on Neural Information Processing Systems. 5336–5346.

[7] Christopher De Sa, Matthew Feldman, Christopher Ré, and Kunle Olukotun. 2017. Understanding and optimizing asynchronous low-precision stochastic gradient descent. In Proceedings of the 44th Annual International Symposium on Computer Architecture. 561–574.

[8] Xiangru Lian, Wei Zhang, Ce Zhang, and Ji Liu. 2018. Asynchronous decentral- ized parallel stochastic gradient descent. In International Conference on Machine Learning. PMLR, 3043–3052.

[9] Hanlin Tang, Shaoduo Gan, Ce Zhang, Tong Zhang, and Ji Liu. 2018. Com- munication compression for decentralized training. In Proceedings of the 32nd International Conference on Neural Information Processing Systems. 7663–7673.

[10] Ji Liu, Ce Zhang, et al. 2020. Distributed Learning Systems with First-Order Methods. Foundations and Trends® in Databases 9, 1 (2020), 1–100.

工程分布式训练快手
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

分桶技术

将一个特征(通常是连续特征)转换成多个二元特征(称为桶或箱),通常是根据值区间进行转换。例如,您可以将温度区间分割为离散分箱,而不是将温度表示成单个连续的浮点特征。假设温度数据可精确到小数点后一位,则可以将介于 0.0 到 15.0 度之间的所有温度都归入一个分箱,将介于 15.1 到 30.0 度之间的所有温度归入第二个分箱,并将介于 30.1 到 50.0 度之间的所有温度归入第三个分箱。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

摩尔定律技术

摩尔定律是由英特尔创始人之一戈登·摩尔提出来的。其内容为:积体电路上可容纳的电晶体数目,约每隔两年便会增加一倍;经常被引用的“18个月”,是由英特尔首席执行官大卫·豪斯所说:预计18个月会将芯片的性能提高一倍。

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

Infor机构

Infor是一家跨国企业软件公司,总部设在美国纽约市。Infor专注于通过云计算作为服务交付给组织的业务应用。最初专注于从财务系统和企业资源规划(ERP)到供应链和客户关系管理的软件, Infor在2010年开始专注于工业利基市场的软件,以及用户友好的软件设计。Infor通过Amazon Web Services和各种开源软件平台部署云应用。

www.infor.com
相关技术
量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

暂无评论
暂无评论~