Ulysses长序列并行

背景与挑战

随着AI技术的飞速发展,特别是在生成式AI和科研模型领域,长序列训练的重要性日益凸显。无论是在会话式AI、长文档摘要生成,还是视频内容生成等复杂场景中,系统都需要在广阔的空间和时间维度内对长上下文进行有效推理。此外,章节和书籍级别的庞大文本摘要(涉及数万乃至数十万字的处理)同样对会话式AI和摘要任务提出了严峻的挑战。传统的数据、张量和流水线等并行处理方法在处理长序列时面临显著限制。这些方法往往无法有效扩展以适应序列维度的增加,从而影响了整体系统的性能和效率。

具体来说,传统的并行方法在处理长序列时可能遭遇以下问题:

Ulysses长序列并行是一种针对上述挑战设计的创新方案,它能够有效克服内存限制、提高计算效率并减少通信开销,从而显著提升长序列处理的能力。

解决方案

Ulysses长序列并行是一种针对上述挑战设计的方案,它能够有效克服内存限制、提高计算效率并减少通信开销,从而显著提升长序列处理的能力。

首先,Ulysses将各个样本在序列维度上分割给参与的计算设备。然后,在attention计算之前,对已分割的查询(Q)、键(K)和值(V)执行all-to-all通信操作,以便每个计算设备接收完整的序列,但仅用于注意力头的非重叠子集。这使得参与的计算设备可以并行计算不同的注意力头。最后,Ulysses还可以使用另一个all-to-all在注意力头上收集结果,同时重新在序列维度上进行分区。

使用场景

num-attention-heads要能够被tensor-model-parallel-size * context-parallel-size整除。

使用方法

请参见下表。
表1 方法说明

重要参数

参数说明

--context-parallel-size [int]

设置长序列并行大小,默认为1,根据用户需求配置。

--context-parallel-algo ulysses_cp_algo

可选,设置长序列并行算法。

  • ulysses_cp_algo:开启Ulysses长序列并行,缺省值。
  • hybrid_cp_algo:开启Hybrid长序列并行。
  • megatron_cp_algo:开启Ring Attention长序列并行。

使用效果

利用多个计算设备对输入序列进行并行切分,降低单设备的内存消耗,相比不开启序列并行单步耗时增加,相比重计算计算效率提升。