FlashAttention论文解析

news2024/11/20 10:35:47

FlashAttention让语言模型拥有更长的上下文

  • FlashAttention
    • 序:
    • 概述:
    • 简介:
      • FlashAttention
      • 块稀疏 FlashAttention
      • 优点:
      • 标准注意力算法实现流程:
    • FlashAttention
    • Block-Sparse FlashAttention
    • 实验
      • 使用FlashAttention后更快的模型
        • BERT
        • GPT-2
        • Long-range Arena
      • 具有更长序列的更好模型
        • Megatron-LM
        • 具有长上下文的语言模型
        • 长文档分类
        • Path-X and Path-256
      • Benchmarking Attention

FlashAttention

序:

基于 FlashAttention 技术,清华将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。

概述:

  • 给 Transformer 配备更长的上下文仍然很困难,因为 Transformer 核心自注意力模块的时间复杂度以及内存复杂度在序列长度上是二次方的。

  • FlashAttention是一种新的注意力机制,旨在解决Transformer在处理长序列时速度慢且内存需求大的问题。

  • FlashAttention的创新之处在于引入了IO(输入/输出)感知的设计原则,专注于减少GPU内存(高带宽内存)和GPU片上内存(SRAM)之间的读写次数。它使用平铺(tiling)的方法来实现这一目标,从而降低了数据在不同级别存储器之间的传输次数。

  • 此外,研究者还将FlashAttention扩展到块稀疏注意力(block-sparse attention),产生比现有的近似注意力方法更快的近似注意力算法。

简介:

在这里插入图片描述

  1. SRAM:SRAM(Static Random Access Memory)是一种高速、低延迟的随机访问存储器。在GPU(Graphics Processing Unit,图形处理器)中,SRAM通常用于存储临时数据、缓存以及计算中的中间结果。GPU SRAM是指嵌入在GPU芯片上的SRAM存储器。
  2. HBM(High-Bandwidth Memory):HBM是一种高带宽、低功耗的内存技术。GPU HBM是指嵌入在GPU芯片上的HBM存储器。相对于传统的GDDR(Graphics Double Data Rate)内存,HBM具有更高的带宽和更低的能耗,使得GPU能够更快地读取和写入数据。
  3. DARM(Dynamic Random Access Memory):DARM是一种动态随机访问存储器,用于存储CPU(Central Processing Unit,中央处理器)中的数据和指令。DARM是一种较为常见的内存类型,具有较高的存储密度,但相对于SRAM和HBM而言,它的访问速度较慢,延迟较高。CPUDARM指的是嵌入在CPU芯片上的DARM存储器。

FlashAttention

这是一种新的注意力算法,主要目标是避免从 HBM 读取和写入注意力矩阵。

  • 在不访问整个输入的情况下计算 softmax 缩减。
我们重组注意力计算以将输入分成块并在输入块上进行多次传递,从而逐步执行 softmax 缩减(也称为平铺)
  • 不为后向传递存储大的中间注意力矩阵。
存储前向传播的 softmax 归一化因子,以便在后向传播中快速重新计算片上注意力,这比从 HBM 读取中间注意力矩阵的标准方法更快。我们在 CUDA 中实现了FlashAttention以实现对内存访问的细粒度控制,并将所有注意力操作融合到一个 GPU 内核中。

即使由于重新计算而增加了 FLOP,我们的算法也比标准注意力更快地运行(在 GPT-2 [67] 上高达 7.6 倍,图1 右)并且使用更少的内存(序列长度呈线性),这要归功于大量减少 HBM 访问量。

块稀疏 FlashAttention

这是一种稀疏注意力算法,比 FlashAttention 快 2-4 倍,可扩展到 64k 的序列长度。

我们通过与稀疏率成比例的因子证明块稀疏 FlashAttention具有比 FlashAttention更好的 IO 复杂性。

优点:

  • 更快的模型训练
 FlashAttention 在wall-clocktime更快地训练 Transformer 模型。我们训练BERT-large(序列长度 512)比 MLPerf 1.1中的训练速度记录快 15%,GPT2(序列长度 1K)比HuggingFace和 Megatron-LM的基线实现快 3 倍和远程竞技场(序列长度 1K-4K)比基线快 2.4倍。
 ps:“wall-clock time”是指墙上时钟时间,也称为实际时间或绝对时间。它是指从某个事件或操作的开始到结束所经过的实际时间,包括了所有的等待时间、执行时间和其他延迟。与之相对的是“CPU时间”,它只计算CPU执行指令所花费的时间,而不考虑等待时间或其他延迟。
  • 更高质量的模型。
