• 深度神经网络分布式训练指引


    论文:https://arxiv.org/pdf/1810.11787.pdf

    译文:深度神经网络分布式训练指引

    摘要

    深度学习让人工智能领域取得了很大的进步。但是训练这些深度学习模型需要大量的计算。单机单卡训练ImageNet需要一周。多机分布式训练可以极大地减少训练时间。最近,有2048个GPU的一个集群,把训练ImageNet的时间减少到4min。本文调研分布式训练的各种算法和技术,并且提出一个效果最好的分布式训练框架。我们探究同步和异步随机梯度下降All Reduce 梯度聚合策略、在集群内进行混合精度训练以获得高吞吐低延迟的最佳实践、大批量训练以及梯度压缩

    介绍

    1、背景和动机:

    数据正在以史无前例的规模产生,这些数据需要被有效分析以获得有意义的信息。深度学习作为强有力的分析工具,在视觉、语言和智能推理等复杂任务上表现都很好。然而,这些算法需要花很长的时间来训练大量的数据,才能得到有效的结果。最初,结果最好是单机单卡训练ImageNet分类模型花了一周,但是现在的数据规模远比ImageNet大。我们需要线性扩展(linear scale)训练速度,同时保留训练结果的精度、容错以及在高延迟的网络中收敛。

    2、分布式训练概览:

    分布式训练可以分为两种,数据并行模型并行

    数据并行把数据集平分到各个节点,每个节点都有一份完整的模型以及本地权值子集,每个节点训练数据集子集,并且更新本地权值子集这些本地权值在集群节点间共享,并通过积累算法,计算得到全局权值。然后全局权值被分发回各个节点,继续下一个batch的训练。(注:BytePS中,每个worker节点都有所有权值,更新权值的主要工作由server节点负责)

    模型并行把模型结构分割到不同节点。AlexNet把结构划分到2个GPU,以满足GPU显存要求。模型并行应用于,1)模型太大;2)模型结构可以并行。目标检测网络有隔离的边界和互相独立的类预测头(这个之后深入看看)

    分布式训练框架的组成

    1、分布式训练算法:

     

    节点间通信:

    分布式训练另一个重要部分就是节点间的数据通信

    梯度积累

    梯度积累算法在分布式训练系统中扮演着重要角色。这些算法负责收集每个worker节点的本地梯度,再把更新之后全局梯度分发回各个worker节点 

    低精度训练

    基于ImageNet训练Resnet,目前最快4min。

    算术精度:

    梯度和参数压缩

    结论

    我们调研和总结了分布式训练框架的多种组成部分,以及推荐如下技术来构建一个高效、可扩展的分布式训练框架:

    1、使用同步SGD,保证严格收敛

    2、All Reduce过程中的梯度积累应该用binary blocks算法,因为它的运行时间很优越

    3、为了高效利用硬件和网络带宽,梯度压缩、量化和混合精度训练等等技术都应该用上

    4、batch_size应该尽可能大(BytePS实践中,通常用满GPU显存),以获得最好的并行效果,以及最小化训练时间。推荐LARS算法,batch_size可以到64k。(注:这里64k具体怎么运作的?不会把显存撑爆吗?

    我们还提出了一个容错的All Reduce算法,可以在不全部重启的情况下工作。最后,我们提及分布式训练未来的一些方向和启示。

  • 相关阅读:
    再见了,正则表达式
    深入理解 Python 描述符
    并发-ScheduledThreadPoolExecutor
    ScheduledExecutorService用法
    常见限流算法总结
    常见集合类的复杂度
    并发-ConcurrentHashMap 1.7和1.8的区别
    并发-HashMap在jdk1.8也会出现死循环
    并发-Hashmap 1.7和1.8有哪些区别
    并发-HashMap与红黑树-todo
  • 原文地址:https://www.cnblogs.com/yangwenhuan/p/11326210.html
Copyright © 2020-2023  润新知