
DeepSeek
DeepSeek V3 在两个主要方面取得了显著进展:一是实现了FP8训练,二是扩展了预训练的批量大小。这两项成就对整个行业来说都具有重要意义。首先,FP8训练一直是各大工程团队长期面临的一个难题。尽管大家都知道FP8的计算峰值是BF16的两倍,但在实际应用中,除了2023年Yi团队成功进行了FP8的预训练之外,FP8的公开实现方案一直相对缺乏。更多的则是关于训练极其不稳定的传言。
英伟达官方的Transformer Engine似乎也没有很好地解决这个问题,并且像其他开源软件库一样,变得越来越笨重和复杂。然而,
DeepSeek团队有勇气和能力抛开
英伟达提出的FP8实践,提出了许多具体的细节,例如在正向和反向传播中都使用E4M3格式,以及提升注意力机制后的线性输入精度。他们还独立实现了每组缩放的训练方法(这部分也可以看作受到B系列显卡的微缩放启发)。这真是非常令人钦佩的成就。就像Tri Dao大大告诉大家注意力机制的内核应该这样写一样,
DeepSeek团队正在告诉大家,FP8就应该这样用。相较于FP8这个相对独立的工程问题,我更喜欢的是
DeepSeek通过扩大批量大小来提升工程效率的方法。这种方法体现了算法和工程的紧密结合。相信很多朋友都听说过,系统领域的一个常见思路就是在某个维度放大10倍之后,会有哪些新的权衡和取舍,从而获得更充分的设计空间。
DeepSeek提出将预训练的批量大小从传统的4M到8M tokens增加至4K * 15360 = 60M tokens就是这样的变化。超大的批量大小可能使流水线并行再次变得强大起来。让我们深入探讨一下FP8训练的具体细节。FP8(Floating Point 8-bit)是一种低精度浮点数表示法,相比传统的BF16(Br
AIn Floating-Point 16-bit),它能够在保持一定计算精度的同时,大幅减少内存占用和计算量。然而,FP8的实际应用却面临着诸多挑战,尤其是训练过程中的稳定性问题。许多团队在尝试使用FP8进行训练时,常常遇到收敛困难、精度损失等问题,导致最终模型的表现不如预期。
DeepSeek团队在解决这些问题时采取了多种创新策略。首先,他们在正向和反向传播过程中均采用E4M3格式,这是一种能够有效平衡精度和计算效率的表示方式。其次,他们特别注意了注意力机制后的线性输入精度问题,确保在这些关键环节中不会因为精度不足而影响整体训练效果。此外,他们还引入了每组缩放的训练方法,这种策略可以动态调整不同层或模块的缩放因子,从而更好地适应不同的数据分布和任务需求。相比之下,扩大批量大小则更多地涉及到了系统架构和资源调度方面的优化。在深度学习模型的训练过程中,批量大小是一个至关重要的参数,它直接影响到模型的收敛速度、泛化能力和硬件资源利用率。传统上,由于硬件限制和算法设计的局限性,批量大小往往被控制在一个较小的范围内,例如几百万个tokens。然而,随着硬件技术的进步和分布式训练技术的发展,逐渐出现了利用更大批量大小来加速训练的可能性。
DeepSeek团队正是看到了这一趋势,并在此基础上进行了大胆尝试。他们将预训练的批量大小扩展到了60M tokens,这一数量级的增长带来了多方面的优势。首先,更大的批量大小意味着每次更新时能够涵盖更多的样本,从而使得梯度估计更加准确和稳定。其次,通过合理设计并行策略,可以充分利用现代GPU集群的强大计算能力,进一步缩短训练时间。大规模批量训练还可以带来更好的模型泛化性能,尤其是在处理大规模数据集时表现尤为明显。当然,实现如此大规模的批量训练并非一蹴而就,需要克服许多技术和工程上的挑战。一方面,如何高效地管理内存资源,避免因批量过大而导致的内存溢出问题;另一方面,如何设计合理的通信协议,确保各节点之间的数据传输延迟尽可能小,这些都是需要仔细考虑的问题。为此,
DeepSeek团队不仅在算法层面进行了深入研究,还在系统架构和网络优化等方面做了大量工作,最终实现了这一突破性的成果。总结
DeepSeek V3在FP8训练和批量大小扩展两个方面的探索与实践,为整个深度学习领域提供了宝贵的参考经验。通过不断创新和优化,他们不仅解决了长期以来困扰行业的技术难题,也为未来更大规模、更高效率的模型训练奠定了坚实基础。相信随着相关技术的进一步发展和完善,我们将看到更多类似的优秀成果涌现出来,推动整个人工智能领域的不断进步。