专栏名称: 机器学习算法与Python实战
长期跟踪关注统计学、数据挖掘、机器学习算法、深度学习、人工智能技术与行业发展动态,分享Python、机器学习等技术文章。回复机器学习有惊喜资料。
目录
相关文章推荐
CFC农产品研究  ·  【会议邀请】油脂油料月月谈(第22期) ·  2 小时前  
CFC农产品研究  ·  中央一号文件发布 2025/02/24 ·  15 小时前  
兵团零距离  ·  万物竞发争春来 | ... ·  17 小时前  
兵团零距离  ·  万物竞发争春来 | ... ·  17 小时前  
寿光报  ·  火爆!远销40个国家…… ·  昨天  
寿光报  ·  火爆!远销40个国家…… ·  昨天  
微观三农  ·  “桂字号”农业品牌 | 容县沙田柚 ... ·  2 天前  
51好读  ›  专栏  ›  机器学习算法与Python实战

【干货来了】大语言模型训练优化秘籍

机器学习算法与Python实战  · 公众号  ·  · 2024-03-29 18:01

正文

在了解大语言模型训练优化秘籍之前,我们先来了解一下大语言模型训练面临的挑战,以此进行针对性的训练优化。



大语言模型训练面临的挑战


随着模型参数量规模的增大, 资源和效率 逐渐成为制约模型训练的因素。

按照摩尔定律的预测,芯片的集成度每 18 ∼ 24 个月便会增加 1 倍,这意味着单位计算性能大约每两年翻 1 倍。

模型参数量不超过 10 亿个时,对资源的需求未触达单机硬件的极限。

随着大 言模型 技术的进步,模型的参数量每年增长 10 倍,很快透支了处理器的富余算力。

另外,处理器 的存储资源并未遵循摩尔定律的增长规律,其集成度仅呈线性增长趋势。

因此, 大语言模型天然地对训练工程提出了多机分布式要求。

要实现大语言模型的分布式训练,首先要关注的问题是怎么 切分数据

在传统的分布式系统设计中,根据数据是否有冗余,存在副本与分片两种基本模式。

在大语言模型的训练中,模型参数和训练样本都是要被切分的对象。

根据数据冗余情况、切分内容、切分方法等划分标准,训练工程提出了 数据并行、模型并行、流水线并行、张量并行 等不同的分布式技术。

这些分布式技术,或提高模型训练的参数规模,或提高训练过程中计算资源的利用效率,最终达到加速训练的目的。

在解决了基本的模型与数据切分后,大语言模型的预训练和微调仍无法在几个小时内完成。

训练大语言模型需要投入巨大的资源

以 LLaMA2 模型为例,训练参数量规模为 70B 的模型需要投入累计 170 万卡时,相当于 1,000 张卡训练 70 天。

大量的资源投入会引起边际效用的下降,因此,提高资源投入的边际效用也是训练工程关注的重要课题,常见做法是尽量消除系统中各级传输的瓶颈。

在长时间的大规模训练中,软件或硬件故障不可避免,集群故障的及时发现和恢复速度对训练效率有很大的影响。

此外,监控与容灾也是大语言模型训练工程需要特别关注的技术。




大语言模型训练优化秘籍


分布式训练技术解决了大语言模型训练面临的两个最主要的问题—— 模型参数量大和训练数据量大

如果要保障端到端训练的吞吐量,就还有需要优化的问题,如 I/O 优化、通信优化和稳定性优化。

I/O 优化

大语言模型训练场景下的 I/O 优化有一些常规方法,如增加进程数量以提升数据并发处理效率,通过数据预获取(Prefetch)降低等待时延,优化内存(如 Pin Memory)以提升复制效率,等等。

这些方法在深度学习框架中通常都有内置的支持,也可以通过配置进行完善。

还有一些需要关注的 I/O 问题,如训练数据量比较大,通常有几 TB∼几百 TB,这对存储的要求比较高,既需要大存储容量,又需要高吞吐性能。

