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