首页 科技周边 人工智能 极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

Apr 16, 2024 pm 06:49 PM
git 工程 内存占用 aixiv专栏 lasp

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

AIxiv专栏是本站发布学术、技术内容的栏目。过去数年,本站AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com。

从国际顶流 GPT-4 128K、Claude 200K 到国内「红炸子鸡」支持 200 万字以上文本的 Kimi Chat,大语言模型(LLM)在长上下文技术上不约而同地卷起了。当全世界最聪明的头脑都在卷一件事的时候,这件事的重要性和难度就自然不言自明。

极长的上下文可以极大拓展大模型的生产力价值。随着 AI 的普及,用户已经不再满足于调戏大模型几个脑筋急转弯,用户开始渴望利用大模型来真正提高生产力。毕竟从前花一周憋出来的 PPT,现在只需要喂给大模型一串提示词和几份参考文档就分分钟生成出来,打工人谁能不爱呢?

最近出现了一些新型高效序列建模方法,例如Lightning Attention (TransNormerLLM)、State Space Modeling (Mamba)、Linear RNN (RWKV, HGRN, Griffin)等,成为炙手可热的研究方向。研究人员渴望通过改造已经成熟的7岁高龄的Transformer架构,获得性能与之旗鼓相当,但复杂度仅为线性的新型架构。这类方法专注于模型架构设计,并提供了基于CUDA或Triton的硬件友好实现,使其能够像FlashAttention一样在单卡GPU内部高效计算。

同时,另一个长序列训练的控制者也采取了不同的策略:序列并行获取了越来越多的关注。通过把长序列在序列维度切分为多个等分短序列,并将短序列分散至不同 GPU 卡并行训练,再辅以卡间通信便达到了序列并行训练的效果。从最早出现的 Colossal-AI 序列并行、到 Megatron 序列并行、再到 DeepSpeed Ulysses、以及近期的 Ring Attention,研究人员不断设计更加优雅高效的通信机制以提升序列并行的训练效率。当然这些已知方法全部是为传统注意力机制设计的,本文中我们称之为 Softmax Attention。这些方法也已经有各路大神做了精彩分析,本文不过多探讨。

那么问题来了。如何让新型高效序列建模方法实现序列并行,从而跨越单卡 GPU 显存限制实现真正意义的无限序列长度(当然你得有无限 GPU)的高效大语言模型训练,成为了一个开放的问题。已经成熟的序列并行方法如 DeepSpeed Ulysses, Megatron-SP 当然可以应用在线性序列建模方法上,但以 Softmax Attention 为设计蓝本的它们注定天生不是最优解。
极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行
  • 论文标题:Linear Attention Sequence Parallelism
  • 论文地址:https://arxiv.org/abs/2404.02882
  • LASP代码地址:https://github.com/OpenNLPLab/LASP

本文即将介绍的 LASP 便应运而生。来自上海人工智能实验室的研究人员提出了 Linear Attention Sequence Parallelism(LASP)方法以充分利用 Linear Attention 的线性右乘特性实现高效的序列并行计算。在 128 卡 A100 80G GPU、TransNormerLLM 1B 模型、FSDP backend 的配置下,LASP 可以最高将序列长度扩展至 4096K,即 4M。与成熟的序列并行方法相比,LASP 可训练的最长序列长度是 Megatron-SP 的 8 倍、DeepSpeed Ulysses 的 4 倍,速度则分别快了 136% 和 38%。

需要注意的是,自然语言处理方法的名称包含Linear Attention,但不局限于Linear Attention方法,而是可广泛应用于包括Lightning Attention (TransNormerLLM)、State Space Modeling (Mamba)、Linear RNN (RWKV、HGRN、Griffin)等在内的线性序列建模方法。

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

LASP 方法介绍

为了更好地理解LASP的思路,让我们先回顾下传统Softmax Attention的计算公式:O=softmax((QK^T)⊙M)V,其中Q、K、V、M、O 分别为 Query、Key、Value、Mask 和 Output 矩阵,这里的 M 在单向任务(如 GPT)中是一个下三角的全 1 矩阵,在双向任务(如 BERT)中则可忽略,即双向任务没有 Mask 矩阵。我们下面将LASP拆分为四点进行解释:

Linear Attention 原理

