大型语言模型(LLMs)的训练原理与网络架构解析
生成式人工智能和大型语言模型的基本概念及应用场景,详细阐述了 LLM 的训练流程,包括数据收集、标记化及监督微调。重点分析了模型计算所需的硬件资源,并深入探讨了数据并行、模型并行、流水线并行和张量并行四种训练策略及其对网络通信的影响。最后结合网络工程师视角,解析了 LLM 训练对网络带宽、延迟及拓扑结构的具体要求,为构建高效智算网络提供技术参考。

生成式人工智能和大型语言模型的基本概念及应用场景,详细阐述了 LLM 的训练流程,包括数据收集、标记化及监督微调。重点分析了模型计算所需的硬件资源,并深入探讨了数据并行、模型并行、流水线并行和张量并行四种训练策略及其对网络通信的影响。最后结合网络工程师视角,解析了 LLM 训练对网络带宽、延迟及拓扑结构的具体要求,为构建高效智算网络提供技术参考。

数字时代,人工智能(AI)及其相关技术正日益成为许多领域的热门话题。其中,生成式人工智能(Gen AI)和大型语言模型(LLMs)引起了广泛的兴趣和讨论。然而,尽管这些术语在科技界和专业领域中频繁出现,网络工程师对其的理解却不多。
**生成式人工智能(Generative AI)**是一种人工智能技术,专注于创造或生成新的内容,例如图像、文本或音乐。这些内容不是直接复制或派生自现有的示例,而是由计算机自己创造的。生成式 AI 的一个重要应用是生成文本,比如自动写作、诗歌创作或对话生成。
**大型语言模型(Large Language Models, LLMs)**是一类生成式 AI,它们通过深度学习算法在大量自然语言数据上进行训练。这些模型学习人类语言的模式和结构,并能够对各种书面输入或提示生成类似人类的回应。最近的 LLMs 表现出了接近人类的水平,例如 GPT-3.5,它能够产生几乎完美的文本回应。
这些近乎完美的类人化回应,包括来自 ChatGPT 和其他最近的 LLMs,得益于模型架构的进步。这些模型采用高效的具有数十亿个参数的深度神经网络(DNNs)经过大规模数据集的训练得出,其中大部分参数被用于训练和推理的矩阵权重。而训练这些模型的浮点运算次数(FLOP)几乎与参数数量和训练集大小成线性关系。这一系列运算是在专门用于矩阵运算的处理器上执行的,例如图形处理单元(GPUs)、张量处理单元(TPUs)和其他专用的 AI 芯片等。GPU、TPU、AI 加速器以及它们之间的通信互联技术的进步让庞大模型训练成为现实。
大型语言模型(LLMs)具有许多用例,几乎每个行业都可以从中受益。不同的组织可以根据自身的特定需求和领域对模型进行微调。微调是指在特定数据集上对预先存在的语言模型进行训练,使其更专业化并适应特定任务。通过微调,组织可以在利用这些训练模型预先存在能力的同时,将其调整得能够满足自己的独特需求,这让模型能够获取领域特定的知识,从而提高其生成组织用例所需输出的能力。
例如,根据公司文档进行微调的 LLMs 可用于客户支持。LLMs 可以通过创建代码或支持他们创建部分代码来帮助软件工程师。当与组织的专有代码库进行微调时,LLMs 有可能生成类似于并符合现有代码库的软件。
LLMs 的众多用例包括用于评估客户反馈的情绪分析、将技术文档翻译成其他语言、总结会议和客户电话以及生成工程和营销内容。
随着这些 LLMs 的规模持续呈指数级增长,对计算和互连资源的需求也显着增加。只有当模型的训练和微调以及推理有足够成本效益时,LLMs 才会被广泛采用。
为了使用自然语言文本训练 LLM,通常需要收集大量数据,包括网络抓取(爬取网页)、维基百科、GitHub、Stack Exchange、ArXiv 等。大多数模型通常使用开放数据集进行训练。这些数据集中的大量文本首先会进行标记化,通常使用字节对编码等方法。标记化将来自互联网的原始文本转换为整数序列(标记,tokens)。一个标记(唯一整数)可以表示一个字符或一个单词,甚至可以是单词的一部分。例如,单词'unhappy'可能会被分成两个标记——一个表示子词'un',另一个表示子词'happy'。
根据数据集的不同,可能会有成千上万个唯一标记,数据集本身可能映射到数千亿个标记。序列长度是模型在训练过程中预测下一个标记时要考虑的连续标记的数量。GPT-3 和 LLaMA(Meta 的 LLM)的序列长度约为 2000。一些模型使用的序列长度甚至达到 10 万。
表 1 比较了 GPT-3 和 LLaMA 模型的训练参数:
| 模型 | 词汇量大小 | 序列长度 | 最大训练模型参数 | 训练数据集中的标记数 | GPU 数量 | 训练时间 |
|---|---|---|---|---|---|---|
| GPT-3 Large | 50,257 | 2,048 | 1750 亿 | 3000 亿 | 10,000 x V100 GPUs | 一个月 |
| LLaMA | 32,000 | 2,048 | 650 亿 | 1 到 1.3 万亿 | 2,048 x A100 GPUs | 21 天 |
一旦基础模型训练完成,通常会进行监督微调(Fine-Tuning, SFT)。这是一个可以让 LLMs 扮演助手角色,回答人们提示问题的重要步骤。在有监督微调中,人们会创建一个精心策划的数据集(数量较少但质量很高的数据集),其中包含提示和响应的形式,然后使用这个数据集重新训练基础模型。经过训练的 SFT 模型会成为一个能对用户提示作出类似人类回应的助手。
一个具有 1750 亿参数的模型通常需要超过 1TB 的内存来存储参数和计算过程中的中间状态。它还需要存储检查点的训练状态(以防在训练迭代过程中遇到硬件错误)。一万亿个标记通常需要 4TB 的存储空间。像 Nvidia 的 H100 这样的高端 GPU 具有 80GB 的集成 HBM 内存。如果一个模型需要 4TB 显存,理论上需要 51.2 张卡才能装下。
根据维基百科的说法,大型语言模型(LLM)通常每个参数和标记需要进行六次浮点运算(FLOP)。这相当于对 GPT-3 模型进行训练需要进行 $3.15 \times 10^{23}$ 次浮点运算,其中 GPT-3 模型的训练耗时为三周。因此,在这三周的时间内,它需要 $5.8 \times 10^{16}$ 次每秒的浮点运算能力(FLOPs)。
然而,尽管 Nvidia 的最高性能 H100 GPU 在 FP32 模式下可以达到约 67 TeraFLOPS,但在许多训练工作负载中,由于内存和网络瓶颈,GPU 的利用率通常只能维持在 30% 左右。因此,为了满足训练需求,我们需要三倍数量的 GPU,大约是 6,000 个 H100 GPU。原始的 LLM 模型是使用较旧版本的 GPU 进行训练的,因此需要 10,000 个 GPU。
由于有成千上万个 GPU,模型和训练数据集需要在这些 GPU 之间进行分区,以实现并行运行。并行性可以在多个维度上发生。
数据并行性涉及将训练数据分割到多个 GPU 上,并在每个 GPU 上训练模型的副本。典型流程包含数据分布、数据复制、梯度计算、梯度聚合、模式更新和重复等。
数据并行性可以在使用大型数据集时显著加快训练速度。然而,它可能会导致大量的 GPU 间通信,因为每个 GPU 都必须与训练中涉及的其他 GPU 通信。这种全对全的通信(All-to-All)可能会在每次训练迭代中在网络中产生大量的流量。
训练大型语言模型(LLMs)时,我们使用了一些方案,例如环形全局归约(Ring All-Reduce),将梯度以环形模式从一个 GPU 发送到另一个 GPU。在这个过程中,每个 GPU 将其从前一个 GPU 接收到的梯度与本地计算的梯度进行聚合,然后将其发送到下一个 GPU。然而,这个过程非常缓慢,因为梯度聚合分布在多个 GPU 之间,最终结果需要在环形拓扑中传播回所有 GPU。如果网络拥塞,GPU 之间的流量会因等待聚合梯度而停滞。
此外,具有数十亿参数的 LLMs 无法适应单个 GPU。因此,仅靠数据并行性无法满足 LLM 模型的需求。
模型并行性旨在解决模型无法适应单个 GPU 的情况,通过将模型参数(和计算)分布到多个 GPU 上。典型的流程包含模型分区、前向传播、反向传播、参数更新、重复等。
模型并行性允许训练无法适应单个 GPU 的大型模型。但是,它还在前向和反向传播期间引入了 GPU 之间的通信。此外,上述描述的简单实现方式,即将整个训练数据集通过一系列 GPU 运行,对于 LLMs 来说可能不太实际,因为数据集的规模巨大。它还在 GPU 之间创建了顺序依赖关系,导致等待时间较长且计算资源严重闲置。这就是流水线并行性的作用。
流水线并行性将数据并行性和模型并行性相结合,其中训练数据集的每个小批量进一步分成几个微批量。在上面的模型并行性示例中,一个 GPU 使用第一个微批量计算输出,并将该数据传递给序列中的下一个 GPU。与在反向传播中等待从该 GPU 获取输入不同,它开始处理训练数据集的第二个微批量,依此类推。这增加了 GPU 之间的通信,因为每个微批量都需要在序列中相邻的 GPU 之间进行前向传播和反向传播的通信。
张量并行性是一种用于加速深度学习模型训练的技术。与模型并行和流水线并行技术不同,张量并行性在操作级别(或'张量'级别)上划分模型,而不是在层级别上划分。这种方法允许更精细的并行处理,对某些模型来说更高效。
具体来说,张量并行性的步骤如下:
假设我们有 2 台机器(node0 和 node1),每台机器上有 8 块 GPU,GPU 的编号为 0~15。我们使用这 16 块 GPU,做 MP/DP/TP/PP 混合并行:
[[g0, g1, g4, g5, g8, g9, g12, g13], [g2, g3, g6, g7, g10, g11, g14, g15]][[g0, g1], [g4, g5], [g8, g9], [g12, g13], [g2, g3], [g6, g7], [g10, g11], [g14, g15]][[g0, g4, g8, g12], [g1, g5, g9, g13], [g2, g6, g10, g14], [g3, g7, g11, g15]][[g0, g2], [g1, g3], [g4, g6], [g5, g7], [g8, g10], [g9, g11], [g12, g14], [g13, g15]]读完本文,相信你对训练大语言模型(LLMs)的三个步骤已经很熟悉:通过网络抓取等方式进行数据集集成;将源文本分割为标记;通过模型参数并行处理的方式进行模型训练。相信你也对大数据模型的多种并行类型有了初步认识:无论使用何种并行性类型,LLM 凭借其参数和数据集的庞大规模,都会通过连接这些 GPU 的结构产生大量的 GPU 间流量。结构中的任何拥塞都可能导致训练时间过长且 GPU 利用率极低。
作为网络工程师,理解 LLM 训练对网络基础设施的要求至关重要。以下从技术和市场角度分析网络在其中的关键作用:
LLMs 训练之初便需要通过网络抓取大量的数据集成数据集,数据集中的大量参数和数据需要通过网络传输到 GPU 上进行并行处理,网络连接的质量直接影响了数据传输的速度和效率。LLMs 的训练会涉及到多个 GPU 的协同工作,连接这些 GPU 的网络结构会产生大量的 GPU 间流量,如果网络拥塞,数据传输会受到影响,导致训练时间过长且 GPU 利用效率降低。
因此,网络的稳定性、速度和带宽都对 LLMs 的训练效果至关重要。 网络拥塞可能导致训练效率下降,因此需要优化网络架构,确保数据传输的高效性。
在构建支持 LLM 训练的智算中心时,网络设计需重点关注以下指标:
人工智能作为人们高度关注的热点话题,在许多领域拥有巨大的市场潜力。LLMs 训练完毕后,大模型与用户的交互过程中(如 ChatGPT 爆火,全球很多用户都在使用的情况),网络质量会直接影响用户对 Gen AI 应用的体验。拥有先进技术和工具是企业保持竞争优势的关键,持续关注智算市场的发展,推出相应的网络解决方案,为用户提供良好的网络环境,是实现用户与自身双赢的关键。
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。如果你能深入理解大模型背后的网络需求,你就已经开始具备成为一名 AI 基础设施专家的特征了。后续将继续推出 AI 系列科普文,为大家介绍 GPU/TPU 集群设计,以了解互连以及它们如何进行 LLM 训练。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online