首页 资讯速递 正文

人工智能模型的分布式训练技术

2023-12-21 17:32 咸宁新闻网

1. 算力荒:大模型绕不开的大难题

自从ChatGPT引爆大模型发展热潮,众多科技企业前赴后继,纷纷投入大模型研发中。然而,这波创业浪潮中鲜有小微初创企业的身影,甚至一些堪称“准独角兽”规模的企业,也只集中在大模型的下游应用创新或微调中,不具备独立的大模型创新能力。与海外层出不穷的新成果相比,我国这波创新浪潮远不够猛烈。而与该现象相对的是:大模型背后的神经网络技术其实早已颇为普及;国内拥有众多专业人才,有能力独立完成模型的设计、搭建和训练。

由此,一类观点认为:大模型创新的主要门槛并不在算法与技术,而在于训练一个大模型、完成思路验证和检验所需的超大规模算力。算力,才是这条赛道最高的墙。

让我们用数字更直观地理解这一困难:

大模型的海量参数绝非单台计算设备所能容纳,集群是大模型训练的标配。GPT的训练集群规模为25000张A100,按官方售价折算已达数亿美金。这远非绝大多数创新企业所能承担。由于上万个计算单元间的数据同步效率会给大模型训练带来重要影响,因此对单数据中心建设规模的要求也达到新高,连一些专业服务商都难以独立提供可满足大模型训练需求的单一计算集群。而我国当下还面临着愈发严苛的制裁:海外硬件资源越发紧缺,国产替代品依然存在较大性能差距。

解决算力不足,成为中国人工智能创新发展的核心问题。

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量身定做的网络协议,可以从硬件级别上保证数据传输的可靠性。InfiniBand与TCP/IP不兼容,从链路层到传输控制层都需要专用实现。

RoCE允许在以太网上执行RDMA协议(可分为RoCEv1和RoCEv2)。RoCE是为了满足更大市场需求而设计出来的低成本InfiniBand网络。

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

我们以环状All-Reduce为例说明集合通信优化调度的思路:基于环状All-Reduce,每台设备仅需与另外两台设备通信,分为Scatter-Reduce与All-Gather两个步骤。首先对相邻设备完成多次Scatter-Reduce操作,在每台设备分别获取得到聚合后的完整数据中一部分。随后,每台设备再对其相邻设备完成多次All-Gather操作,在每台设备中补全完整数据。环状All-Reduce不仅能降低带宽和延迟,还可以简化网络的拓扑结构,降低网络的搭建成本。

当数据同步调度扩展到广域网范围时,现有集合通信思路将面临一些新的问题,例如重新评估各类算法在新场景下的有效性及其效率评测方法,重新建模计算节点的邻近关系等。

图10 Scatter-Reduce的第一与最后一次循环

图11 All-Gather的第一与最后一次循环

2.2.3 算力网络

算力网络是一种网络前沿技术,其目标是构建连接算力的网络,使算力像水电一样高效流动。传统的网络设施仅仅承担信息传递的基础功能,是连接用户与计算资源的“数据通道”;而算力网络可以构建数据、计算资源、网络的一体化服务,使计算需求方在网络的帮助下,高效感知并调用远距离的算力资源,打破自身单点计算能力的局限。算力网络能够连接大范围内的算力集群实现计算任务协同,目前被视为支撑多集群间大模型跨域分布式训练的网络基础设施层最优解。

当前,算力网络的发展方兴未艾,体系架构及诸多关键技术还未形成定论,产业及标准化工作也在不断推进中。国际电信联盟(ITU)于2021年9月正式发布的算力网络框架结构标准(ITU-T Y.2501:Computing Power Network–Framework and Architecture)中提出,算力网络主要由四层构成,分别为算力网络资源层、算力网络控制层、算力网络服务层、算力网络编排管理层。

图12 算力网络功能架构

