所属: 训练推理平台层。本页边界: 怎样在有限显存和通信预算下稳定执行大规模参数更新。
#核心公式
#符号说明
| 符号 | 含义 | 单位/条件 |
|---|---|---|
| 全量 AdamW 训练的近似峰值显存组成 | Byte | |
| 模型参数数量 | 个 | |
| 每个参数对应的权重、梯度存储字节数 | Byte/参数 | |
| Adam 一阶、二阶动量的存储字节数 | Byte/参数 | |
| 可选 FP32 主权重的存储字节数 | Byte/参数 | |
| 前向激活及反向所需中间状态 | Byte | |
| 通信、临时算子与碎片缓冲 | Byte | |
| 训练过程中的峰值显存占用 | Byte | |
| 权重、梯度、优化器状态占用 | Byte | |
| 激活、通信桶与临时工作区占用 | Byte | |
| 各并行维度的设备数 | 正整数 | |
| LoRA 秩与缩放系数 | 正整数、标量 | |
| 低精度训练下的有效参数数量 | 个 | |
| 量化引入的损失增量 | 标量 |
该内存式是显式账本,不同框架是否保留主权重、梯度精度和临时缓冲会改变实际结果。
#技术要点
- BF16 以更大指数范围避免 FP16 溢出;FP16 以更高尾数精度减少舍入误差,二者在不同训练阶段的最优选择不同。
- 激活重计算以额外 FLOPs 交换显存。
- DP/TP/PP/CP/EP 切分的是不同张量维度。
- loss spike、NaN 和通信 hang 需要区分数值/数据/系统根因。
- 低精度训练的核心风险不是简单的“数值误差”,而是有方向的数值偏置被训练动态持续放大,最终导致权重谱范数和激活失控。
- 低精度通过降低“有效参数数量” 增加损失,精度感知缩放律可量化这一影响。
- 低比特量化对欠训练模型更友好:训练 token 越多的模型,量化带来的退化越严重。
- RL 微调阶段 FP16 的稳定性显著优于 BF16,原因是 FP16 的更高尾数精度减少了训练-推理不匹配。
#原理与演进
#为什么“权重放得下”不等于“能训练”
- BF16 权重约 字节;全量训练还需梯度、AdamW 的一阶与二阶动量,部分实现保留 FP32 主权重。仅按这些基础状态分别约 或 字节/参数,再加激活、通信与实现缓冲。
- 7B 参数的 BF16 权重约 GB;基础状态约 – GB(十进制 GB),还未计入激活与临时缓冲。实际容量随框架、优化器和参数共享方式变化。
- 微批大小、序列长度、层数决定激活量;激活重计算少存中间值,在反向时重算,用计算量换显存。
#各种并行究竟切了什么
| 方法 | 切分对象 | 主要收益 | 新代价 |
|---|---|---|---|
| DP | 数据批次 | 吞吐扩展 | 每卡仍持有模型状态;梯度同步 |
| ZeRO / FSDP | 优化器、梯度、参数状态 | 降低每卡状态占用 | AllGather / ReduceScatter |
| TP | 层内矩阵 | 单层放不下时可运行 | 高频层内通信 |
| PP | 网络层 | 层分布到多卡 | pipeline bubble 与微批调度 |
| CP | 序列位置 | 长上下文激活分摊 | 注意力跨设备通信 |
| EP | MoE 专家 | 专家参数分布到多卡 | token All-to-All 与负载不均 |
#低精度与参数高效更新
- BF16 指数范围大,通常比 FP16 更不易溢出;低精度矩阵乘仍可配合较高精度累积或主状态。但BF16 的宽动态范围以牺牲尾数精度为代价,这一代价在特定场景下会超过其带来的便利。
- LoRA 冻结原矩阵 ,只训练下式所示的低秩增量;可减少可训练参数与优化器状态,不减少基座权重本身。原论文
- 数值溢出、数据异常和通信故障都会表现为 loss spike 或停滞,需要分别观察梯度、样本与同步行为。
分工: 硬件互联决定链路,集合通信决定传输原语;本页讨论模型状态怎样映射到设备。
#1. 显存账本与显存—吞吐交换
对于 BF16 权重+梯度、FP32 Adam 一阶/二阶状态和可选 FP32 主权重,静态状态约为下式所示的 或 字节/参数;若另有影子权重/实现缓冲,可能更高。不能把某个字节数当所有框架的固定值,需检查主权重和梯度存储方式。
激活不是单纯 :它受批大小 、序列长 、层数 、隐藏维度 及注意力实现影响,可粗略理解为 加中间矩阵。注意力的显式分数矩阵为 ,而 FlashAttention 类实现通过重排计算避免将完整矩阵写入 HBM,详见Roofline。
#2. 精度对训练效果的影响
#2.1 不同精度格式的数值特性
FP16 与 BF16 都是 16 位格式,但位分配截然不同。FP16 分配 5 位指数、10 位尾数;BF16 分配 8 位指数、7 位尾数。在相同指数区间附近,FP16 的尾数分辨率约为 BF16 的下式所示倍数,因此能更细地区分相邻数值。二者的指数范围不能用 这种简单比例表示:FP16 的最大有限值为 ,最小正规数为 ,最小正次正规数为 ;BF16 的最大有限值约为 ,最小正规数为 。因此 FP16 更容易上溢或下溢,训练时常配合损失缩放;BF16 的指数范围与 FP32 接近,但较少的尾数位会带来更大的舍入误差。
精度损失不是均匀噪声,而是有方向的偏置。 清华大学对 FlashAttention + BF16 训练中 loss 爆炸问题的机制分析表明,低精度训练失败不是随机数值误差所致,而是低精度在 FlashAttention 反向传播的下式计算中引入了有方向的数值偏置。借助注意力中涌现的相似低秩更新结构,这一偏置被持续放大,最终把权重谱范数和激活推向失控,导致训练在数千步后突然崩溃。这一发现将低精度训练不稳定的原因从“随机噪声”重新定位为“结构化偏置放大”,提供了可解释的机制链。
#2.2 BF16 与 FP16 在不同训练阶段的最优选择
预训练阶段,BF16 凭借与 FP32 一致的动态范围,消除了 FP16 训练中损失缩放的调参负担,成为大规模预训练的事实标准。在这一阶段,梯度值的分布通常不会触及 FP16 的溢出边界,BF16 的宽动态范围优势得以充分发挥。
RL 微调阶段,这一默认选择值得重新审视。 RL 微调面临一个预训练中不突出的问题:训练-推理不匹配(training-inference mismatch)。RL 框架为加速通常使用不同的计算引擎进行 rollout(推理)和梯度计算(训练),二者在数学上等价但数值输出不同。BF16 较低的尾数精度放大了这种不一致性,使训练策略和推理策略逐渐偏离,最终导致训练不稳定甚至崩溃。
在所引用论文测试的 rollout/训练引擎、算法与模型配置中,仅将 RL 微调精度从 BF16 切换为 FP16,就缓解了训练—推理数值不一致:实验覆盖 GRPO、GSPO、TIS、MIS,Qwen 与 OctoThinker,以及 Dense-14B 和 MoE 等设置。在该实验的 AIME 2024 结果中,FP16 得分为 39%,BF16 为 34%;论文还观察到训练侧准确率约 99% 与 95% 的差异。这些是特定实现下的经验结果,不是 BF16 数值格式的理论“准确率天花板”,也不意味着所有 RL 微调任务都应固定选择 FP16。
#2.3 FP8 训练:从短程验证到长程失效
FP8 在 Hopper 及后续架构上提供原生矩阵计算支持。常见混合 FP8 配方会让动态范围较小、精度较高的 E4M3 承担部分前向权重与激活,让动态范围较大的 E5M2 承担部分反向梯度;这不是硬件强制规则,具体格式还取决于缩放策略、张量统计与 microscaling 方案。所引用实验中,缩放 FP8 方案在 H100 上对 Llama 3 8B 实现 1.30 倍加速,对 Llama 3.1 405B 实现 1.53 倍加速。
但 FP8 训练存在一个在短程实验中被掩盖的稳定性问题。 将 FP8 训练扩展到万亿 token 规模后,研究人员发现了短程训练中不可观察的关键不稳定性,并将其根源追溯到 SwiGLU 激活函数对离群值的放大效应。这一放大只在长期训练中才变得显著,与 SwiGLU 权重矩阵的对齐过程有关。通过引入 Smooth-SwiGLU 修改,在不改变函数行为的前提下实现了稳定的 FP8 训练,7B 模型在 256 个 Gaudi2 加速器上训练,达到与 BF16 基线持平的结果,同时获得约 34% 的吞吐提升。
激活离群值是 FP8 训练的核心障碍。当标准 FP8 训练灾难性崩溃时,TWEO 方法通过一个简单的损失项将离群值从 10000+ 降低到 20 以下,实现了与 BF16 基线可比的结果,同时带来 36% 的训练吞吐提升。在 B200 上,MXFP8(块级缩放 FP8,每块覆盖 32 个张量元素)由于针对 Blackwell 架构优化,表现略优于标准 FP8-CS。
FP8 在 RL 场景中的精度损失需要审慎评估。 FP8 rollout 虽然带来 1.2 倍加速并将 rollout 内存减半,但在 Qwen3-8B 上 AIME25 准确率下降约 6.63%。Jet-RL 通过统一训练和推理精度流实现了端到端 16% 加速,在所有设置中保持稳定收敛,精度损失微乎其微。这说明 FP8 在 RL 中的可用性高度依赖于精度流的统一管理。
#2.4 低精度如何改变有效模型容量
精度感知缩放律提供了一个统一视角:低精度训练降低了模型的“有效参数数量”,从而增加了损失。这一框架可以预测在不同精度下训练的额外损失,以及训练后量化引入的退化。对于推理,研究进一步发现,训练后量化引入的退化随模型训练数据量的增加而增加,最终可能使额外的预训练数据变得有害——模型训练得越充分,对低比特量化的脆弱性越高。
低比特量化对欠训练模型更友好。 对 1500+ 量化检查点的系统分析表明,更大的模型或训练 token 更少的模型表现出更小的量化退化,而更小、训练更充分的模型面临显著的性能损失。这一趋势的工程含义是:模型训练得越充分(token 数越多),低比特量化的性能退化越严重。对于预期将训练超过 100 万亿 token 的未来模型,低比特量化的性能可能不容乐观。低比特量化可用于衡量模型的训练水平,这为评估量化研究中的模型选择提供了新的视角。
#2.5 低精度训练的稳定性技术
低精度训练放大对学习率的敏感性,增加梯度突刺和 loss spike 的可能性。针对性的稳定化技术可分为三个层次:
优化器层面。 Stable-SPAM 通过三个关键技术实现 4 比特训练的稳定:AdaClip(自适应突刺识别与裁剪阈值)、AdaGN(梯度归一化)、MoRet(动量正则化),在 LLaMA 各规模模型上不仅稳定了 4 比特训练,性能甚至超越 BF16。
数值格式层面。 随机舍入(Stochastic Rounding)通过将舍入误差建模为无偏随机变量,在理论上提供了隐式正则化效果,在 BF16 下配合随机舍入的策略优于标准 (BF16, FP32) 混合精度,并实现最高 1.54 倍的吞吐提升。单位缩放(unit scaling)通过将权重和激活的尺度归一化到单位方差,消除对动态缩放因子的依赖,实现了无动态缩放的 FP8 训练。
理论层面。 对自适应优化器在浮点量化下的收敛分析表明,只要尾数长度随迭代次数对数增长,Adam 和 Muon 都能保持接近全精度的收敛速率。但 Adam 对权重和二阶矩量化高度敏感(因其依赖 的动量累积),而 Muon 对量化误差的控制要求更弱,潜在鲁棒性更强。这解释了为什么同一精度格式在不同优化器下的表现可能差异显著。
#3. 并行维度的通信约束
设总设备数满足下式,这只是概念分解;真实系统还受专家数、层数、拓扑整除约束。
| 并行 | 每卡模型状态 | 每步关键通信 | 常见瓶颈 |
|---|---|---|---|
| 数据并行 | 完整副本 | 梯度 AllReduce | 静态显存 |
| ZeRO-1/2/3 | 依次切优化器/梯度/参数 | ReduceScatter、AllGather | 参数重建频率与链路 |
| 张量并行 | 层内矩阵分块 | 层内聚合 | 低延迟带宽,宜在强互联域 |
| 流水并行 | 层分组 | 激活传输 | 空泡、微批调度 |
| 上下文并行 | 序列分块 | KV/注意力数据交换 | 长序列通信 |
| 专家并行 | 专家分布 | token All-to-All | 热门专家拥塞 |
若 个微批、 个流水阶段,理想化同步 1F1B 的空泡比例约 ;增大 降低空泡,却带来更多激活驻留或调度复杂度。公式忽略阶段不均衡、通信和重计算。
路线:单卡全量状态 → 数据并行扩吞吐但不省显存 → ZeRO/FSDP 切状态 → TP/PP 处理单层/整模装不下 → CP/EP 应对长上下文与 MoE;每一步都把局部显存问题部分转化为通信问题。
#4. 低精度失稳的根因诊断
需区分四类不同根因,它们的表现可能都是 loss spike 或停滞,但处理方式完全不同:
| 根因 | 典型特征 | 诊断信号 |
|---|---|---|
| 数值溢出(FP16 上溢) | 非有限值出现在 loss 之前 | 梯度范数突然增大后出现 Inf/NaN |
| 有方向的数值偏置 | loss 在特定步数后突然爆炸 | 权重谱范数持续增长,注意力头异常 |
| 数据极端样本 | loss spike 与特定批次相关 | 重放相同批次可复现 |
| 通信 hang | 训练停滞但非数值异常 | 梯度范数正常,集合通信超时 |
第一类可通过损失缩放和主权重精度缓解。第二类是低精度训练特有的结构性风险,需要修改数值路径(如清华论文对 FlashAttention 中 的高精度计算路径)或采用 TWEO 类损失项抑制离群值。第三类需检查数据过滤与配比。第四类属于集合通信的诊断范畴。
只看 loss 曲线不足以定位根因。 应同时对照梯度范数、非有限值计数、权重谱范数、批次来源和集体通信时间。低精度训练中的 loss spike 往往有先兆——清华的工作发现,loss 爆炸前 1–8 次迭代会出现 RMS 范数的突增。在优化器中加入更新裁剪(update clipping)可缓解 loss spike,效果优于范数为 1 的梯度裁剪。
#5. PEFT 与全量微调的边界
LoRA 写作如下,其中 ,可训练参数为 ,小于全量 当 足够小。
LoRA 节约梯度和优化器状态,却仍需读取基座权重,并非自动降低推理计算量。QLoRA 进一步将冻结基座量化,降低微调时权重存储;但反向经过量化权重路径仍有计算与激活成本。QLoRA 原论文
精度的选择需与微调方式协同。 LoRA 的可训练参数少,优化器状态显存远低于全量微调,但基座权重的存储精度仍决定前向计算成本。在 RL 微调场景中,FP16 的稳定性优势同样适用于 LoRA:实验表明 FP16 下 LoRA 微调也优于 BF16。
原始资料: ZeRO;PyTorch FSDP 官方说明;LoRA。
#原始资料
- Scaling FP8 Training to Trillion-Token LLMs
- Defeating the Training-Inference Mismatch via FP16
- Scaling Laws for Precision
- Low-Bit Quantization Favors Undertrained LLMs
- Stable-SPAM: How to Train in 4-Bit More Stably than 16-Bit Adam
- Why Low-Precision Transformer Training Fails: An Analysis on Flash Attention
- Stochastic Rounding for LLM Training: Theory and Practice
- A Convergence Analysis of Adaptive Optimizers under Floating-point Quantization
- TWEO: Transformers Without Extreme Outliers
- Using NVFP4 Low-Precision Model Training