在真正动手搭建训练集群之前,很多开发者会问一个朴素的问题:“一张 H100 已经这么强了,为什么不能单机单卡直接把模型炼出来?”答案很直接:单卡的显存放不下,单卡的算力算不完。 这两个瓶颈不是“优化一下就能绕过”的工程细节,而是由大模型训练的基本物理规律决定的硬约束。本节用真实数字算一笔账,你就知道为什么分布式训练不是可选项,而是唯一选项。
一、显存瓶颈:模型状态与激活值的“双重夹击”
大模型训练时的显存占用远不止“把参数塞进去”这么简单。以当前主流的 混合精度(FP16/BF16)+ AdamW 优化器 方案为例,单卡上至少需要承载四大类数据:
| 显存占用项 | 精度/说明 | 每参数占用 |
|-----------|----------|-----------|
| 模型参数(Weights) | FP16/BF16 | 2 bytes |
| 参数主拷贝(Master Weights) | FP32(Adam 需要) | 4 bytes |
| 梯度(Gradients) | FP16/BF16 | 2 bytes |
| 优化器状态(Optimizer States) | FP32 动量 + FP32 二阶矩 | 8 bytes |
| 合计(仅模型状态) | — | ≈ 16 bytes/参数 |
还没完。训练时还需要保存激活值(Activations)用于反向传播。激活值的显存与 batch size、序列长度、模型层数、隐藏维度成正比。以 GPT-style 结构粗略估算,激活值往往再吃掉 数 GB 到数十 GB 不等。此外还有 CUDA Kernel 的临时缓存和显存碎片。
一句话结论:每 1B(十亿)参数,在单卡上做全量 Adam 训练,仅模型状态就需要约 16 GB 显存。
真实场景推演
假设你使用的是目前主流的单卡旗舰 NVIDIA H100 SXM(80 GB 显存):
| 模型规模 | 模型状态显存(FP16+Adam) | 激活值(估算,bs=1, seq=4096) | 单卡能否全量训练? |
|---------|------------------------|------------------------------|------------------|
| 7B | ~112 GB | + ~10–20 GB | ❌ 远远不够,必 OOM |
| 13B | ~208 GB | + ~15–30 GB | ❌ 远远不够 |
| 70B | ~1.1 TB | + ~50–100 GB | ❌ 需 8–16 卡起步 |
| 175B | ~2.8 TB | + ~100 GB+ | ❌ 需数十卡起步 |
即使你对 7B 模型使用 batch size = 1,单张 H100 的 80 GB 显存也装不下完整的训练状态。这就是为什么你会看到业界做 7B 全参数微调时,要么用 LoRA/QLoRA(见 10.2 节)把可训练参数压到几百分之一,要么必须上 多卡 + ZeRO 优化器(见 9.5 节)把优化器状态切分到不同卡上。
工程常识:推理时只用存 FP16 参数(2 bytes/参数),所以 70B 模型推理约需 140 GB,两张 80GB 卡刚好够;但训练需要约 8 倍的显存开销。这是很多人第一次跑训练时意外 OOM 的根本原因。
二、算力瓶颈:即使装得下,单卡也算不完
就算未来出现一张 1TB 显存的“梦幻显卡”,单卡训练仍然不现实,因为训练大模型需要的计算量是天文数字。
1. 训练计算量的估算公式
对于 Decoder-only 的因果语言模型(当前 LLM 的主流架构),业界通用的 FLOPs 估算公式为:
$$
\text{总训练 FLOPs} \approx 6 \times N \times D
$$
其中:
- N:模型参数量(如 7B = 7×10⁹)
- D:训练 token 总量(如 1T = 1×10¹²)
- 系数 6:来源于前向传播(≈2×N×D)+ 反向传播(≈4×N×D)
2. 单卡 H100 要算多久?
H100 SXM 的 FP16 Tensor Core 稠密算力约为 989 TFLOPS(即 9.89×10¹⁴ FLOPs/s)。假设一个极为乐观的 MFU(模型算力利用率)= 50%(实际生产中 30%–50% 已是优秀水平),单卡有效算力约 500 TFLOPS。
以 7B 模型、1T tokens 这一“小模型标准配方”为例:
$$
\text{总 FLOPs} \approx 6 \times 7\times10^9 \times 1\times10^{12} = 4.2\times10^{22}
$$
$$
\text{单卡时间} = \frac{4.2\times10^{22}}{5\times10^{14}} \approx 8.4\times10^7 \text{秒} \approx 2.7 \text{年}
两年七个月才能训完一轮。在日新月异的 AI 行业,这意味着你的模型还没出炉就已经沦为古董。
再看 175B 模型(GPT-3 量级)、1T tokens:
$$
\text{总 FLOPs} \approx 6 \times 175\times10^9 \times 1\times10^{12} = 1.05\times10^{24}
$$
$$
\text{单卡时间} \approx \frac{1.05\times10^{24}}{5\times10^{14}} \approx 2.1\times10^9 \text{秒} \approx 67 \text{年}
$$
这还没考虑训练过程中的调试、回滚、超参搜索。单卡训练千亿模型,在现实中完全不可行。
3. 分布式是“时间换空间”的唯一解
如果把 1024 张 H100 通过分布式训练串联起来(假设线性加速比,实际会打折扣),175B 模型的训练时间可压缩到:
$$
\frac{67 \text{年}}{1024} \approx 24 \text{天(理论值)} \quad \xrightarrow{\text{实际 MFU 40%}} \quad \approx 60 \text{天}
$$
这正好与业界训练 GPT-3/Llama 级别的千卡集群耗时(数周量级)吻合。分布式训练的核心价值,正是通过横向扩展(Scale Out)把“不可完成的计算”变成“可接受的迭代周期”。
三、两个瓶颈的叠加效应:为什么问题更棘手
显存瓶颈与算力瓶颈并非孤立存在,它们会相互放大:
- 为了省显存而减小 batch size → 每卡单次前向计算量减少,但 GPU 计算单元利用率下降,MFU 降低,算力瓶颈更严重;
- 为了省算力而做梯度累积 → 需要在显存中保存更多步的激活值或使用更大缓存,显存瓶颈更严重;
- 单卡显存不够只能上多卡 → 引入卡间通信(AllReduce、AllGather),网络带宽成为新瓶颈,进一步拉低 MFU。
因此,分布式训练不是“把模型切成几块扔到不同卡上”这么简单。后续 9.2–9.7 节将要讲解的 数据并行(DP)、张量并行(TP)、流水线并行(PP)、ZeRO 优化、3D 并行,本质上都是在解决同一个核心矛盾:
如何在显存、算力、通信带宽这三者之间做最优的切分与调度,使得整体训练吞吐最大化。
四、小结:分布式训练的必然性
- 显存维度:现代单卡 80GB 上限,连 7B 模型的全参数 Adam 训练都无法承载(需 >100GB)。要训练 70B、175B 乃至更大的模型,必须把模型状态分散到多卡显存池中。
- 算力维度:单卡 H100 训练 7B 模型需近 3 年,175B 模型需数十年。要把训练周期压缩到商业可接受的周级甚至天级,必须聚合数百至数千张卡的算力。
- 工程维度:显存与算力的双重约束,催生了数据并行、模型并行、流水线并行、ZeRO 等一系列分布式策略。选择哪种并行方案,取决于模型大小、集群规模、网络拓扑和成本预算——这正是后续几节要逐一拆解的技术决策树。
理解了“为什么要分布式”,下一步就是“怎么做分布式”。在 9.2 节中,我们将从最经典的 数据并行(Data Parallelism, DP) 讲起,这是几乎所有分布式训练的起点。