目录
之前已经给大家介绍了OrionX赋能深度学习分布式训练的相关知识OrionX(猎户座)AI加速器资源池化软件赋能深度学习分布式训练,了解了分布式训练在AI场景下发挥的重大作用,目前无论是深度学习主流框架(如TensorFlow, PyTorch, PaddlePaddle, MXNet等),还是分布式训练工具(Horovod, DeepSpeed)都是在不断尝试突破和优化AI分布式训练算法,以满足更大规模、更复杂场景的模型高效训练需求。
聊到AI分布式训练,应该了解一下其背后的原理。其实分布式概念并不是近十年AI大发展过程中提出,更早的HPC和大数据领域都已经在分布式计算领域输出了大量实践和成果,但由于目前AI算法特殊的前向和反向计算机制,对分布式算法提出了更高难度的挑战,AI分布式算法吸取前人经验,走出了一条独特的创新之路。
AI分布式算法有哪些思想?
目前主流的AI分布式算法分为两大类,分别是Parameter Server和Ring Allreduce:
- Parameter Server(参数服务器):参数服务器是一个编程框架,用于方便分布式并行程序的编写,其中重点在于对大规模参数的分布式存储和协同的支持。参数服务器概念最早来自于Alex Smola于2010年提出的并行LDA的框架。后来由Google的Jeff Dean进一步提出了第一代Google大脑的解决方案:DistBelief。再之后由MXNet作者,AWS首席科学家李沐在2014年提出第三代参数服务器思想,论文为《Parameter Server for Distributed Machine Learning》
- Ring Allreduce(环行归约):Allreduce归约概念很早就诞生于并行计算领域,在HPC经常使用的MPI(Message-Passing Interface,消息传递接口)标准中就有常见的接口MPI_Allreduce。后来2016年百度硅谷人工智能实验室(SVAIL)首次将Ring Allreduce算法引入到深度学习中,开启了AI分布式训练新的篇章,后续Nvidia的NCCL,Uber开源的Horovod,PyTorch的DDP都是基于Ring Allreduce思想不断演进发展的实现方式。
Parameter Server算法
Parameter Server框架中,计算节点被分成两种:server和worker。
- server节点的主要功能是保存模型参数、接受worker节点计算出的局部梯度、汇总计算全局梯度,并更新模型参数。
- worker节点的主要功能是各保存部分训练数据,从server节点拉取最新的模型参数,根据训练数据计算局部梯度,上传给server节点。worker只和server通信,互相之间没有通信。
如下图所示:
图1:Parameter Server结构
*From [1]“Horovod: fast and easy distributed deep learning in TensorFlow”
举一个具体例子,如下图所示,GPU 0~3卡负责网络参数的训练,每个卡上都布置了相同的深度学习网络,每个卡都分配到不同的数据的minibatch。每张卡训练结束后将网络参数同步到GPU 0,也就是Reducer这张卡上,然后再求参数变换的平均下发到每张计算卡,整个流程有点像MapReduce的原理。