Ascend上的FlashAttention实现

简介: FlashAttention是优化Transformer模型计算效率和内存使用的技术,通过减少存储访问开销提升性能。它采用Tiling、Recomputation、分块SoftMax等策略,减少HBM访问,加速计算,并在昇腾AI处理器上实现了显著的性能提升。

1 FlashAttention

FlashAttention是一种优化Transformer模型计算效率和内存使用的技术。它通过减少存储访问开销(Memory Access Cost,MAC),而非降低FLOPS(浮点运算次数),来提升性能。

2 前述知识点

涉及到内存访问,肯定与计算的硬件架构有关系。

从GPU架构进行解析,参考如下博客:
大模型推理加速技术的学习路线是什么
首先,我们将探讨GPU架构,特别是其内存层次结构。我们确定了两个重要模式:计算限制(compute bound)和内存限制(memory bound),并讨论了大规模Transformer推理受内存限制的原因。大部分优化都基于Transformer推理受内存限制这一基本事实,例如只要我们提高FLOP利用率,就能提高效率。

2.1 GPU架构

GPU架构总体如下图所示:
image.png

基础部分:DRAM(动态随机存取存储器)、L2缓存和SM(流处理器单元)

  • 与CPU对比
    • SM类似于CPU核心,但具有更高级的并行性;
    • L2缓存和DRAM类似于CPU的L2缓存和DRAM
    • 在Flash Attention论文中,L2缓存被称为SRAM(静态随机存取存储器)
  • A100 80G SXM
    • 08个SM,DRAM容量为80GB,有40M L2缓存

SM内部包含什么?

  • L1缓存:指令和数据
  • 张量核心:进行矩阵乘法运算的地方。回想一下,神经网络计算基本上就是巨大批量的矩阵乘法。

GPU编程基础

在执行model.generate(prompt)时,我们进行以下操作:

  • 内存访问:
    • 从高带宽内存(HBM)加载模型权重 -> L2缓存 -> 传输到SM(流处理器单元)
  • 计算:
    • 在SM中执行矩阵乘法,SM请求张量核心执行计算
  • A100:
    • 108个SM,DRAM容量为80G,40M L2缓存
    • bf16张量核心:每秒312万亿浮点运算(TFLOPS)
    • DRAM内存带宽为2039GB/秒 = 2.039T/秒
  • 如果模型很大,我们将其分割到多个GPU上,比如两个由NVLink连接的GPU
    • NVLink 300GB/秒 = 0.3T/秒
    • 我们大致观察了速度层次结构。尽管不能直接比较,但它们的数量级差异是我们需要优化的主要方面:
    • 312T(SM计算) > 2.03T(DRAM内存访问) > 0.3T=300G(NVLink跨设备通信) > 60G(PCIe跨设备通信)
  • 这意味着,如果我们希望速度更快,我们应该尽力:
    • 充分利用SM
    • 减少单个GPU的内存访问(因为它比计算慢得多),减少GPU之间的通信(因为它甚至比内存访问还要慢)。

计算限制与内存限制

如何确定我们是否充分利用了SM呢?我们通过以下方式检查是否计算或内存限制:

定义每字节GPU操作 = flop / 内存带宽

  • A100 = 312 / 2.039
  • 定义计算强度 = 计算 / 内存访问
  • 如果计算强度大,说明程序更会受到计算限制;如果计算强度较小,则更受内存限制。
  • 增加批次大小会将行为从内存限制变为计算限制。
  • 内核融合:减少了内存访问操作,因为我们将多个操作合并为一个操作。

2.2 Transformer推理

内存布局
image.png

正如我们所看到的,为了在bf16格式下运行一个13B模型,我们大约只有10GB的内存来存储kv缓存。这意味着:

  • 不能使用太大型的批次(尽管我们希望使用更大的批次大小以提高效率)
  • 也不能处理太长的序列,尽管我们确实希望能够处理长度为100k的序列。

3 FlashAttention的策略

FlashAttention的核心策略包括:

  • Tiling(平铺/切分):将注意力矩阵分解成更小的子矩阵,分别计算,确保每个子矩阵的大小适合SRAM(静态随机存取存储器)的存储能力,从而减少对HBM(高带宽内存)的访问。
  • Recomputation(重算):在反向传播时,不存储所有中间状态,而是在需要时重新计算,节省内存。
  • 分块SoftMax:解决标准SoftMax在分块计算中的问题,确保整个Flash Attention的正确性。
  • 优化显存交换:减少SRAM与HBM之间的数据交换,加速计算。
    这些策略共同作用,使FlashAttention在保持计算精度的同时,显著提高计算速度和内存效率

4 Ascend 上的FlashAttention

昇腾异构计算架构CANN针对昇腾AI处理器的片上内存和缓存大小,以及数据搬运通路,基于Ascend C算子编程语言优化实现FlashAttention融合算子,充分利用片上缓存,提升Attention处理性能。根据实测,在一些典型场景中CANN的FlashAttention算子相比小算子取得了5倍以上的性能提升,开发者可直接调用相关算子API接口使能大模型极致性能优化。

