FlashAttention 深度解析
FlashAttention 深度解析FlashAttention 是大语言模型LLM发展史上的里程碑式技术。它通过算法与底层硬件GPU的深度协同从根本上解决了标准 Transformer 自注意力机制的O(N2)O(N^2)O(N2)复杂度瓶颈是实现几十万甚至上百万上下文窗口Long-context的核心基石。本文档将从物理硬件痛点、核心算法设计到严格的数学推演全面剖析 FlashAttention 的工作原理。1. 痛点分析标准注意力的“内存墙”在标准的 Transformer 中自注意力Self-Attention的数学表达式为Attention(Q,K,V)softmax(QKTd)VAttention(Q, K, V) \text{softmax}(\frac{QK^T}{\sqrt{d}})VAttention(Q,K,V)softmax(d​QKT​)V随着输入序列长度NNN的增长计算QKTQK^TQKT会产生一个N×NN \times NN×N的注意力分数矩阵Attention Score Matrix。标准框架如早期 PyTorch的执行逻辑是“计算-存储-读取”计算SQKTS QK^TSQKT将N×NN \times NN×N矩阵写入 GPU 的全局内存HBM。从 HBM 重新读取SSS计算 Softmax 得到概率矩阵PPP再写回 HBM。从 HBM 读取PPP和矩阵VVV计算最终输出OPVO PVOPV再次写回 HBM。致命瓶颈Memory-bound当NNN达到 8K 或 32K 时这个N×NN \times NN×N矩阵不仅会瞬间撑爆显存OOM更严重的是GPU 的计算核心Tensor Cores在疯狂等待数据从缓慢的 HBM 中读写。算力被闲置整个过程被极低的内存带宽死死卡住这就是所谓的“内存墙”。2. 硬件思维GPU 的分级存储与 IO-AwareFlashAttention 的突破在于提出了IO-aware感知 IO的设计理念即算法必须适配硬件的物理特性。现代 GPU 的存储层级极度不平衡存储层级物理位置容量示例 (A100)带宽速度访问特性HBM (全局显存)GPU 芯片外侧40GB - 80GB~1.5 TB/s巨大但极慢读写代价高昂SRAM (共享内存)计算核心 (SM) 内部约 20MB / 192KB per SM~19 TB/s极小但极快计算零延迟核心解法Kernel FusionFlashAttention 的终极目标是将数据从 HBM 加载到极速的 SRAM 中后在 SRAM 内一口气算完QKTQK^TQKT、Softmax 和 乘VVV的全套流程最后只将N×dN \times dN×d的最终结果写回 HBM从而彻底消灭N×NN \times NN×N中间矩阵的读写。3. 核心技术一Tiled Attention (分块注意力)由于 SRAM 的容量MB级别远远装不下完整的Q,K,VQ, K, VQ,K,V矩阵FlashAttention 采用了分块Tiling策略矩阵切块将 HBM 中的Q,K,VQ, K, VQ,K,V和最终输出OOO切分成大小适中的块Blocks。块的大小需精确计算以确保几块加起来刚好能塞满 SRAM。双重循环加载外循环加载KKK和VVV的小块到 SRAM。内循环加载QQQ的小块到 SRAM。就地计算在 SRAM 中直接让QQQ的块与KKK的块相乘计算局部的 Softmax然后立刻与VVV的块相乘将结果累加到输出块OOO中。这种分块计算虽然有效但立刻遇到了一个极其严峻的数学挑战Softmax 的计算依赖全局信息如何分块4. 核心数学基石Online Softmax (在线 Softmax)标准的 Safe Softmax 需要遍历整行数据才能找到全局最大值mmm和全局指数和lll分母这在分块且“阅后即焚”的 SRAM 中是不可能做到的。FlashAttention 引入了Online Softmax利用代数技巧在局部计算时动态修正历史结果实现 100% 精确的无损计算。动态修正推演假设我们在遍历QQQ的某一行与KKK的各个分块相乘。我们维护两个全局标量状态当前的最大值moldm_{old}mold​和当前的指数和loldl_{old}lold​以及当前的未归一化输出O~old\tilde{O}_{old}O~old​。当加载一个新的分块并算出局部最大值mlocalm_{local}mlocal​、局部指数和llocall_{local}llocal​与局部输出O~local\tilde{O}_{local}O~local​时1. 更新全局最大值mnewmax⁡(mold,mlocal)m_{new} \max(m_{old}, m_{local})mnew​max(mold​,mlocal​)2. 核心修正公式计算全局指数和由于最大值变了之前算过的所有指数项ex−molde^{x - m_{old}}ex−mold​都偏大或偏小了。利用指数的性质只需乘上一个缩放因子emold−mnewe^{m_{old} - m_{new}}emold​−mnew​即可完美修正历史lnewemold−mnew⋅loldemlocal−mnew⋅llocall_{new} e^{m_{old} - m_{new}} \cdot l_{old} e^{m_{local} - m_{new}} \cdot l_{local}lnew​emold​−mnew​⋅lold​emlocal​−mnew​⋅llocal​3. 修正输出矩阵O~\tilde{O}O~同理针对VVV的加权求和也用完全相同的缩放因子修正旧的累加器O~newemold−mnew⋅O~oldemlocal−mnew⋅O~local\tilde{O}_{new} e^{m_{old} - m_{new}} \cdot \tilde{O}_{old} e^{m_{local} - m_{new}} \cdot \tilde{O}_{local}O~new​emold​−mnew​⋅O~old​emlocal​−mnew​⋅O~local​当所有块遍历完毕后只需进行最后一步除法OfinalO~newlnewO_{final} \frac{\tilde{O}_{new}}{l_{new}}Ofinal​lnew​O~new​​结果即可写回 HBM。结论依靠这段优雅的代数公式FlashAttention 完美绕过了N×NN \times NN×N矩阵的存储将空间复杂度从O(N2)O(N^2)O(N2)降到了O(N)O(N)O(N)。5. 核心技术二反向传播的“重计算” (Recomputation)在深度学习的后向传播Backward Pass中计算注意力层的梯度通常需要用到前向传播时生成的N×NN \times NN×NSoftmax 概率矩阵。由于 FlashAttention 在前向时为了省显存根本没有保存这个矩阵它采用了极其反直觉的重计算Recomputation策略前向传播时FlashAttention 会在 HBM 中保存每个序列行的最终归一化统计量全局mmm和lll。这个统计量的大小是O(N)O(N)O(N)的极小。反向传播时利用保存下来的mmm和lll以及重新分块加载的Q,K,VQ, K, VQ,K,V在 SRAM 中直接把前向的 Attention 矩阵重新算一遍算完梯度就丢弃。为什么算两遍反而更快这就是 IO-aware 的威力。在 GPU 上重新执行几千次乘加运算FLOPs的时间远远少于去 HBM 里读取一个巨大矩阵MAC的时间。FlashAttention 用极其廉价的算力换取了极其昂贵的内存带宽。6. 总结与工程意义FlashAttention 并不改变 Transformer 的数学本质它的输出与标准 PyTorch Attention 的误差在极小浮点精度内实际上因为避免了大型矩阵累加FlashAttention 通常精度更高、更不容易溢出。它的三大核心贡献彻底打破显存瓶颈显存占用与上下文长度NNN呈线性关系单卡轻松支持 32K、64K 甚至更长文本。极致的训练/推理加速消除 IO 瓶颈让 GPU Tensor Core 跑满通常带来 2-4 倍的端到端速度提升。全行业标配如今无论 OpenAI 的 GPT-4、Anthropic 的 Claude还是开源的 Llama、Qwen底层全部依赖 FlashAttention 及其演进版本如 FlashAttention-2、FlashAttention-3。

