作者:焦臻桢、张晓普(中国信息通信研究院泰尔英福iF-Labs)唐忠桓、李莉(同济大学自主智能无人系统全国重点实验室)
12月20日,在第二届算力网络与数字经济发展论坛上,“上海算力交易平台2.0”正式发布。该平台由国家(上海)新型互联网交换中心牵头建设,依托先进的算网大脑技术、可靠的“星火·链网”区块链技术,紧跟“东数西算”等国家战略在算力网络发展导向的重要布局,积极落实《算力基础设施高质量发展行动计划》“算力浦江”行动计划重点任务,为企业提供便捷、灵活的流量交换服务,目前已累计接入通算资源6334.859P,超算资源102.024P,智算资源1816.987P。
算力已经成为数字经济时代的关键推动力。《“十四五”数字经济发展规划》中明确提出要加快实施“东数西算“”工程,通过推动云网协同发展,提升数据中心跨网络、跨地域数据交互的能力,对算力进行合理调度和优化配置。随着人工智能的迅猛发展,对算力的需求正在持续扩大,例如大模型训练等各类新型需求也在不断涌现,准确的认清需求,并从需求中发现并抓住机会,有助于算力网络建设参与方更好的找准定位、发挥价值。本文对人工智能模型的分布式训练这一技术机遇进行介绍,为大家揭开其中隐藏的挑战和机遇。
1.算力荒:大模型绕不开的大难题
自从ChatGPT引爆大模型发展热潮,众多科技企业前赴后继,纷纷投入大模型研发中。然而,这波创业浪潮中鲜有小微初创企业的身影,甚至一些堪称“准独角兽”规模的企业,也仅集中在大模型的下游应用创新或微调中,其实,大模型背后的神经网络技术早已颇为普及;国内拥有众多专业人才,有能力独立完成模型的设计、搭建和训练。
由此,一类观点认为:大模型创新的主要门槛并不在算法与技术,而在于训练一个大模型、完成思路验证和检验所需的超大规模算力。算力,成为这条赛道的一面墙。
2.面向大模型的分布式方法论
当单点能力不足成为主要瓶颈后,大家总会去思考集群化、分布式的解决之道。从“东数西算”工程和“全国一体化算力网络”,到云边端协同一体化计算框架,再到群智计算以及Web3激励式计算聚合等。我们总能窥见“聚少成多”的底层逻辑。
然而,相比于传统计算任务,让分布式系统适配于大模型规模的神经网络训练却绝非一件简单的事。尤其是把分布式协作的范围从单个集群内部的局域网内协作,放大到城域网、广域网范围下多个中远距离集群间协作,所产生的挑战将更加复杂。
接下来我们将从与分布式训练的两个核心部分入手,介绍模型的分布式训练,对这一挑战建立认识:
2.1分布式训练的前提:神经网络模型的分割与并行化训练
神经网络训练有前后依赖、相互耦合的特性,导致其并行化存在天然困难。以一个最基本的三层神经网络结构为例,其训练流程通常包含前向推理和反向传播两个步骤:在前向推理过程中,数据由输入层输入,在层间逐级计算传递,并在最后由输出层输出结果。随后,我们计算推理得到的结果与真实结果之间的误差,由输出层将该误差反向逐级传播计算,直到输入层。由此,我们可以得到每一层中每个参数的梯度,并由优化器根据梯度更新参数。在这一过程中,每一层的计算都依赖于其前一层(或后一层)的数据。
图1经典的神经网络训练流程
在这样的架构下,“模型平行方法”(Modelparallelism)与“数据平行方法”(Dataparallelism)是当下两种分布式训练的主要思路:
2.1.1模型平行方法
图2模型平行方法、其串行化特性以及流水线搭建案例
详细而言,模型平行训练一般包括以下几个部分:模型分割、训练流程调度优化、流水线搭建等。
为了将训练任务分散到不同计算设备的同时避免过于频繁的数据交换,需要找到适合神经网络架构的模型分割方法,当前的主流方法一般为:层间分割与层内分割。
层间分割是最直观的模型分割方式:由于神经网络模型自身是分层的,可以天然地由不同设备分别负责整个神经网络中一层或多层的训练。层内分割会对神经网络结构进行进一步地细分。不同计算设备分别负责神经网络一层或多层内的部分神经元激活函数计算以及部分矩阵(张量)运算。在层内分割下,前向推理时,负责某一层不同部分的不同计算设备,基于其所训练的神经网络架构的具体特性,获得前一层的全部或部分激活数据,并提供给下一层的全部或部分计算设备。反向传播亦与之相类似。
模型分割之外,还需要均衡各计算设备所负责的工作,避免单台设备成为整个训练流程的计算瓶颈。因此还需要采用优化方法,针对最适合现有神经网络和设备的模型分割及任务分配方式进行优化问题建模求解,找到最大化模型训练效率的优化方法。
图3层内分割与层间分割的调度优化
从整体效益看:当模型平行方法用于大规模分布式算力的协同任务时,不利于最大化发挥规模优势给效率带来的潜在提升机会。此外,由于各个节点均存储有全量训练数据,这不利于数据隐私的保护。
2.1.2数据平行方法
在采用数据平行方法进行模型分布式训练过程中,相同的模型参数被复制到各个计算节点上。在单次迭代中,每个计算节点基于各自不同的小批量数据计算局部梯度或模型更新。然后,节点间交换结果,执行聚合和广播操作,以获得新的全局模型。
图4经典的数据平行方法训练流程
数据平行训练有多种不同的模式:完全同步模式、适用于异构设备的部分同步模式、聚合参数而不是梯度的本地随机梯度下降模式、由参数服务器异步聚合梯度更新参数的完全异步模式、不要求参数完全同步的遥传通信模式等。
图5不同模型平行训练模式的训练流程对比
直观上,数据平行方法可以真正发挥分布式算力的并行化优势,该方法也是当下并行训练中更常见的方案。但其也有缺点:模型的每个可训练参数都对应一个梯度值,数据平行训练中每次梯度聚合所需传输的数据量都与模型的参数量相当。对于参数量较大的大模型而言,这一高频多次的传输带来了巨大的通信开销。
2.1.3混合平行方法
除了模型平行和数据平行方法以外,从技术实现上,目前还存在混合平行方法。这一类方法结合了数据平行训练的规模化优势和模型平行训练的低带宽消耗。一些研究将混合了层间分割、层内分割的模型平行训练以及数据平行训练方式称为3D平行训练。但相对应地,对混合平行训练的优化难度也更高。
图6混合了层间分割、层内分割的模型平行训练以及数据平行训练的3D平行训练
以上,我们对模型分拆与并行化训练进行了介绍。然而无论采用何种并行方法,在分布式训练场景中,都必须首先解决好海量数据在不同计算节点间的高速同步与传输。通信效率是分布式训练中的核心瓶颈,而当面对大模型时,这一问题则更加突出。
2.2分布式训练的保障:从本地集群到大范围跨域的数据同步
2.2.1远程直接内存访问技术(RDMA)
针对这些开销,远程直接内存访问(RDMA)技术诞生了。RDMA技术使用专用硬件读写内存数据并直接与外部通信,将数据从本地系统快速移动到远程系统的内存中,而不对操作系统、CPU增加任何负载。
图7RDMA工作原理
目前,RDMA有三种协议:InfiniBand、RoCE、iWARP。
InfiniBand是一种专为RDMA量身定做的网络协议,与TCP/IP不兼容。RoCE允许在以太网上执行RDMA协议(可分为RoCEv1和RoCEv2)。iWARP允许在TCP上执行RDMA协议,它能够运行在标准TCP/IP网络中,对硬件的要求也相对简单(只需iWARP网卡),但缺点是性能比RoCE更差。
图8RDMA协议类型
2.2.2集合通信
分布式训练任务间完成数据传输调度的方式一般可以分为点对点(Point-to-PointCommunication)和集合通信(CollectiveCommunication)。点对点通信是在两个节点之间进行通信和数据同步。集合通信是指在一组节点内进行通信完成数据同步的方式。计算集群中海量数据的同步需要采用集合通信方法。
集合通信一般包含多个Sender和Receiver,通信类型包括:Broadcast、Gather、All-Gather、Scatter、Reduce、All-Reduce、Reduce-Scatter、All-to-All等。
以数据平行训练为例,去中心化的梯度聚合需要每台计算机获得所有计算机计算得到的梯度,这一操作即需要All-Reduce,即将所有设备(All)上的信息归纳(Reduce)到所有设备(All)上。显然,直接的All-Reduce将带来极大的通信资源浪费,因为同一份数据可能会被冗余传输多次。因此,许多优化版All-Reduce算法被提出,如环状All-Reduce、基于二叉树的All-Reduce等,这些算法均能极大降低All-Reduce的带宽和延迟。
图9All-Reduce
当数据同步调度扩展到广域网范围时,现有集合通信思路将面临一些新的问题,例如重新评估各类算法在新场景下的有效性及其效率评测方法,重新建模计算节点的邻近关系等。
2.2.3算力网络
算力网络是一种网络前沿技术,其目标是构建连接算力的网络,使算力像水电一样高效流动。传统的网络设施仅仅承担信息传递的基础功能,是连接用户与计算资源的“数据通道”;而算力网络可以构建数据、计算资源、网络的一体化服务,使计算需求方在网络的帮助下,高效感知并调用远距离的算力资源,打破自身单点计算能力的局限。算力网络能够连接大范围内的算力集群实现计算任务协同,目前被视为支撑多集群间大模型跨域分布式训练的网络基础设施层最优解。
当前,算力网络的发展方兴未艾,体系架构及诸多关键技术还未形成定论,产业及标准化工作也在不断推进中。国际电信联盟(ITU)于2021年9月正式发布的算力网络框架结构标准(ITU-TY.2501:ComputingPowerNetwork–FrameworkandArchitecture)中提出,算力网络主要由四层构成,分别为算力网络资源层、算力网络控制层、算力网络服务层、算力网络编排管理层。