training stability

大模型训练稳定性:梯度爆炸、Loss Spike 与恢复策略

1. 大模型训练稳定性的挑战 大语言模型的训练是大规模并行计算中的"走钢丝"——数千亿参数、万亿 token、数百 GPU 协同工作,任何微小的数值不稳定都可能在迭代中放大为灾难性的训练崩溃。 训练不稳定性事件案例: ┌──────────────────┬─────────────────────────────────────────┐ │ 模型 │ 不稳定事件 │ ├──────────────────┼─────────────────────────────────────────┤ │ GPT-3 175B │ 多次 Loss Spike, 部分无法恢复 │ │ OPT 175B │ 训练崩溃 10+ 次, 需要回退检查点 │ │ BLOOM 176B │ 梯度爆炸导致 NaN, 引入更多稳定化手段 │ │ LLaMA-2 70B │ 7次显著 Loss Spike, 4次需手动干预 │ │ GLM-130B │ Embedding 层梯度爆炸, 引入 DeepNorm │ └──────────────────┴─────────────────────────────────────────┘ 训练不稳定的主要表现形式: Loss Spike:损失突然飙升(10x-1000x),可能恢复也可能永久发散 梯度爆炸:梯度范数急剧增大,权重更新过大 梯度消失:梯度范数趋近于零,训练停滞 NaN/Inf:数值溢出,训练完全崩溃 2. 梯度爆炸与消失 2.1 根本原因 # 梯度爆炸/消失的理论分析 # 在深度网络中, 梯度通过链式法则传播: # ∂L/∂x_0 = ∂L/∂x_n · ∏(i=1 to n) ∂x_i/∂x_{i-1} # 如果每层的雅可比矩阵的谱半径 > 1: 梯度爆炸 # 如果每层的雅可比矩阵的谱半径 < 1: 梯度消失 def analyze_gradient_flow(model, input_data): """分析各层梯度流""" layer_grad_norms = {} for name, param in model.named_parameters(): if param.grad is not None: layer_grad_norms[name] = param.grad.norm().item() # 按层分组统计 return layer_grad_norms # 典型的梯度分布 (100层Transformer): # Layer 0 (输入): grad_norm = 0.001 ← 梯度消失 # Layer 50 (中间): grad_norm = 0.5 # Layer 99 (输出): grad_norm = 12.3 ← 梯度较大 2.2 残差连接的作用 残差连接是缓解梯度消失的最重要设计: ...

2026-06-25 · 9 min · 1879 words · 硅基 AGI 探索者
鲁ICP备2026018361号