相关新闻

AI与电力的百年镜像:AI当前的历史节点

AI与电力的百年镜像:AI当前的历史节点

电力(二次工业革命电气化体系)与AI大模型(生成式通用人工智能)是人类工业文明史上两代核心通用目的技术(General Purpose Technology, GPT),具备跨行业渗透、技术持续迭代、重构生产要素、催生全新产业生态的核心特征。 底层物理与生产力本质 能量转化 vs 智力转化 核…

2026/10/18 0:55:58 阅读更多 →
移动端线程死循环检测与优化实践

移动端线程死循环检测与优化实践

1. 端线程死循环问题概述在移动端开发领域,线程死循环问题堪称"隐形杀手"。它不像崩溃那样直接导致应用退出,却会悄无声息地吞噬CPU资源,造成界面卡顿、电量骤降、发热严重等一系列性能问题。我曾在多个项目中处理过这类问题&#…

2026/10/18 7:55:39 阅读更多 →
工业自动化上位机开发:核心功能与技术架构解析

工业自动化上位机开发:核心功能与技术架构解析

1. 上位机在自动化领域的核心定位在工业自动化系统中,上位机(Host Computer)扮演着"大脑"的角色。作为整个系统的控制中枢,它通过各类通信协议与下位机(如PLC、单片机、仪器仪表等)建立连接&…

