HyperAI超神经
Back to Headlines

NVIDIA NeMo框架助力长上下文大语言模型高效训练:突破数百万标记限制

15 days ago

大型语言模型(LLM)的发展不仅体现在生成高质量文本的能力上,更在于它们处理长上下文序列的显著进步。上下文长度,即模型能够处理的单个输入样本中的令牌数,已成为定义这些模型在不同应用场景中表现的关键因素。 上下文长度的需求及挑战 随着多模态应用的日益增多,处理长格式视频内容的需求促使模型需要同时关注数千帧的画面,而保持时间上的连贯性至关重要。支持多达1百万令牌的上下文扩展模型,如DeepSeek-R1和Llama Nemotron,能够在推理时保留更多的逻辑路径和详细的时序信息,从而提高复杂问题解决的准确性。相比之下,若没有足够的上下文窗口大小,这些模型会在关键逻辑部分被截断,导致错误率上升。 然而,训练具有超长上下文能力的LLM面临巨大的技术挑战,尤其是在内存管理方面。基于Transformer架构的LLM随着序列长度的增加,计算复杂度会以O(n^2)的方式增长(若使用flash attention则降为O(n)),这使得超长上下文的训练成本高昂。 使用NVIDIA NeMo框架实现高效长上下文训练 NVIDIA NeMo框架提供了前沿的技术支持,帮助开发者克服这些挑战,实现高效且高吞吐量的长上下文模型训练。以下是该框架的主要优化技术和方法: 1. 激活重计算 在训练过程中,存储中间激活状态所需的内存随序列长度和模型深度的增加而迅速增长,甚至超出最大GPU的内存容量。NeMo框架通过选择性地检查点记录一部分激活状态(如每个Transformer层的输入),并在反向传播时即时重新计算其他部分,大大减少了内存需求。这种方法不仅节省了大量内存,还能保持训练的成本效益,尤其是在上下文长度超过一定阈值时。 2. 上下文并行 虽然激活重计算可以有效减少内存使用,但它会引入显著的重计算开销(最多可达每步训练的30%),从而拖慢训练速度。上下文并行(CP)是一种更高效的替代方案,它将序列维度分摊到多个GPU上,每个GPU只处理并存储序列的一部分,从而允许训练更长的输入序列而不超过内存限制。 与仅在几层特定操作(如LayerNorm和Dropout)中分割序列的序列并行不同,CP在整个模型的所有层中分割序列,并通过环形拓扑结构实现高效的点对点通信,减少了通信量。结合最新开源软件(OSS)和NVIDIA cuDNN flash attention内核,CP还能够加速注意力机制的计算,进一步提高性能。 上下文并行的工作原理 在前向传播过程中,CP将在每个GPU上存储其本地序列块的键值(KV),而在反向传播时,这些KV张量将根据需要再次汇集。这种设计有效地利用了内存,并且在多个GPU之间实现了负载平衡。此外,通过减少低三角因果掩码带来的不必要计算,CP进一步提高了效率。 性能对比 图3展示了在不同的序列长度(从16K到100万)下使用CP和不使用CP的性能对比。结果表明,序列长度达到32K及以上时,使用CP的模型能够获得更高的TFLOPS性能。在100万序列长度的情况下,使用CP是运行模型的必要条件,并且随着序列长度的增加,性能提升趋于平缓,这表明CP的实现是非常高效的。 激活卸载 除了CP外,另一种有效的内存管理技术是CPU卸载。通过将中间激活状态和不活跃权重卸载到CPU内存,这一技术减少了GPU的峰值内存使用。NeMo框架允许在Transformer层级别配置CPU卸载策略,在前向传播时适时卸载激活状态,在反向传播时按需重新加载。这种动态卸载机制特别适用于非常深的模型训练,能够进一步扩展每个GPU的内存容量。 结论 对于不同的优化技术,建议根据具体的模型架构和硬件选择来采取最合适的策略。NVIDIA NeMo框架作为一个加速大型语言模型、语音模型和多模态模型训练的工具,提供了多种经测试的长上下文模型训练配方。现有配方包括Llama 3 8B和70B、Mixtral 8x7B以及 Nemotron 4 15B和22B,支持16K、64K和128K的序列长度。更多详细信息可参见NeMo框架的长上下文配方文档。 业内评价及公司背景 业内人士对NeMo框架在长上下文训练领域的贡献给予了高度评价。许多专家认为,这些技术创新不仅显著降低了训练资源的需求,还大幅提升了模型的实用性。NVIDIA作为全球领先的计算平台公司,一直致力于推动人工智能技术的发展,NeMo框架便是其在这一领域的重要成果之一。目前,该框架已被广泛应用于各种复杂的多模态场景中,成为研究人员和开发者的首选工具。

Related Links