惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
V
V2EX
PCI Perspectives
PCI Perspectives
Latest news
Latest news
博客园 - 三生石上(FineUI控件)
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 叶小钗
V
Visual Studio Blog
Jina AI
Jina AI
P
Proofpoint News Feed
罗磊的独立博客
SecWiki News
SecWiki News
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
NISL@THU
NISL@THU
T
Tailwind CSS Blog
T
Tenable Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tor Project blog
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
G
GRAHAM CLULEY

Пусть этот камень будет более крепким, чем человек

【琐记】烟火与尘埃 【Triton】Triton实现矩阵乘 【LLM推理加速】PagedAttention 【LLM推理加速】Online Softmax LLM基础知识【1】 Transformer模型 【AI编译】LayerGroup Tiling Tile的疑惑和思考 【AI编译】深度优先的Tile调度,万事大吉? 【AI编译】多级流水线Tile调度策略 【CUDA C++】GPU内存使用【3】 【AI编译】Cache缓存地址映射 【CUDA C++】GPU存储【2】 【CUDA C++】GPU基本介绍【1】 【00】0序章-不受欢迎的来客 【转载】我来了——持续低熵 【Halide】调度优化【2】 【感想】写作进度报告5 【Halide】调度优化【1】 【转载】北大中文男足战报2 【BYOC】TVM切分子图 【转载】北大中文男足战报1 【AI编译】张量生命周期管理 SystemC 用寄存器同步建模方法 【脉动阵列】脉动阵列类型 【im2col】AScend conv accelerate 【感想】写作进度报告4 【BYOC】TVM添加自定义编译器 ccompiler 【感想】写作进度报告3 【Tengine】推理流程脑图【2】 【Tengine】推理流程脑图【1】 【NCNN】学习ncnn模型转换 【编译器】使用llvm编译自定义语言【3】编译 object 【编译器】使用llvm编译自定义语言【2】转llvm IR 【编译器】使用llvm编译自定义语言【1】构建AST 【AI编译】如何进行内存分配 【感想】写作进度报告2 【AI编译】layer-group之后如何tiling 【AI编译】如何进行layer-group 【量化】连续卷积层首尾量化的可行性 【Gemm】内存对齐 【gemm】Gemm计算加速 【TVM】通过代码学习编译流程【5】FuseOps 【TVM】通过代码学习编译流程【6】CodeGen 【TVM】通过代码学习类【3.5】Pass 【TVM】通过代码学习编译流程【4】BuildRelay 【AI编译】Tiling操作能优化什么时间 【TVM】通过代码学习编译流程【3】模型编译 【TVM】通过代码学习编译流程【2】模型转换 【TVM】通过代码学习编译流程【1】必要知识 【感想】写作进度报告1 【Winograd】卷积加速算法原理及实现 SystemC 等待异步事件解决方案 【TVM】Python脚本实现模型编译和保存 【推理引擎】常见AI推理框架 【3D建模】T110E3卡迪夫蓝调皮肤模型 【TVM】C++部署运行TVM 【推理引擎】NCNN和Tengine量化推理逻辑对比 【3D建模】IS-7攻城锤流纹岩皮肤展示 【TVM】根据例子走通代码库 博客汇总目录 【Im2Col】卷积加速算法【2】NHWC 【Im2Col】卷积加速算法【1】 NCHW openBlas库的安装与简单使用 C语言工程调用Cpp库解决方案 foo Hello World
【LLM推理加速】FlashAttention
Post author: XianMu@Пусть этот камень будет более крепким, чем ч · 2026-05-04 · via Пусть этот камень будет более крепким, чем человек

# 前言

本文介绍 FlashAttention。本文只关注 FlashAttention 前向推理部分的应用。