算力网络资源层对算力服务方和网络运营方提供的各类计算资源进行了抽象,主要涉及云计算节点、边缘计算节点等各类设备资源,例如各类服务器上的计算资源和部署的服务资源、交换机和路由器上的网络资源、存储设备上的存储资源。

算力网络控制层从算力网络资源层收集资源信息,并将资源信息发送给服务层以便其处理相关算力服务请求。当接收到算力网络服务层的服务请求处理结果后,算力网络控制层将根据资源状态信息生成资源分配策略,并通知资源供应商占用相关资源、更新资源状态信息。此外,根据资源分配策略获取网络连接需求,调度相关网络资源,建立对应网络链路。

算力网络服务层主要用于实现具体算力服务功能。算力网络服务层通过算力网络控制层获取各种算力资源信息和网络资源信息,根据算力服务请求和资源信息,提供可选的资源和对应价格,并支持算力服务用户和各类资源供应商完成交易过程。

算力网络编排管理层能够为算力网络实现编排、安全、建模和运维管理功能。算力编排模块负责对算力网络中各类资源和服务进行编排管理。算力网络安全模块负责采用安全相关的控制手段消除算力网络环境中的各种威胁隐患。算力建模模块用于根据各种服务对算力的状态及变化规律进行定量化描述。算力运维管理模块能够负责算力网络的各种运行操作管理及维护。

基于上述各层的能力支撑,算力网络完成对算力资源的抽象、标识、路由、调度等,实现远距离计算供需间的高效匹配。大模型分布式训练作为一项整体的计算任务,在经过并行化处理、数据同步调度决策后,形成多个更小颗粒度的计算子任务,由算力网络依据所需的QoS,在分布式的算力集群间完成统筹调配。

3. 总结与展望

单点算力的不足,促使学术界和工业界投入更多的视线到分布式训练技术,希望基于广域内分散的多个算力集群,开展协同训练。一方面,这是一场以空间换时间的战斗:通过投入更多的集群,给算力单点的能力提升争取时间。另一方面,这也许是中西部算力产业转型升级的大好机会:长期以来,虽然中西部算力集群有成本更低、绿电占比更高等优势,但也存在业务需求单一、不足等问题,当人工智能需求爆发后,又出现因单点建设规模不足难以提供服务等困难。然而,当分布式训练技术不断成熟后,在算力网络高效调度的整体统筹下,分散的小规模数据中心将有更多机会参与到巨大的人工智能需求所释放的产业机遇里,这可能是中西部城市通过并不高的投入就能深度参与到人工智能发展浪潮中的好机会。

大模型是一种超大规模的神经网络模型。传统神经网络分布式训练技术长期以来更多局限于单集群内,跨域场景较少。让大模型在大范围多集群间完成分布式训练,一方面,将会在模型拆分等计算任务上增加更多新挑战;另一方面,在广域网完成海量训练数据的同步,所涉及的相关网络及调度问题也将是一个新的研究场景。相关研究会逐步更新现有技术栈,乃至形成全新的技术栈。而当“星火·链网”等区块链平台通过提供分布式激励保障和可信计算环境等基础条件,也更加深入地融进算力网络、人工智能分布式训练等新型计算场景,全新且巨大的产业机遇更会应运而生。

本文作者:

信通院泰尔英福iF-Labs 焦臻桢、张晓普

同济大学电信学院 唐志恒、李莉

声明:本站作为信息内容发布平台,页面展示内容的目的在于传播更多信息,不代表本站立场;本站不提供金融投资服务,所提供的内容不构成投资建议。如您浏览本站或通过本站进入第三方网站进行金融投资行为,由此产生的财务损失,本站不承担任何经济和法律责任。 市场有风险,投资需谨慎。同时,如果您在中国发展网上发现归属您的文字、图片等创作作品被我们使用,表示我们在使用时未能联系到您获取授权,请与我们联系。

【本文资讯为广告信息,不代表本网立场】


返回首页
相关新闻
返回顶部