需要高吞吐性能的原因是大语言模型需要多节点并行训练,并且每个节点都需要频繁访问存储、加载训练数据,节点越多,对吞吐性能的要求就越高。

除此之外,需要具备足够的容错能力。这对于现有的存储系统是比较大的挑战。具体的优化方案有以下两种。

优化方案一: 高可用的大容量存储服务+本地缓存。 这种方案适用于训练数据量为 TB 级别的情况,本地缓存(当前磁盘容量通常都是 TB 规格)可以完全满足存储需求。训练数据对于模型性能的重要性不言而喻,因此,高可用(容错能力)的大容量存储是必要条件。本地缓存可以很好地满足数据的高吞吐需求。训练开始前,要先通过数据预热将训练数据同步至各个计算节点的本地缓存。由于一次模型训练过程通常包含多轮,因此,初始数据预热占用的同步时间在整个训练过程中的占比很低,而且本地缓存不受节点数量增加的影响,可以保证每个节点具有同等的吞吐性能。本地缓存数据加速过程如图所示,该过程包括数据预热和加载数据两个关键步骤。

(1)数据预热: 大容量存储服务,将训练数据分发至所有计算节点的本地缓存。

(2)加载数据: 计算节点从本地缓存读取训练数据,无须访问远程大容量存储。

数据预热时需要将一份数据快速分发到多个计算节点。传统的做法是:设置一定的并发量,每个计算节点分别从远程中心存储加载数据。这种方式的中心存储很容易成为瓶颈,效率不高。可优化为采用 P2P 链式分发,即部分节点先从中心存储获取数据副本,当这些节点得到完整副本后也变成数据服务,并向其他节点分发数据。这样做效率更高,性能可提升数倍。

优化方案二: 高可用的大容量存储服务+高性能的分布式缓存。 前者需满足容量和容错能力的需求,后者解决本地缓存容量过小的问题,同时满足高吞吐性能。该方案适用于训练数据量为几十TB∼几百TB 的场景,若本地缓存容量过小,在这类场景中将无法存放完整的训练数据。因为训练数据的使用规律是每轮只使用 1 次,且每轮都对数据进行随机打乱(Shuffle),所以本地缓存的数据难以被复用。如图 9.12 所示,分布式缓存利用训练节点的本地缓存组成一个大的分布式缓存服务,解决本地缓存容量过小的问题,并通过以下两点满足对吞吐量的要求。

(1)Read-Through 读取: 在读取数据时优先从本地缓存中读取,速度最快。

(2)Read-Neighbour 读取: 如果在本地缓存中检索不到数据,则从邻居节点中读取,其速度优于直接从远程读取。


通信优化

大语言模型训练通常需要多机、多节点并行计算,合理的通信优化能有效地提升训练吞 吐量。

不同的分布式并行技术对通信带宽的要求不同,因此,针对不同的硬件环境,需要选 择最适合的分布式并行方案,并针对不同的数据量和模型特点做针对性的优化,从而达到 最好的通信效率。

9.13 NVIDIA CPU 多机、多节点的链接拓扑,单机内的节点通过 NVIDIA 专有高速链接( NVLink ,带宽为 300Gbps 以上)通信,多机之间通过以太网(带宽 100Gbps 200Gbps )或者 RDMA 网络 ( 带宽为 800Gbps 以上 ) 通信。

首先, 需要根据网络条件选择使用哪种并行方案。

如果网络是普通的以太网,则多机之 间的带宽容易成为通信的瓶颈。首选方案是混合并行(或三维并行)。将需要高通信量的数 据并行和张量并行安排在单机内,这样可以充分利用单机内的高速通信(如 NVLink )。

后, 多机之间采用流水线并行,这样多机之间只需要同步中间结果,通信量远小于模型权重 参数。

次选方案是分层 ZeRO3 方案 。相比于原生 ZeRO3 方案,前者可以降低网络通信瓶 颈的影响。