参考链接:Transformer 模型详解(图解最完整版)Attention is All You NeedPytorch 版本的 Transformer 实现一文了解 Transformer 全貌(图解 Transformer)大模型推理加速:看图学 KV Cache手撕大模型|KVCache 原理及代码解析FlashAttention 详解:为什么它能让大模型注意力计算又快又省显存?Flash Attention 原理详解 (含代码讲解)【手撕 LLM-Flash Attention】从 softmax 说起,保姆级超长文!!《The Two-Pass Softmax Algorithm》

# 动机

Online Softmax 是 flash attention 的基础,可以提前学习了解下 Online Softmax :【LLM 推理加速】Online Softmax
Flash Attention 的核心思想: 分块 Tiling。

LLM 的 Attention 计算过程包含巨大的矩阵运算和 softmax,需要存储巨大的注意力矩阵,必然会导致 GPU 显存和 SRAM 之间的频繁数据交换。

存储差异性

上图左边,GPU 中存储是分层的,越往上层速度越快。GPU 显存以 GB 为单位,如 A100 显存 40GB,其速度只有 1.5T/s。而 SRAM 读写速度为 19TB/s,比 HBM 高一个数量级,但是空间只有 20M。GPU 需要将数据拷贝到 SRAM 才能进行运算,因此 HBM 和 SRAM 之间的数据传输成为吞吐量瓶颈。

在没 flash attention 算法的情况下,标准 Attention 会强制生成完整 N×N 注意力分数矩阵,中间张量反复「HBM 写入→再从 HBM 读出」。比如从 HBM 读取整块 Q、整块 K 到 SRAM,计算得到结果 S,需要写回 HBM;再读取 S,计算缩放和掩码 Smask,再写回到 HBM;再之后还需要计算 softmax。

上图右边,pytorch 实现的传统 attention,每一步都需要读写 HBM,效果要比 flash 差的多。

怎么解决呢,就是切块 Tiling。

但 attention 计算中,softmax 涉及到全局求和,为什么能切块呢?

flash attention 算法就是解决这个问题的。

总之,FlashAttention 是一种 IO-aware 的精确注意力计算算法,它通过分块计算和 online Softmax,避免显式存储巨大的注意力矩阵,从而大幅减少 GPU 显存读写。

# Flash Attention

Attention 注意力公式:
Attention注意力公式

online softmax 解决了分块计算 softmax 的问题,可以再回顾一下 online softmax。online softmax 更新公式:

online softmax更新公式

它解决了两个问题:
数值稳定:始终减去最大值,避免指数爆炸。
分块等价:虽然一块一块算,但最后结果和一次性 softmax 完全一致。

以下是 flash attention 算法:

# 2-Pass Online Softmax

2-Pass Online Softmax

左边是计算 三次 迭代计算 softmax 的过程,第一次计算最大值,第二次分母求和,第三次计算注意力得分 a_i

右边根据 online softmax 算法,将计算过程变成两次迭代。第一次迭代同时计算最大值和分母,第二次计算注意力得分 a_i

# 2-pass Self-Attention

2-Pass Self-Attention

以 2-Pass Online Softmax 为基础,增加 QK^T 计算,得到 2-Pass Self-Attention。
计算过程如下所示:

计算过程

值得注意的是 O_i 的计算也是个累加的过程,直到计算出 O_N ,才算出一个最终值。

# 1-pass Self-Attention

下面需要思考的一个问题是,能不能让 O_i 也在第一次迭代中计算出来?

OI迭代

上方第一行 O_i 公式是二次迭代中的表达形式,第二行是它的定义形式。第三行 O^'_i 局部注意力输出的表达形式,当 i=N 时, o_i = o^'_i

接下来就是推导 O^'_i

推导

1-pass Self-Attention

# Flash-Attention(Tiling)

Flash Attention 分块形式:

Flash Attention分块形式

# 后记

本博客目前以及可预期的将来都不会支持评论功能。各位大侠如若有指教和问题,可以在我的 github 项目 或随便一个项目下提出 issue,并指明哪一篇博客,看到一定及时回复!