FlashAttention 将 Transformers 扩展到更长的序列,从而提高它们的质量并启用新功能。我们观察到 GPT-2 的困惑度提高了 0.7,在长文档分类上对较长序列进行建模得到了 6.4 个提升点。 FlashAttention 使第一个 Transformer 能够在 Path-X挑战中实现优于机会的性能,仅通过使用更长的序列长度 (16K)。块稀疏 FlashAttention 使 Transformer 能够扩展到更长的序列 (64K),从而产生了第一个可以在 Path-256 上实现优于机会性能的模型。
ps:在自然语言处理中,困惑度是一种用来评估语言模型质量的指标。它衡量了一个语言模型对给定文本序列中下一个词的预测能力。困惑度越低,表示模型的预测能力越好。
  • 基准化注意力。
FlashAttention 在 128 到 2K 的常见序列长度上比标准注意力实现快 3 倍,并可扩展到 64K。直到序列长度达到 512,FlashAttention 比任何现有的注意方法都更快且更节省内存,而对于超过 1K 的序列长度,一些近似注意方法(例如 Linformer)开始变得更快。另一方面,块稀疏FlashAttention 比我们所知的所有现有近似注意力方法都快。

标准注意力算法实现流程:

在这里插入图片描述

  1. 从 HBM 按块加载 Q, K,计算 S = QK ,将 S 写入 HBM。

  2. 从 HBM读取 S,计算 P = softmax(S),将 P 写入 HBM。

  3. 从 HBM 中按块加载 P和 V,计算 O = PV,将 O 写入 HBM。

  4. 返回O。

FlashAttention

通过tiling和recomputation技术来优化注意力机制计算

  • 使用tiling技术将注意力计算过程分块
  • 使用recomputation技术在每个块内重新计算注意力输出
    以此来优化Transformer模型在HBM和SRAM混合内存架构下的注意力计算过程。它避免了直接在HBM上计算整个注意力所需的大量读写,通过在SRAM上分块计算和最后的聚合,实现了较低的内存和计算复杂度。

实现细节:内核融合。平铺使我们能够在一个 CUDA 内核中实现我们的算法,从 HBM 加载输入,执行所有计算步骤(矩阵乘法、softmax、可选的掩码和丢弃、矩阵乘法),然后将结果写回 HBM。这避免了重复读取和写入 HBM 的输入和输出。

在这里插入图片描述

HBM 访问次数是注意力运行时间的主要决定因素。

  • 在图 2(左)中,我们看到尽管FlashAttention与标准注意力相比具有更高的 FLOP 计数(由于反向传递中的重新计算),但它具有更少的 HBM 访问,从而导致更快的运行时间。
  • 在图 2(中)中,我们改变了FlashAttention的块大小 B.,这导致了不同数量的 HBM 访问,并测量了前向传递的运行时间。随着块大小的增加,HBM 访问次数减少(因为我们对输入的传递次数减少),运行时间减少。对于足够大的块大小(超过 256),运行时会受到其他因素(例如算术运算)的瓶颈。此外,较大的块大小将不适合较小的 SRAM 大小。

Block-Sparse FlashAttention

我们将 FlashAttention扩展到近似注意力:我们提出块稀疏 FlashAttention,其 IO 复杂度比FlashAttention小一个与稀疏性成比例的因子。

在这里插入图片描述

在图 2(右)中,我们验证了随着稀疏度的增加,块稀疏 FlashAttention的运行时间成比例地提高。在 LRA 基准测试中,块稀疏 FlashAttention 实现了 2.8× 的加速,同时与标准注意力表现相当。

实验

使用FlashAttention后更快的模型

BERT

在这里插入图片描述

我们在维基百科上使用FlashAttention训练了一个 BERT-large 模型。

表 1 将我们的训练时间与 Nvidia 的实施进行了比较,Nvidia 为 MLPerf 1.1 设置了训练速度记录。我们的实施速度提高了 15%。

GPT-2

在这里插入图片描述

与广泛使用的 HuggingFaceMegatron-LM实现相比,FlashAttention 在大型 OpenWebtext 数据集上为 GPT-2 产生更快的训练时间。

表 2 显示与 Huggingface 相比高达 端到端加速,与 Megatron-LM 相比高达 1.7× 加速。FlashAttention 实现了与其他两个实现相同的困惑,因为我们没有改变模型定义。

Long-range Arena

在这里插入图片描述

LRA:用来对长语境场景下的序列模型进行基准测试。该基准包括合成任务和现实任务

LRA 基准包含多项任务,旨在评估高效 Transformer 模型的不同能力。具体而言,这些任务包括:Long ListOps、比特级文本分类、比特级文档检索、基于像素序列的图像分类、Pathfinder(长程空间依赖性)、Pathfinder-X(极端长度下的长程空间依赖性)。

具有更长序列的更好模型

Megatron-LM