Linear Attention 可以视为 Softmax Attention 一种变体。Linear Attention 去除了计算成本高昂的 Softmax 算子,Attention 的计算公式可以写为 O=((QK^T)⊙M) V 的简洁形式。但由于单向任务中 Mask 矩阵 M 的存在,使得该形式依然只能进行左乘计算(即先计算 QK^T),从而不能获得 O (N) 的线性复杂度。但对于双向任务,由于没有 Mask 矩阵的存在,其计算公式可以进一步简化为 O=(QK^T) V。Linear Attention 的巧妙之处在于,仅仅利用简单的矩阵乘法结合律,其计算公式就可以进一步转化为:O=Q (K^T V),这种计算形式被称之为右乘,可见 Linear Attention 在这种双向任务中可以达到诱人的 O (N) 复杂度!

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

LASP 数据分发

LASP 首先将长序列数据从序列维度切分为多个等分的子序列,再将子序列分散发送至序列并行通信组内的所有 GPU,使得每张 GPU 上各有一段子序列,以供后续序列并行的计算使用。

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

LASP 核心机制

随着 decoder-only 的类 GPT 形式的模型逐渐成为 LLM 的事实标准,LASP 的设计充分考虑了单向 Casual 任务的场景。由切分后子序列 Xi 计算而来的便是按照序列维度切分的 Qi, Ki, Vi,每一个索引 i 对应一个 Chunk 和一个 Device(即一张 GPU)。由于 Mask 矩阵的存在,LASP 作者巧妙地将各个 Chunk 对应的 Qi, Ki, Vi 区分为两种,即:Intra-Chunk 和 Inter-Chunk。其中 Intra-Chunk 为 Mask 矩阵分块后对角线上的 Chunk,可以认为仍然有 Mask 矩阵的存在,依然需要使用左乘;Inter-Chunk 则为 Mask 矩阵非对角线上的 Chunk,可以认为没有 Mask 矩阵的存在,可以使用右乘;显然,当切分的 Chunk 越多时,对角线上的 Chunk 占比越少,非对角线上的 Chunk 占比越多,可以利用右乘实现线性复杂度 Attention 计算的 Chunk 就越多。其中,对于右乘的 Inter-Chunk 的计算,前向计算时每个设备需要使用点对点通信 Recive 上一个设备的 KV,并 Send 自己的更新后的 KV 给下一个设备。反向计算时则正好相反,只是 Send 和 Recive 的对象变为了 KV 的梯度 dKV。其中前向计算过程如下图所示:

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

LASP 代码实现

为了提高 LASP 在 GPU 上的计算效率,作者对 Intra-Chunk 和 Inter-Chunk 的计算分别进行了 Kernel Fusion,并将 KV 和 dKV 的更新计算也融合到了 Intra-Chunk 和 Inter-Chunk 计算中。另外,为了在反向传播过程中避免重新计算激活 KV,作者选择在前向传播计算后立即将其存储在 GPU 的 HBM 中。在随后的反向传播过程中,LASP 直接访问 KV 以供使用。需要注意的是,存储在 HBM 中的 KV 大小为 d x d,完全不受序列长度 N 的影响。当输入序列长度 N 较大时,KV 的内存占用变得微不足道。在单张 GPU 内部,作者实现了由 Triton 实现的 Lightning Attention 以减少 HBM 和 SRAM 之间的 IO 开销,从而加速单卡 Linear Attention 计算。

想要了解更多细节的读者,可以阅读论文中的 Algorithm 2(LASP 前向过程)和 Algorithm 3(LASP 反向过程),以及文中详细的推导过程。

通信量分析

LASP 算法中需要注意前向传播需要在每个 Linear Attention 模块层进行 KV 激活的通信。通信量为 Bd^2/h,其中 B 是 batch 大小,h 是头数。相比之下,Megatron-SP 在每个 Transformer 层中的两个 Layer Norm 层之后分别使用了一次 All-Gather 操作,并在 Attention 和 FFN 层之后分别使用了一次 Reduce-Scatter 操作,这导致其通信量为 2BNd 4BNd/T,其中 T 为序列并行维度。DeepSpeed-Ulysses 使用了 All-to-All 集合通信操作来处理每个 Attention 模块层的输入 Q, K, V 和输出 O,导致通信量为 4BNd/T。三者的通信量对比如下表所示。其中 d/h 是头维度,通常设置为 128。在实际应用中,当 N/T>=32 时,LASP 便能够实现最低的理论通信量。此外,LASP 的通信量不受序列长度 N 或子序列长度 C 的影响,这对于跨大型 GPU 集群的极长序列并行计算是一个巨大的优势。

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

Data-Sequence 混合并行

数据并行(即 Batch-level 的数据切分)已经是分布式训练的常规操作,在原始数据并行(PyTorch DDP)的基础上,已经进化出了更节省显存的切片式数据并行,从最初的 DeepSpeed ZeRO 系列到 PyTorch 官方支持的 FSDP,切片式数据并行已经足够成熟并被越来越多用户使用。LASP 作为 Sequence-level 的数据切分方法,可以能够和包括 PyTorch DDP, Zero-1/2/3, FSDP 在内的各种数据并行方法兼容使用。这对 LASP 的使用者来说无疑是好消息。

精度实验

在 TransNormerLLM (TNL) 和 Linear Transformer 上的实验结果表明,LASP 作为一种系统优化方法能够和各种 DDP backends 结合,并均能达到与 Baseline 持平的性能。

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

可扩展性实验

得益于高效的通信机制设计,LASP 可以轻松扩展至上百卡 GPU,并保持很好的可扩展性。

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

速度对比实验

与成熟的序列并行方法 Megatron-SP 和 DeepSpeed-Ulysses 对比,LASP 可训练的最长序列长度是 Megatron-SP 的 8 倍、DeepSpeed-Ulysses 的 4 倍,速度则分别快了 136% 和 38%。

极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行

结语

为了方便大家试用,作者已经提供了一个即装即用的 LASP 代码实现,无需下载数据集和模型,只需 PyTorch 分分钟体验 LASP 的极长极快序列并行能力。

代码传送门:https://github.com/OpenNLPLab/LASP

以上是极长序列、极快速度:面向新一代高效大语言模型的LASP序列并行的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

git怎么下载项目到本地 git怎么下载项目到本地 Apr 17, 2025 pm 04:36 PM

要通过 Git 下载项目到本地,请按以下步骤操作:安装 Git。导航到项目目录。使用以下命令克隆远程存储库:git clone https://github.com/username/repository-name.git

git怎么更新代码 git怎么更新代码 Apr 17, 2025 pm 04:45 PM

更新 git 代码的步骤:检出代码:git clone https://github.com/username/repo.git获取最新更改:git fetch合并更改:git merge origin/master推送更改(可选):git push origin master

git怎么合并代码 git怎么合并代码 Apr 17, 2025 pm 04:39 PM

Git 代码合并过程:拉取最新更改以避免冲突。切换到要合并的分支。发起合并,指定要合并的分支。解决合并冲突(如有)。暂存和提交合并,提供提交消息。

git下载不动怎么办 git下载不动怎么办 Apr 17, 2025 pm 04:54 PM

解决 Git 下载速度慢时可采取以下步骤:检查网络连接,尝试切换连接方式。优化 Git 配置:增加 POST 缓冲区大小(git config --global http.postBuffer 524288000)、降低低速限制(git config --global http.lowSpeedLimit 1000)。使用 Git 代理(如 git-proxy 或 git-lfs-proxy)。尝试使用不同的 Git 客户端(如 Sourcetree 或 Github Desktop)。检查防火

git commit怎么用 git commit怎么用 Apr 17, 2025 pm 03:57 PM

Git Commit 是一种命令,将文件变更记录到 Git 存储库中,以保存项目当前状态的快照。使用方法如下:添加变更到暂存区域编写简洁且信息丰富的提交消息保存并退出提交消息以完成提交可选:为提交添加签名使用 git log 查看提交内容

如何解决PHP项目中的高效搜索问题?Typesense助你实现! 如何解决PHP项目中的高效搜索问题?Typesense助你实现! Apr 17, 2025 pm 08:15 PM

在开发一个电商网站时,我遇到了一个棘手的问题:如何在大量商品数据中实现高效的搜索功能?传统的数据库搜索效率低下,用户体验不佳。经过一番研究,我发现了Typesense这个搜索引擎,并通过其官方PHP客户端typesense/typesense-php解决了这个问题,大大提升了搜索性能。

git怎么更新本地代码 git怎么更新本地代码 Apr 17, 2025 pm 04:48 PM

如何更新本地 Git 代码?用 git fetch 从远程仓库拉取最新更改。用 git merge origin/<远程分支名称> 将远程变更合并到本地分支。解决因合并产生的冲突。用 git commit -m "Merge branch <远程分支名称>" 提交合并更改,应用更新。

git怎么删除仓库 git怎么删除仓库 Apr 17, 2025 pm 04:03 PM

要删除 Git 仓库,请执行以下步骤:确认要删除的仓库。本地删除仓库:使用 rm -rf 命令删除其文件夹。远程删除仓库:导航到仓库设置,找到“删除仓库”选项,确认操作。

See all articles