音频媒体文件

清除
标签搜索结果 for "FSDP"
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 |07 Parallelism 1
2025-05-13 17:44

本次讲座探讨了在训练大规模语言模型时进行多机优化的并行计算问题。由于单个GPU在算力和内存方面均无法满足大型模型的需求,必须采用跨机器并行策略。讲座首先介绍了网络基础,强调了硬件层级结构的重要性:单台机器内的多个GPU通过NVSwitch等高速接口互连,而机器间的通信则依赖相对较慢的网络交换机(如InfiniBand)。这种异构通信特性(节点内快、节点间慢)以及特定规模(如256个GPU)内的高速全互联能力,对并行策略的选择有深远影响。随后,讲座回顾了关键的集体通信操作,如AllReduce、Broadcast、AllGather和ReduceScatter,并特别指出AllReduce操作可以分解为ReduceScatter和AllGather操作,这在带宽受限的情况下能达到最优通信效率。讲座旨在阐释如何结合不同的并行化策略高效训练超大规模模型,并将通过案例分析展示这些策略在实际大规模分布式训练中的应用。

大型语言模型 分布式训练 并行计算 数据并行 模型并行 流水线并行 张量并行 FSDP GPU TPU 集体通信 网络通信
已摘要 阅读时间:11 分钟(3561 个字) 2 summary versions