如图 9.14 所示,该方案利用单机内的高速通信,只在单机内切分权重参数,可有 效降低权重参数同步的时延。

由于多机之间需要进行梯度同步,因此能明显观察到通信时延 的影响。虽然混合并行方案比流水线并行方案的性能好,但是需要深入适配模型代码,实现 难度较高。

虽然流水线并行方案的性能不如混合并行方案,但是更容易实现,且性能优于原 ZeRO3 方案。

混合并行方案和流水线并行方案的扩展性都受限于单机的计算能力,模型 参数量的规模不能随着机器数量的增加而扩展。

RDMA 网络是大语言模型训练比较理想的网络条件。与以太网相比,RDMA 网络的吞 吐量增加了 4 8 倍,时延减少了 90% (从 50 µ s 降至 5 µ s )。

如图 9.15 所示,相比传统 TCP/ I P 通信, RDMA 通信可以跳过内核操作,将数据从用户态直接发送到网络,实现低时延、高 吞吐。选择分布式并行方案时,网络通信不会成为限制因素。

首选方案是采用 ZeRO3 算法, 此方案容易实现,模型参数量可随机器数量的增加而增加。

备选方案是混合并行,根据网络 拓扑和模型网络结构适配设计张量并行、流水线并行和数据并行的数量。此方案可达到更高 的吞吐量,但实现难度较大。

RDMA 网络的缺点是不够成熟,维护配置难度较大,稳定性不如以太网,因此在使用 RDMA 网络时,需要从软件层面做一些配置优化。常见优化如下。

(1)网络“参数面”调优 这关系到 RDMA 网络的性能和稳定性,需要专业网络工程 师的支持。出于对成本的考虑, RDMA 网络一般会选择 RoCE 方案实现,即 Infiniband 网卡 + 以太网交换机(不是 Infiniband 专用交换机)。要充分发挥 RDMA 网络的性能,需要建立 不丢包的无损网络环境。而对于 RoCE 方案, PFC Priority-based Flow Control ,基于优先 级的流量控制)可以解决网络拥塞,实现不丢包的无损网络。

(2)开启 GDRDMA, 即允许数据在网卡和显存之间直接读写,无须经过内存复制,效 率更高。通常可提升 20% 30% 的吞吐量。

(3 )NCCL 调优: 由于主要的硬件加速设备是 NVIDIA 显卡,所以 NCCL 是目前多机通 信效率最高的选择。 NCCL 包含大量可用于优化通信效率和稳定性的配置,如提升 Infiniband 通信中断容忍度的 NCCL_IB_TIMEOUT NCCL_IB_RETRY_CNT 等;便于优化 NCCL 通信的调试日志,即 NCCL_DEBUG NCCL_DEBUG_SUBSYS 等。


稳定性优化

由于模型参数量和训练数据量都比较大,因此大语言模型的训练周期较长,少则几天,多 则一两个月。

训练过程包含大量的计算节点、网络设备,任何一个环节出现问题都会使训练无 法正常完成。保障训练稳定进行,或者降低故障次数和 MTTR Mean Time To Repair )非常 重要。常见的故障包括计算节点单机故障(如 CPU 、内存、磁盘、 GPU 等出现故障)、网络中 断(如网卡故障、网线脱落、交换机故障等),以及软件故障(如磁盘满、代码错误、集群维护 性故障等)。可以通过以下方式规避故障问题。

(1)问题排查及预防: 定期进行健康检测,提前发现问题,有针对性地进行改善。

  • 单机层面:进行容量监控,设备及系统健康检测,及时发现并处理问题。

  • 网络层面:流量监控和控制,避免无效流量对训练网络的影响,通过节点探访,及时发 现并解决风险点。

  • 软件代码层面:小规模数据量的 Demo 测试,保障所有代码路径有效测试(数据加载、







请到「今天看啥」查看全文