可参考:
基于Ascend C的FlashAttention算子性能优化最佳实践-技术干货-昇腾社区

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
路径损耗计算模型 | 带你读《大规模天线波束赋形技术原理与设计 》之二十五
本小节介绍 3D 信道的路损模型,是以 ITU 信道为基础拓展得到的。
14401 0
路径损耗计算模型  | 带你读《大规模天线波束赋形技术原理与设计 》之二十五
|
存储 机器学习/深度学习 缓存
性能最高提升7倍?探究大语言模型推理之缓存优化
本文探讨了大语言模型(LLM)推理缓存优化技术,重点分析了KV Cache、PagedAttention、Prefix Caching及LMCache等关键技术的演进与优化方向。文章介绍了主流推理框架如vLLM和SGLang在提升首Token延迟(TTFT)、平均Token生成时间(TPOT)和吞吐量方面的实现机制,并展望了未来缓存技术的发展趋势。
4038 13
性能最高提升7倍?探究大语言模型推理之缓存优化
|
存储 算法 PyTorch
FlashAttention2原理解析以及面向AIGC的加速实践
FlashAttention2原理解析以及面向AIGC的加速实践
3227 0
|
10月前
|
机器学习/深度学习 存储 并行计算
大模型推理加速技术:FlashAttention原理与实现
本文深入解析大语言模型推理加速的核心技术——FlashAttention。通过分析传统注意力机制的计算瓶颈,详细阐述FlashAttention的IO感知算法设计、前向反向传播实现,以及其在GPU内存层次结构中的优化策略。文章包含完整的CUDA实现示例、性能基准测试和实际部署指南,为开发者提供高效注意力计算的全套解决方案。
1729 10
|
7月前
|
人工智能 自然语言处理 API
数据合成篇|多轮ToolUse数据合成打造更可靠的AI导购助手
本文提出一种面向租赁导购场景的工具调用(Tool Use)训练数据合成方案,以支付宝芝麻租赁助理“小不懂”为例,通过“导演-演员”式多智能体框架生成拟真多轮对话。结合话题路径引导与动态角色交互,实现高质量、可扩展的合成数据生产,并构建“数据飞轮”推动模型持续优化。实验表明,该方法显著提升模型在复杂任务中的工具调用准确率与多轮理解能力。
957 43
数据合成篇|多轮ToolUse数据合成打造更可靠的AI导购助手
|
存储 机器学习/深度学习 缓存
vLLM 核心技术 PagedAttention 原理详解
本文系统梳理了 vLLM 核心技术 PagedAttention 的设计理念与实现机制。文章从 KV Cache 在推理中的关键作用与内存管理挑战切入,介绍了 vLLM 在请求调度、分布式执行及 GPU kernel 优化等方面的核心改进。PagedAttention 通过分页机制与动态映射,有效提升了显存利用率,使 vLLM 在保持低延迟的同时显著提升了吞吐能力。
9045 22
vLLM 核心技术 PagedAttention 原理详解
|
机器学习/深度学习 存储 移动开发
Chunked-Prefills 分块预填充机制详解
为解决传统静态或迭代调度中存在的资源浪费与延迟问题,Sarathi-Serve 提出了 chunked-prefills 和 stall-free scheduling 机制,通过将长 prompt 拆分为多个小块,并与 decode 请求混合调度,从而实现高吞吐与低延迟的平衡。
3316 2
Chunked-Prefills 分块预填充机制详解
|
8月前
|
开发工具 开发者 AI芯片
昇腾 Triton-Ascend 开源实战:架构解析、环境搭建与配置速查
本文深度解析Triton-Ascend开源项目,涵盖源码结构、编译流程与环境部署,重点针对Ascend 910B硬件提供从CANN安装到算子开发的保姆级指南,并详解Autotune调优策略与性能分析工具,助力开发者高效构建高性能AI算子。
1031 0
|
机器学习/深度学习 PyTorch 调度
内部干货 | 基于华为昇腾910B算力卡的大模型部署和调优-课程讲义
近日上海,TsingtaoAI为某央企智算中心交付华为昇腾910B算力卡的大模型部署和调优课程。课程深入讲解如何在昇腾NPU上高效地训练、调优和部署PyTorch与Transformer模型,并结合实际应用场景,探索如何优化和迁移模型至昇腾NPU平台。课程涵盖从模型预训练、微调、推理与评估,到性能对比、算子适配、模型调优等一系列关键技术,帮助学员深入理解昇腾NPU的优势及其与主流深度学习框架(如PyTorch、Deepspeed、MindSpore)的结合应用。
6450 13
|
存储 人工智能 编译器
【AI系统】昇腾数据布局转换
华为昇腾NPU采用独特的NC1HWC0五维数据格式,旨在优化AI处理器的矩阵乘法运算和访存效率。此格式通过将C维度分割为C1份C0,适应达芬奇架构的高效计算需求,支持FP16和INT8数据类型。此外,昇腾还引入了NZ分形格式,进一步提升数据搬运和矩阵计算效率。AI编译器通过智能布局转换,确保在不同硬件上达到最优性能。
1335 3