2026/10/18 2:15:21 阅读更多 →

最新新闻

显存不够怎么办:HERO-35B-A3B-i1-GGUF用7.6GB跑起35B大模型的极限技巧

显存不够怎么办:HERO-35B-A3B-i1-GGUF用7.6GB跑起35B大模型的极限技巧

【免费下载链接】HERO-35B-A3B-i1-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/mradermacher/HERO-35B-A3B-i1-GGUF 点击查看 免费下载 显存不够,还想本地跑35B大模型?HERO-35B-A3B-i1-GGUF 就是为你准备的。这个项目提供了一套完整的…

2026/10/19 1:56:24 阅读更多 →
【AI智能体】Langchain 结构化输出结果实战操作详解

【AI智能体】Langchain 结构化输出结果实战操作详解

目录 一、前言 二、Langchain 结构化输出介绍 2.1 什么是结构化输出 2.2 传统方式 vs 结构化输出 2.3 结构化输出模式 三、四种结构化输出格式使用 3.1 Pydantic 使用 3.1.1 基本使用 3.1.2 设置枚举类型 3.1.3 列表提取 3.1.4 嵌套结构 3.1.5 限制条件 3.2 TypedD…

2026/10/19 1:56:24 阅读更多 →
日记提示词:用结构化提问开启情绪疗愈与自我探索

日记提示词:用结构化提问开启情绪疗愈与自我探索

我身边不少朋友知道我有长期写日记的习惯,常来问我同一个问题:“日记到底怎么才能坚持写下去?”更常见的是:“我试过,翻开头一天写的内容,全是‘今天工作好累,吃了外卖’‘睡晚了’,…

2026/10/19 1:56:24 阅读更多 →
ArtCraft:Rust + Tauri AI 图像生成桌面应用源码构建完整指南,10 分钟从 clone 到出图

ArtCraft:Rust + Tauri AI 图像生成桌面应用源码构建完整指南,10 分钟从 clone 到出图

ArtCraft:Rust Tauri AI 图像生成桌面应用源码构建完整指南,10 分钟从 clone 到出图 【免费下载链接】artcraft ArtCraft is an intentional crafting engine for artists, designers, and filmmakers 项目地址: https://gitcode.com/GitHub_Trending…

2026/10/19 1:56:24 阅读更多 →
10 分钟录音练出 AI 变声模型:RVC WebUI 完整实战

10 分钟录音练出 AI 变声模型:RVC WebUI 完整实战

10 分钟录音练出 AI 变声模型&#xff1a;RVC WebUI 完整实战 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-…

2026/10/19 1:56:24 阅读更多 →
固态硬盘DRAM缓存有什么用?从原理到选购一次讲清

固态硬盘DRAM缓存有什么用?从原理到选购一次讲清

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:55:24 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →