
从大语言模型(LLM)面试的经典算力规划问题——以业界标杆GPT-3(175B)和一个经典的32B模型为演算基准,结合英伟达H100与国产昆仑芯RG800两款代表性算力卡,一步一步推演实际训练和部署一套大模型需要多少张算力卡?接下来我们以这道题的释疑为主线,结合张量并行、数据并行、流水线并行,8大核心训练过程和关键工程参数的深度解析、以及一套可复现的、从模型参数到GPU硬件集群规模的演算过程为您全面谈谈关于这个问题的见解。
01
章:LLM训练背景知识扫盲
在进行具体算力演进时,我们先针对性的结合大模型训练最核心、最刚需的背景入手进行知识扫盲。
1.1 宏观视角:LLM开发的三个核心阶段
一个完整的LLM完整训练生命周期经过预训练、有监督微调、对齐三个不同过程:
阶段一:预训练 (Pre-training)
通过无监督学习从海量未经标注的文本数据中研究学习知识、统计规律和推理能力,然后通过概率论预测下一个词(Token)的形式来尝试回应人力的问题,这个过程是需要大量消耗算力, 要高效地训练出像 GPT-3 这样强大的基础模型,除了巨量的算力以外,还需要3D(数据并行、张量并行和流水线并行) 混合并行策略。大模型预训练的过程有点类似于参加高考的学生,在没有划重点之前毫无头绪只能从已有的课程里面一遍一遍的学习。
阶段二:有监督微调 (SFT, Supervised Fine-tuning)
使用高质量、经过人工标注的“指令-回答(一问一答)”数据对来教会模型理解和遵循人类的指令,使其从一个知识渊博的“复读续写机器”转变为一个乐于助人的“对话助手”。这一过程被称为指令微调模型 (Instruction-tuned Model),通常主要应用数据并行或结合张量并行来完成,对于资源的消耗来说没有预训练那么多。有监督微调类似于参加高考的学生考试机构已经给划了重点知识点和考点。
阶段三:对齐 (Alignment)
基于人类的偏好,通过有监督强化学习(RLHF)和 有监督微调(SFT),让大模型生成的内容符合人类的价值观和行为,感觉有点类似于通过一次次的模拟考试以达到最终在高考的时候获得最高分。
1.2 微观视角:三大并行策略概述
像GPT3、GPT3.5这种千亿参数大模型,市面上任何单一硬件都无法独立加载和运行,所以需要大规模LLM训练必须采用分布式并行和混合并行来解决容量(放得下)和吞吐量(算得快)的问题。其中三大核心策略如下:
并行策略 | 一句话概述 | 核心目的(解决什么问题) | 一词总结 |
|---|---|---|---|
张量并行 (TP) | 将单个模型层的权重矩阵沿特定维度切分,接着分配给不同的设备进行并行计算。 | 解决单个模型层的显存容量限制(权重矩阵太大)。 | 放得下 |
流水线并行 (PP) | 将模型的不同层分配给不同的设备形成一个数据处理流水线串行计算。 | 解决总模型深度导致的显存容量限制和激活值存储压力。 | 放得下 |
数据并行 (DP) | 将完整的模型副本复制到多组设备上,借着让每个副本独立处理数据集的不同切片。 | 解决训练吞吐量问题,满足训练周期要求(算得不够快)。 | 算得快 |
详细对比
特性 | 张量并行 (TensorParallelism) | 流水线并行 (PipelineParallelism) | 数据并行 (DataParallelism) |
|---|---|---|---|
切分对象 | 模型层内的参数和计算 | 模型的层次结构 (layers) | 训练数据集 |
核心解决问题 | 解决单个模型层的显存容量限制(单层权重太大) | 解决完整模型的显存容量限制(模型太深/总参数量大) | 解决训练速度/吞吐量问题(数据太多算不完) |
通信机制 | 层内计算同步(如 All-reduce 或 All-gather)的通信量巨大 | 跨越流水线的激活值/梯度的点对点 (P2P) 传输 | 跨越模型副本的梯度同步(通常是 All-reduce) |
效率挑战 | 层内频繁且高带宽的同步 | “气泡 (Bubble)”问题 | 主要的性能瓶颈:All-reduce 梯度同步 |
1.3 LLM的8大核心计算过程(单次训练步)
在预训练阶段中每一次参数更新(一个Training Step)都必须经历以下8个核心计算环节,正因为这些环节极具消耗资源(尤其是在点乘矩阵、向量加法时),才是决定我们最终硬件需求的关键。
○ a. 向量化: 通过查询词嵌入矩阵将输入的Token ID 序列 转换为已叠加位置编码信息 的高维 Token 向量序列。
○ b. 逐层特征提取 (96次循环): 向量序列依次通过96个Transformer解码器块,每个块执行以下两大核心计算:
■ 多头自注意力(Multi-Head Self-Attention): 将输入的向量与三个权重矩阵相乘得到查询(Q)、键(K)和值(V) 三个向量。随后模型通过计算 Q 和 K 的点积得到一个注意力分数(该分数决定了当前 Token 在其所在序列内部对其它 Token 的关联程度),这个注意力分数最终还会跟V向量再进行加权求和操作,这个过程的核心计算公式如下: Attention(Q, K, V) = softmax(QKᵀ / √dₖ)V
■ 前馈神经网络 (Feed-Forward Network, FFN): 为了进一步增强模型的表达能力,注意力机制的输出会经过一个两层全连接神经网络进行非线性变换。
○ c. 生成预测: 经过96层处理后最终的向量序列通过一个线性层(Linear Layer)映射到完整的词汇表空间上得到每个词的“得分”(Logits),随后模型应用Softmax 函数将这些得分转换为概率分布用于预测下一个 Token(其中概率最高的Token即为模型的预测输出)。
5.损失计算 (Loss Calculation): 模型将预测得到的概率分布 与真实的下一个 Token 进行对比,再通过损失函数(通常为交叉熵损失,Cross-Entropy Loss)来量化和计算模型的预测误差(Loss)。
6.反向传播与梯度计算 (Backward Pass & Gradient Calculation): 模型使用链式法将计算出来的误差值反向传播回网络中,此过程中计算出所有可训练参数(如Wq, Wk, W_v矩阵、FFN权重等)相对于损失的梯度(Gradient)值决定了模型参数下一步调整的方向和大小。
7.梯度同步与参数更新 (Gradient Synchronization & Update): 数据并行(DP) 组内所有GPU的梯度通过 All-reduce 同步求平均梯度值,进一步优化器(Optimizer)使用平均梯度来更新模型的权重参数。
8.周期性评估与检查点 (Evaluation & Checkpointing): 周期性地使用验证集评估模型性能,与此同时保存模型权重和优化器状态的检查点从而防止训练中断。
1.4 八大核心与四大步骤与3D并行的关系
步骤编号 | 八大核心 | 四大关键步骤 | 架构与并行关系 |
|---|---|---|---|
1 | 数据准备与Token化 | 准备阶段:为后续的核心计算提供合格的输入数据做准备 | / |
2 | 模型初始化与配置 | 【一、模型初始化】 :实例化 Transformer 架构参数矩阵并赋予随机值。 | Transformer是模型的骨架,参数量决定 TP/PP 需求。 |
3 | 混合并行配置 | 工程部署:为后续的计算步骤分配硬件资源和通信策略。 | / |
4 | 前向传播 (Forward Pass) | 【二、前向计算】:输入向量化后在 Transformer 层内计算激活值 , 包含以下三个子步骤 | TP 组内完成计算,激活值沿着 PP 流水线传递。 |
4.1 | 向量化 | 2.1 : 数据进入 Transformer 架构的 Embedding 层。 | |
4.2 | 逐层特征提取 | 2.2 : 核心的Transformer计算在 TP 组内完成;激活值沿着 PP 流水线传递。 | |
4.3 | 生成预测 | 2.3 :模型输出 Logits 和 通过 Softmax 得到预测概率 值。 | |
5 | 损失计算 (Loss Calculation) | 评估结果:将预测结果转化为可量化的误差值。 | / |
6 | 反向传播与梯度计算 | 【三、反向计算】:计算出参数调整的方向和大小(即梯度)。 | 梯度计算由 TP 组分摊,梯度沿着 PP 流水线逆向流动。 |
7 | 梯度同步与更新 | 【四、参数更新】:完成一次学习,模型参数(知识)发生改变,是训练的终极目的。 | 数据并行(DP) 的核心步骤,确保模型副本一致。 |
8 | 周期性评估与检查点 | 维护与质量控制:确保训练过程的稳定性和模型性能的持续提升。 | / |
02
章:LLM训练所需GPU数量的精密演算
本章与您分享将聚焦于如何从一个模型的参数量一步步推导出最终所需的GPU集群规模的演算过程。
2.1 基础理论:训练显存的构成与计算公式
在采用BF16混合精度和Adam优化器的典型训练场景下,每个模型参数所需的总显存(我们称之为“模型状态”)由以下四部分构成,总计 12字节/参数。
● 模型本身 (权重, W): BF16精度,占用 2字节。
● 努力方向 (梯度, G): BF16精度,占用 2字节。
● 优化经验 (优化器状态, M & V): FP32精度,占用 8字节。
通俗地讲,一个参数在训练时,相当于一个需要同时携带三样东西的“旅行者”:
旅行者携带的“行李” | 技术名称 | 精度/大小 | 作用 | 显存消耗 |
|---|---|---|---|---|
行李 1:模型本身 | 权重 (W) | BF16 (2 字节) | 模型的主体,用来推理 | 2 字节 |
行李 2:努力方向 | 梯度 (G) | BF16 (2 字节) | 记录模型应该朝哪个方向优化 | 2 字节 |
行李 3:优化经验 | 优化器状态 (M & V) | FP32 (8 字节) | 记录过去优化的动量 (Momentum) 和方差 (Variance),确保优化稳定且高效。这是 Adam 算法的核心,需要更高的精度 (FP32) 来避免数值错误。 | 8 字节 |
总计 | 每参数训练状态 | - | 12 字节 |
GPT3(1750亿参数)在实际训练部署过程不能仅仅看1750亿参数,那只是包含模型模型权重 (Weights) 本身,还要看GPU显存中所有相关的数据之和,即上面提到这个GPU 需要为每个参数存储 12 字节的关联数据,所以GPT3世实际训练的时候总模型状态显存为:
175B × 12 bytes/param ≈ 2.1 TB
2.2 工程实践:关键参数的由来与决策逻辑
2.2.1 单卡安全目标系数:0.6
一张 GPU 卡(如 32GB 的昆仑芯 RG800)的显存被大致分为以下几部分:
● 模型状态 "(W, G, M, V)": 固定占比, 模型参数本身,通过 12 bytes/param 精确计算即2.1介绍的内容。
● 激活值 (Activations): 动态占比, 通常是显存的最大消耗者:前向传播的中间结果用于反向传播,大小与 Batch Size 和 Sequence Length 成正比。
● 通信缓存 (Buffers): 动态占比, 用于 All-reduce、点对点通信时的数据暂存。
● 系统开销 (System): 固定小占比, 操作系统、CUDA 驱动、框架 Runtime (如飞桨) 的开销。
决策逻辑: 工程实践中通常采用0.6 (即60%) 作为一个经验安全系数,将“模型状态”的占用限制在单卡总显存的60%以内进而防OOM (Out of Memory)错误。
计算公式: 单卡模型状态安全目标 = 单卡总显存 × 0.6
所以英伟达H100 显存为 80 GB,我们要将2.1计算的GPT3的2.1TB的模型状态分摊到每张卡上,与此同时留出足够的空间给激活值和通信缓存,我们期望模型状态(不含激活值)占用显存的 1/3 到 1/2 左右(即上面提到的0.6系数),因此,我们将H100的目标模型状态控制在 25 GB 左右可以保证训练的稳定性和效率。
2.2.2 张量并行度 (P_TP) 的决策逻辑
以业界主流的NVIDIA DGX服务器为例:标准配置是在一个服务器节点(Node)内部集成8个GPU,且通过专用的、超高带宽的NVLink总线将这8个GPU进行全互联。 基于以上背景,P_TP的值(例如8)是如何决定的?是必须为8吗?
P_TP 的选择主要由硬件拓扑(如8卡服务器内的NVLink总线)和通信效率决定的:将TP限制在单个节点内的8张卡可以最大化地利用高速互联优势是业界的最佳工程实践。
2.2.3 流水线并行度 (P_PP) 的决策逻辑
通过2.2.2节的张量并行(TP)我们已经成功解决了单个Transformer层过大、无法放入单张GPU的问题。但是对于GPT-3这样拥有96个Transformer层的深度模型,所有层切分后的模型状态总和依然存在远超单卡的“安全目标显存”的可能性。接下来我们进入下一个问题:如何处理这种由模型总深度带来的显存压力?这就引出了需要在“层”的维度上进行第二次切分的需求,即流水线并行。那么P_PP的值是如何决定的?是随意选择的吗?
P_PP(流水线并行度) 的选择需同时满足两大目标:
● 满足显存要求(首要目标): 确保 PTP × PPP 能够将总模型状态和激活值压缩到每张 GPU 的安全容量内(例如2.2.1章节提到的 H100的目标模型状态控制在 25 GB左右 )。
● 最小化“气泡”损失(效率目标): PPP越大流水线越长,通信开销和(GPU 闲置等待数据的时间)就越大。所以在满足显存要求的前提下,PPP越小越好。
决策公式: PPP = 向上取整(总模型状态显存 / (单卡安全目标 × PTP))
2.2.4 数据并行度 (P_DP) 的决策逻辑(算得快,金钱与效率的平衡)
● 通过2.2.2和2.2.3章节的张量并行和流水线并行解决了容量问题后,接下来可以用数据并行(DP)来解决训练速度问题,那么数据并行P_DP的值是如何决定的呢?
● P_DP 的选择与模型显存需求没有直接关系——完全取决于项目的截止日期和总预算。这是一个用于平衡训练速度和计算成本的业务与工程决策,其核心决策公式如下:
● PDP = 向下取整(集群总卡数 / (PTP × P_PP))
2.3 实战推演:硬件演算全流程与案例对比
以业界标杆GPT-3(175B)和Qwen-32B模型为演算基准,结合英伟达H100与国产昆仑芯RG800两款代表性算力卡,我们一起一步一步推演实际训练和部署一套大模型需要多少张算力卡。
2.3.1 计算模型总参数值与单卡总显存的安全目标值
模型规模 | 总参数量 | 总模型状态 (V_total) |
|---|---|---|
GPT-3 (175B) | 175 × 10⁹ | 2100 GB (2.1 TB) |
Qwen-32B (32B) | 32 × 10⁹ | 384 GB |
硬件 | 单卡总显存 | 单卡安全目标 (V_safe) (V_card × 0.6) |
|---|---|---|
NVIDIA H100 | 80 GB | 48 GB |
昆仑芯 RG800 | 32 GB | 19.2 GB |
备注:这里提到的单卡安全目标(V_safe)数值计算逻辑详情请查看2.2.1章节内容
2.3.2 GPT-3(175B)模型的并行度推演
演算步骤 | RG800 (32 GB) | H100 (80 GB) | 决策逻辑概述 |
|---|---|---|---|
最小模型并行度 (P_Model) | 2100 ÷ 19.2 ≈ 109.37 | 2100 ÷ 48 ≈ 43.75 | 确保模型能“放得下”的最小卡数 |
P_TP 约束 | P_TP = 8 | P_TP = 8 | 基于8卡/服务器的硬件拓扑设定 |
P_PP 决策 | ⌈109.37 ÷ 8⌉ = 14 | ⌈43.75 ÷ 8⌉ = 6 | 选取满足条件的最小整数以平衡容量与效率;H100实际工程中P_PP常选 10 以获得更优的流水线效率和激活值空间 |
最终 P_Model (TP × PP) | 8 × 14 = 112 | 8 × 10 = 80 | 一个完整模型副本所需的总卡数 |
最终总卡数 (设P_DP) | 112 × 4 = 448 张 | 80 × 12 = 960 张 | 由训练周期目标(如500卡或千卡级)决定 |
备注:关于张量并行、流水线并行、数据并行这三大并行的数值的决策逻辑详情请查阅2.2.2、2.2.3、2.2.4章节相关描述
2.3.3 Qwen-32B(32B) 模型的并行度推演
演算步骤 | RG800 (32 GB) 推导 | H100 (80 GB) 推导 | 决策逻辑概述 |
|---|---|---|---|
最小模型并行度 (P_Model) | 384 ÷ 19.2 = 20 | 384 ÷ 48 = 8 | 确保模型能“放得下”的最小卡数 |
P_TP 约束 | P_TP = 8 | P_TP = 8 | 基于8卡/服务器的硬件拓扑设定 |
P_PP 决策 | ⌈20 ÷ 8⌉ = 3 | ⌈8 ÷ 8⌉ = 1 | 选取满足条件的最小整数;H100实际工程中P_PP 常选 2 ,主要是为了给激活值预留足够的安全空间和防止OOM。 |
最终 P_Model (TP × PP) | 8 × 3 = 24 | 8 × 2 = 16 | 一个完整模型副本所需的总卡数 |
最终总卡数 (设P_DP) | 24 × 4 = 96 张 | 16 × 8 = 128 张 | 由训练周期目标(如百卡级)决定 |
备注:关于张量并行、流水线并行、数据并行这三大并行的数值的决策逻辑详情请查阅2.2.2、2.2.3、2.2.4章节相关描述
2.3.4 GPT-3(175B) VS Qwen-32B(32B)硬件配置
场景 | 模型规模 | H100 3D并行 (P_TP, P_PP, P_DP) | RG800 3D并行 (P_TP, P_PP, P_DP) | 总卡数 |
|---|---|---|---|---|
训练 | 175B | (8, 10, 12) | (8, 14, 4) | H100: 960 张 / RG800: 448 张 |
训练 | 32B | (8, 2, 8) | (8, 3, 4) | H100: 128 张 / RG800: 96 张 |
推理 | 32B | 最小 1 张 (可单卡承载);高并发 4-8 张 (分担K/V Cache) | 最小 2 张 (必须并行);高并发 8 张 (分担K/V Cache) | RG800 推理必须并行 :由于 32 GB显存 < 64 GB权重无法单卡承载。 |