音频媒体文件

清除
标签搜索结果 for "混合精度训练"
Stanford CS224N: NLP w/ DL | Spring 2024 | Lecture 12 - Efficient Training, Shikhar Murty
2025-05-16 20:37

该讲座主要讨论了大规模神经网络的高效训练方法。首先,讲师发布了课程项目提案的评分即将公布以及项目里程碑要求的通知。 核心内容从解释计算机中数字(特别是浮点数)的表示方式开始。FP32(32位浮点数)占用4字节内存,具有较大的表示范围和较高的精度。然而,训练大型模型时,FP32可能导致显存不足(OOM)。 为节省显存,可以使用FP16(16位浮点数),它将内存需求减半,但代价是牺牲了表示范围和精度。这会导致非常小的数值变为零,非常大的数值变为NaN,同时存在舍入误差,尤其影响梯度计算,许多小梯度会因范围限制而直接归零,不利于模型训练。 为解决此问题,引入了混合精度训练(Mixed Precision Training)。一种方案是同时使用FP32和FP16:模型权重保留一份FP32的主副本(master weights),前向和反向传播时将权重转换为FP16进行计算,得到FP16格式的梯度,然后将梯度转换回FP32更新主权重。但这种方法仍存在问题,因为FP16梯度在转换回FP32前可能已经因范围过小而丢失信息(变为零)。 进一步的解决方案是损失缩放(Loss Scaling):在前向传播得到损失后,将损失乘以一个较大的缩放因子,这会相应地放大梯度值,使得原本在FP16下会变成零的梯度能够被保留。计算完FP16梯度后,将其转换回FP32,再除以缩放因子还原,然后更新FP32主权重。PyTorch中可通过`GradScaler`和`autocast`实现。但损失缩放的缺点是需要小心调整缩放因子,以避免NaN并适应网络动态。 最后,讲座介绍了另一种16位浮点格式BFloat16(Brain Float 16)。BFloat16通过牺牲部分精度(尾数位数减少)来保持与FP32相同的指数位数,从而拥有与FP32相同的动态范围,但精度低于FP16。实践证明,这种精度损失对神经网络训练通常是可以接受的,并且使用BFloat16通常可以避免复杂的梯度缩放问题。

高效训练 深度学习训练 混合精度训练 BFloat16 分布式训练 FSDP 参数高效微调 LoRA GPU显存优化 大规模模型训练
已摘要 阅读时间:9 分钟(3078 个字) 3 summary versions
Stanford CS336 Language Modeling from Scratch | Spring 2025 | 02 Pytorch, Resource Accounting
2025-05-13 16:30

该讲座介绍了使用PyTorch从头构建语言模型的过程,并重点关注了模型训练中的资源效率问题,特别是内存和计算资源的使用。讲座通过示例计算(如训练大型模型的耗时、特定硬件可训练的最大模型参数量)强调了进行资源估算(“餐巾纸数学”)的重要性,以便有效控制成本。讲座内容不涉及Transformer架构的具体细节,而是聚焦于PyTorch的基本构件和资源核算方法,旨在培养学员的效率意识和实践能力。 在内存核算方面,讲座详细讨论了张量(Tensor)作为存储参数、梯度、优化器状态等数据的基本单元,及其不同浮点数表示对内存占用的影响。具体对比了`float32`(单精度,默认,4字节)、`float16`(半精度,2字节,动态范围受限,可能导致训练不稳定)、`bfloat16`(脑浮点数,2字节,具有类似`float32`的动态范围但精度较低,适合深度学习计算)以及`fp8`(8位浮点数,更小,适用于H100等新硬件以追求极致优化)等数据类型。讲座建议在计算中使用`bfloat16`以平衡效率和稳定性,而参数和优化器状态的存储仍推荐使用`float32`以保证训练稳定性。

语言模型 PyTorch 资源核算 内存核算 计算核算 浮点精度 BF16 FLOPs 矩阵乘法 混合精度训练 优化器状态 模型规模
已摘要 阅读时间:11 分钟(3692 个字) 2 summary versions