大模型训练架构系统。
一般来说训练都需要优化,
而优化就是需要优化器,
整体训练我们都当作的赛车,模型就是车。
优化器:
这个优化器从SGD和BGD讲起,
SGD:是随机梯度下降,(下降一点点)
BGD是基础梯度下降,(全量)
实际上都不会单独使用,现在是混合使用,mini-SGD:就是SGD+BGD。
然后基于SGD进化出来了,Adam->AdamW。
也就是主流优化器,基本上都是用AdamW:
这个有两个特点:
动量:类似惯性,比如前面几个生成正的,下面一个也就生成正的,
自适应步长:自动给频繁更新的参数减速,同样的,冷门的参数会加速,
还能显式剥离梯度的权重衰减,解决Transformer的架构容易过拟合的问题。
过拟合:学的太好了,把噪音,杂质都学会了,然后出现全新没见过的模型或者数据完全用不了,或者泛化能力差,
欠拟合:根本没学会。
问题:需要大量显存记录历史信息
训练策略:
现在优化器是油门,而踩油门也需要技巧啊,(用不用力的区别)。
Warmup (预热):做法:在训练初期(前几千步),将学习率从 0 线性增加到最大值。
基本上都是:先增加后下降的,
目的: 防止随机初始化的模型在刚开始时因为梯度过大而“由于受惊而崩盘”(梯度爆炸)。
Peak (峰值期):做法:维持在最大值以最快速度消化海量数据
Decay (衰减):
做法: 预热结束后,学习率通常按“余弦曲线”缓慢下降。
目的: 训练后期让模型“冷静”下来,进行精细化微调,锁定最优解
可以说学习率就是学习速度而不是学习程度,
整个过程一般是余弦曲线衰减。这里是:起步稳、收敛精、过程丝滑。
最后的一般是很长的曲线,类似退火算法:就是打铁的时候,一般是缓慢降温能稳定。
当学习率不变化了,就是平了:
这个太高就提早进入衰减期,太低就调大最高点的值。
工程实现:
因为要记录显存所以需要框架:DeepSpeed / Megatron-LM
DeepSpeed-zero:
三个阶段:1优化器,2:优化器+梯度,3:优化器+梯度+参数。
ZeRO-1/2: 把 AdamW 的动量数据切碎,分给不同的显卡背着。
ZeRO-3: 把模型参数也切碎分出去,计算时再临时“借用”。
你需要知道的是框架不改变 AdamW 的公式,它只负责显存优化和多卡通讯。它让几千块 GPU 能像一个超级大脑一样同步工作。
底座:
PyTorch: 提供了张量(Tensor)运算的自动求导引擎,是所有框架运行的基础。
GPU (Tensor Cores): 专门为矩阵乘法设计的硬件单元。
BF16 / FP16 (混合精度): 牺牲一点点精度(从 32 位降到 16 位),换取 2-4 倍的计算速度和减半的显存占用。
存储层次:SRAM: 离核心最近,极小极快。
HBM: 高带宽显存,存放模型和 KV Cache。
需要步骤:
所以说,现在以GPT-4举例子训练一个模型需要:
PyTorch 先把数据转换成巨大的 Tensor(张量矩阵)。
DeepSpeed 迅速出手,把这些 Tensor 切碎并分发到成百上千块 GPU 上,解决显存不够的问题。
Warmup 策略开始介入,小心翼翼地把学习率从 0 往上提。
AdamW 接收到这些小心翼翼的梯度,按照动量和自适应的逻辑,开始指挥 GPU 更新模型的参数。
随着模型越来越稳定,学习率开始 Decay,模型进入最后的冲刺。
放一些相关的,这里算是大模型的进阶版了。这个封面是吉米。