Megatron-LM是一个基于PyTorch的框架,用于训练基于Transformer架构的巨型语言模型。它实现了高效的大规模语言模型训练,主要通过以下几种方式:

  1. 模型并行:将模型参数分散在多个GPU上,减少单个GPU的内存占用23。
  2. 数据并行:将数据批次分散在多个GPU上,增加训练吞吐量4。
  3. 混合精度:使用16位浮点数代替32位浮点数,减少内存和带宽需求,提高计算速度4。
  4. 梯度累积:在多个数据批次上累积梯度,然后再更新参数,降低通信开销4。
  5. Megatron-LM还可以与其他框架如DeepSpeed结合,实现更高级的并行技术,如ZeRO分片和管道并行5。这样可以进一步提升训练效率和规模。

具有长上下文的语言模型

在这里插入图片描述

FlashAttention 的运行时和内存效率使我们能够将 GPT-2 的上下文长度增加4 倍,同时仍然比 Megatron-LM 的优化实现运行得更快。

表 4 显示,具有 FlashAttention 和上下文长度 4K 的 GPT-2 仍然比上下文长度为 1K 的 Megatron 的 GPT-2 快 30%,同时实现了 0.7 更好的困惑度。

长文档分类

使用 FlashAttention 训练具有较长序列的 Transformer 可提高 MIMIC-III 和 ECtHR数据集的性能。
在这里插入图片描述

Path-X and Path-256

Path-X 和 Path-256 基准测试是旨在测试长上下文的远程竞技场基准测试中具有挑战性的任务。任务是对黑白 128×128(或 256×256)图像中的两个点是否有连接它们的路径进行分类,并且图像一次一个像素地馈送到变换器。

在之前的工作中,所有 Transformer 模型要么内存不足,要么只达到随机性能。人们一直在寻找可以对如此长的上下文进行建模的替代架构。我们在这里展示了Transformer 模型能够求解 Path-X 和 Path-256 的第一个结果(表 6)。我们在 Path-64 上预训练了一个转换器,然后通过对位置嵌入进行空间插值来转移到 Path-X。 FlashAttention 在 Path-X 上达到了61.4 的准确率。此外,块稀疏 FlashAttention 使 Transformers 能够扩展到序列长度 64K,在 Path-256上实现 63.1 精度。

在这里插入图片描述

Benchmarking Attention

在这里插入图片描述

FlashAttention和块稀疏FlashAttention在长短序列下的运行时间和内存消耗情况。

  • FlashAttention的运行时间随序列长度呈二次方增长,但比精确注意力基线快3倍,比PyTorch实现快很多。这表明FlashAttention可以有效降低长序列注意力的计算复杂度
  • 许多近似/稀疏注意力的运行时间随序列长度线性增长,但FlashAttention在短序列下仍比它们运行得更快。这是因为FlashAttention 减少了内存访问,加速了计算。但在512-1024长度范围,近似注意力开始超过FlashAttention。
  • 块稀疏FlashAttention在所有序列长度上都比我们知道的精确、稀疏和近似注意的所有实现更快。
  • FlashAttention和块稀疏FlashAttention的内存占用随序列长度线性增长,但比精确注意力基线高20倍,也高于近似注意力基线。除Lin former外,其他算法在64K长度下的A100 GPU上会耗尽内存,而FlashAttention的效率仍比Linformer高2倍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络管理发展】网络杂谈(12)之网络管理未来发展趋势

涉及知识点 网络管理未来的发展方向,网络管理未来的发展趋势,个人闲谈网络管理未来发展,网络管理技术现状,应用服务供应商(ASP),网络的远程管理,人工智能与未来。 原创于&#xff1…

try catch 异常处理

C中使用异常时应注意的问题任何事情都是两面性的,异常有好处就有坏处。如果你是C程序员, 并且希望在你的代码中使用异常,那么下面的问题是你要注意的。1. 性能问题。这个一般不会成为瓶颈,但是如果你编写的是高性能或者实时性要求…

保偏产品系列丨5款保偏光纤产品简介

保偏光纤应用日益扩大,特别是在干涉型传感器等测量方面,利用保偏光纤的光无源器件起着非常重要的作用,种类也很多。 本文来介绍5款保偏光纤系列产品以及它们的性能,欢迎收藏转发哦! 01、保偏光纤跳线-TLPMPC 保偏光纤跳…

2015年全国硕士研究生入学统一考试管理类专业学位联考数学试题——纯题目版

2015 级考研管理类联考数学真题 一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。 1.若实数a,b, c 满足 a : b : c…

手机记事本中的内容转到新手机不见了,怎么办?

在更换新手机时,很多网友都会面临这样一个问题,这就是旧手机中的重要数据如何转移到新手机上。一般来说,如果是相同品牌的手机,我们可以借助手机云空间账号进行数据的同步;但如果使用的是不同品牌的手机,这…

如何恢复电脑回收站中的数据?应对已清空电脑回收站的措施

在我们日常使用电脑的过程中,误删文件是难以避免的。幸运的是,电脑回收站提供了一种简便的方式来找回被删除的文件。然而,有些文件可能不会进入回收站,或者回收站的数据被清空,导致丢失的文件无法通过常规方式恢复。在…

在rails项目里面把a链接中的com前半部分用sub替换

在Rails项目中,你可以使用sub方法来替换a链接中的"com"前半部分。下面是一个示例: # 假设a链接的原始URL为:https://example.com/some/pagelink "https://example.com/some/page" modified_link link.sub("com…

node.js宿舍管理系统-计算机毕设 附源码80331

node.js宿舍管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于角度存在偏差,人们经常能够获取不同类型的信息,这也是技术最为难以攻克的课题。针对宿舍管理系统等问题&#…

高防IP服务靠谱吗?能抵御什么攻击?

今天我们要揭开一个神秘而又酷炫的面纱——高防IP服务!是不是已经感到心跳加速了呢?那么,问题来了,高防IP服务靠谱吗?它能抵御什么攻击呢? 我们来给大家科普一下高防IP服务是什么。简单来说,高防…

JetBrains编程IDE将具备Ai助手功能,或将提高开发速度

近日JetBrains发布博客文章宣布,本周所有基于IntelliJ的IDE和.NET工具的EAP版本都将具备AI助手功能。而这些操作或许将提高开发效率,并且这些AI助手也是使用自家的**ERP**模型和OpenAI服务。 JetBrains表示,当下AI助手功能主要体现在IDE的两…

adb 查询app占用的cup和内存

一、先将cpu定频 先进入shell 模式 adb shell 查看当前CPU的工作模式 cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 然后把CPU工作模式设置为performance模式 echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 改完后查看模式…

Pytest接口自动化框架

目录 前言: 插件: test_case pytest.ini (pytest.ini 配置文件不支持注释) run_all.py report 插件: test_case pytest.ini (pytest.ini 配置文件不支持注释) run_all.py report 前言: pytest是一个基于Python的开源测试框…

ShaderGraph制作“红旗迎风飘扬”效果(Unity2019版)

零、准备“旗面”游戏物体 旗面是一个平面,右键创建的3D物体里是平面的,有Quad和Plan,模仿旗面“起伏”的原理是对平面的顶点,做不同程度的抬升:Quad从线框图中看,是一个长方形,只有四个顶点&am…

nginx unknown directive “stream“

目录 1、安装依赖 2、执行命令 nginx 运行报错:unknown directive "stream"的原因,主要是因为没有安装stream模块导致的,我们只需要编译安装一下stream模块即可解决这个问题。 1、安装依赖 提前安装编译所需要的依赖插件 # gcc…

【机器学习与遥感】sklearn与rasterio实现遥感影像非监督分类

在学习遥感的过程中,我们都了解到了监督分类与非监督分类,二者是遥感解译的基础。之前更多的是使用Erdas与ENVI来进行这两种分类。这里使用python语言,基于机器学习库sklearn与遥感影像处理库rasterio,使用kmeans动态聚类方法实现…

PP-Structure—表格数据提取

目录 简介 特性 效果展示 表格识别 版面分析和表格识别 版面恢复 关键信息抽取 快速开始 1. 准备环境 1.1 安装PaddlePaddle 1.2 安装PaddleOCR whl包 2 快速使用 3. 便捷使用 3.1 命令行使用 3.2 Python脚本使用 3.3 返回结果说明 分析总结 简介 PP-Stru…

Python 装饰器

一、什么是装饰器 装饰器本质上就是一个Python函数,它可以装饰在其他函数上,使得其他函数不需要做任何改动就可以获得装饰器函数中的功能。实际上被装饰器修饰的函数在执行的时候不会直接运行其函数内部的逻辑,而是先将这个函数当作参数传递…

【企业架构治理】SOGAF ,Salesforce 的运营、治理和架构框架

“如果你想要新的东西,你必须停止做旧的东西。”——彼得德鲁克,《公司概念》的作者 这篇文章介绍了 Salesforce 运营、治理和架构框架 (SOGAF),这是一个新的大规模治理框架,由对跨多个行业的学术文献、现有框架和转型案例研究的广…

如何对数据库进行垂直拆分或水平拆分?

水平拆分的意思,就是把一个表的数据给弄到多个库的多个表里去,但是每个库的表结构都一 样,只不过每个库表放的数据是不同的,所有库表的数据加起来就是全部数据。水平拆分的意 义,就是将数据均匀放更多的库里&#xff0…

高性能计算培训机构哪些好?培训机构排行推荐!

目前市面上高性能计算培训不多,尤其是专业做高性能计算培训的机构更是不多。 比较好的高性能计算培训有北大未名超算队、各类超算中心的高性能计算培训视频、以及猿代码科技的系统实战化的高性能计算培训课程,这些在B站上均有不错的播放量,群…