当前位置: 首页 > article >正文

【AI Infra 核心】图解 FlashAttention:长上下文推理背后的“内存墙”革命与底层优化思维

【AI Infra 核心】图解 FlashAttention长上下文推理背后的“内存墙”革命与底层优化思维摘要现在的大模型上下文窗口从 8K 卷到 128K甚至百万级别如 Gemini 1.5 Pro。但如果你用过早期的 Transformer会知道当序列长度翻倍时显存占用会呈**平方级Quadratic**爆炸这一切的救星就是大模型基建领域的“神作”——FlashAttention。今天我们不堆砌晦涩的论文公式而是从 GPU 底层硬件架构出发结合 Python 代码模拟带你彻底搞懂 FlashAttention 是如何通过“分块计算”打破内存墙的一、 标准 Attention 的原罪O(N2)O(N^2)O(N2)的“内存墙”困境在原始的 Transformer 中Self-Attention 的核心公式大家倒背如流Attention(Q,K,V)softmax(QKTd)V \text{Attention}(Q, K, V) \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)VAttention(Q,K,V)softmax(d​QKT​)V假设序列长度Context Length为NNNHead 的维度为ddd。我们来看看标准深度学习框架如早期的 PyTorch在底层是怎么执行这行公式的计算注意力分数SSQ×KTS Q \times K^TSQ×KT。这里会生成一个大小为N×NN \times NN×N的庞大矩阵并写入显存。计算 SoftmaxPPsoftmax(S)P \text{softmax}(S)Psoftmax(S)。从显存中读取SSS进行指数计算和归一化再将N×NN \times NN×N的PPP矩阵写入显存。计算输出OOP×VO P \times VOP×V。再次从显存读取PPP和VVV相乘后得到最终结果。灾难发生了当你的NNN达到 32K 时这个中间矩阵N×NN \times NN×N会变得极其巨大。更可怕的不是“算不过来”而是**“搬运不过来”**二、 认清现实GPU 计算极快但“读写”极慢要理解 FlashAttention必须先懂 GPU 的内存层级架构SRAM静态随机存储器在 GPU 计算核心旁边速度极快19TB/s但容量极小比如 A100 每块 SM 上只有 192KB。HBM高带宽内存/显存就是我们常说的 40G/80G 显存。容量大但速度相对较慢1.5TB/s - 2TB/s。标准 Attention 的致命问题在于它在 HBM 和 SRAM 之间频繁地来回搬运那个巨大的N×NN \times NN×N矩阵GPU 核心的算力FLOPS被白白闲置全在等 HBM 慢吞吐的内存读写。在学术上这叫Memory-Bound访存瓶颈。三、 FlashAttention 的破局Tiling分块计算与 SRAM 常驻既然 HBM 读写太慢而 SRAM 太小装不下整个矩阵那该怎么办FlashAttention 祭出了系统优化里最经典的招式分块Tiling。它的核心理念极其狂野我不存中间结果了我把Q,K,VQ, K, VQ,K,V切成小块Block每次只把一小块加载到超快的 SRAM 中一口气算完Q×KTQ \times K^TQ×KT、Softmax 和×V\times V×V直接输出最终结果写回 HBM完全绕过对中间矩阵SSS和PPP的保存。这就好比以前你是把整车砖头卸在村口HBM再用小推车一车车拉到工地SRAM盖房子现在你直接让砖车开进工地现拿现砌绝不二次搬运。四、 核心难点局部数据怎么算全局 Softmax“分块”听起来简单但遇到了一个巨大的数学阻碍Softmax。标准的 Softmax 公式要求你必须拥有完整的一整行数据才能求出分母所有元素的指数和softmax(xi)exi∑j1Nexj \text{softmax}(x_i) \frac{e^{x_i}}{\sum_{j1}^{N} e^{x_j}}softmax(xi​)∑j1N​exj​exi​​如果你只把矩阵切了一小块放进 SRAM你根本不知道这一行的其他元素是多少怎么求和怎么做归一化 绝妙的数学 TrickOnline SoftmaxFlashAttention 使用了Safe Online Softmax算法。它维护了两个变量局部最大值Max和局部指数和Sum。当新的块Block进来时它会通过极其精妙的数学换算动态更新全局的最大值和和值并对之前已经算出来的结果进行“缩放补偿”。我们用一段 Python 代码徒手模拟这个只占用O(1)O(1)O(1)额外空间且支持分块计算的 Online Attention五、 硬核实战Python 模拟 FlashAttention 底层分块逻辑代码说明这段代码舍弃了标准 PyTorch 的矩阵直乘而是用for循环模拟 GPU 中分块加载Tiling和状态更新Online Softmax的过程。importtorchdefflash_attention_simulate(Q,K,V,block_size2): 模拟 FlashAttention 的分块计算与 Online Softmax (前向传播) Q, K, V shape: (seq_len, head_dim) - 这里简化为单头 seq_len,head_dimQ.shape# 最终的输出 O (存放在 HBM)Otorch.zeros((seq_len,head_dim))# 将 Q 切分成块 (模拟外层循环加载到 SRAM)foriinrange(0,seq_len,block_size):q_blockQ[i:iblock_size,:]# 维护这一块的全局最大值和全局指数和 (存放在超快的 SRAM)m_itorch.full((q_block.shape[0],1),float(-inf))# 局部最大值l_itorch.zeros((q_block.shape[0],1))# 局部指数和# 累加结果o_itorch.zeros((q_block.shape[0],head_dim))# 内层循环遍历 K 和 V 的所有块forjinrange(0,seq_len,block_size):k_blockK[j:jblock_size,:]v_blockV[j:jblock_size,:]# 1. 计算局部 Score: S_{ij} Q_i * K_j^Ts_ijtorch.matmul(q_block,k_block.transpose(0,1))/(head_dim**0.5)# 2. 更新最大值 m_new max(m_old, row_max(s_ij))m_ij_maxtorch.max(s_ij,dim1,keepdimTrue).values m_newtorch.maximum(m_i,m_ij_max)# 3. 计算指数并按新的最大值进行数值稳定 (Safe Softmax)# P_{ij} exp(S_{ij} - m_new)p_ijtorch.exp(s_ij-m_new)# 4. 更新局部的和 l_new l_old * exp(m_old - m_new) sum(P_{ij})# 核心 trick: 之前的和必须缩小 exp(m_old - m_new) 倍才能对齐当前的最大值l_newl_i*torch.exp(m_i-m_new)torch.sum(p_ij,dim1,keepdimTrue)# 5. 更新输出 O_i (O_i * l_i * exp(m_old - m_new) P_{ij} * V_j) / l_new# 这里先不急着除以 l_new先维护未归一化的输出分子o_io_i*torch.exp(m_i-m_new)torch.matmul(p_ij,v_block)# 更新状态为下一次迭代准备m_im_new l_il_new# 6. 所有 K, V 遍历完后对当前 Q_block 进行最终的归一化O[i:iblock_size,:]o_i/l_ireturnO# 测试验证 torch.manual_seed(42)N,d8,4# 序列长度 8维度 4Qtorch.randn(N,d)Ktorch.randn(N,d)Vtorch.randn(N,d)# 1. 标准 Attention (占用 O(N^2) 内存)scorestorch.matmul(Q,K.transpose(0,1))/(d**0.5)attn_weightstorch.softmax(scores,dim-1)out_standardtorch.matmul(attn_weights,V)# 2. FlashAttention 模拟 (分块大小设为 2)out_flashflash_attention_simulate(Q,K,V,block_size2)# 对比结果差距difftorch.max(torch.abs(out_standard-out_flash))print(f标准 Attention 与 FlashAttention 模拟的输出差异:{diff.item():.6e})# 输出极小证明逻辑完全等价六、 总结从算法突破到系统工程的胜利这段模拟代码完美揭示了 FlashAttention 的精髓它不仅没有减少计算量甚至增加了一点点指数计算但它通过消除海量的显存读写延迟让整体运算速度飙升了 2 到 4 倍并且将显存占用从O(N2)O(N^2)O(N2)强行降维到了线性O(N)O(N)O(N)。可以说如果没有 FlashAttention 的底层重构目前大行其道的 128K 超长上下文模型根本不可能被普通企业部署。在 AI Infra 领域算法的数学优雅与底层硬件的脾气同样重要。懂 CUDA 层级的 IO 优化才是当下 AI 系统工程师的核心竞争力。

相关文章:

【AI Infra 核心】图解 FlashAttention:长上下文推理背后的“内存墙”革命与底层优化思维

🚀【AI Infra 核心】图解 FlashAttention:长上下文推理背后的“内存墙”革命与底层优化思维摘要:现在的大模型,上下文窗口从 8K 卷到 128K,甚至百万级别(如 Gemini 1.5 Pro)。但如果你用过早期的…...

如何用3个简单步骤神奇掌握浏览器视频下载魔法

如何用3个简单步骤神奇掌握浏览器视频下载魔法 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过这样的情况:在网上看到…...

国产替代之2SK3821-E与VBL1104N参数对比报告

N沟道功率MOSFET参数对比分析报告一、产品概述2SK3821-E:安森美(onsemi)N沟道硅MOSFET,耐压100V,具备低导通电阻、4V驱动和超高速开关能力,保证雪崩耐量。适用于通用开关、电机驱动、DC/DC转换器等应用。VB…...

从零开始做 TikTok,2026 年最新实操攻略

很多朋友私信问我,想做 TikTok 但不知道怎么入门。这里我整理了一套完整的操作流程,按步骤来就行。### 🔑 为什么选择 TikTok 平台? 1. 海量海外用户,覆盖全球主要市场 2. 新号冷启动难度低,内容即流量 3. …...

Unity工业数字孪生实战:用S7.NET高效读写西门子PLC数据(避坑Read方法)

Unity工业数字孪生性能优化:S7.NET高效读写西门子PLC数据实战 在工业数字孪生项目中,实时数据同步是系统成败的关键。想象一下,当你精心构建的虚拟产线模型因为7秒的数据延迟而失去价值,这种体验对任何开发者来说都是噩梦。本文将…...

2026年怎么部署Hermes/OpenClaw?腾讯云环境搭建及token Plan教程

2026年怎么部署Hermes/OpenClaw?腾讯云环境搭建及token Plan教程。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗&#…...

Cursor Pro破解工具:如何永久免费使用AI编程助手?

Cursor Pro破解工具:如何永久免费使用AI编程助手? 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached y…...

Python字典update()踩坑实录:为什么你的列表更新总报错‘length 1; 2 is required’?

Python字典update()方法深度解析:如何避免键值对长度错误 1. 问题现象与常见场景 最近在Stack Overflow上看到一个高频问题:为什么使用update()方法更新字典时,系统会抛出ValueError: dictionary update sequence element #0 has length 1; 2…...

如何永久解决IDM激活弹窗:开源脚本完整使用指南

如何永久解决IDM激活弹窗:开源脚本完整使用指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&#xff…...

免费多语言编程学习资源大集合:含书籍、课程、播客,点击即享!

资源查找 你可以在 https://ebookfoundation.github.io/free-programming-books-search/ 搜索该列表。此页面以易于阅读的网站形式呈现,点击即可访问。 资源简介 该列表最初是 StackOverflow "免费编程书籍列表"的复刻版本,由 Karan Bhangui 和…...

曦智科技港股上市涨幅383%,低调沂景资本背后竟是400亿身家山东大亨!

曦智科技上市成现象级IPO今年港股IPO首日涨幅最大的公司是刚刚上市的曦智科技。截至收盘,曦智股价大涨383%,市值飙升至814亿港元,成为上半年的现象级IPO。“麻省理工物理学博士”“价值1亿的Nature论文”,天才科学家沈亦晨的创业故…...

模型部署2___踝关节解算1

代码参考:https://github.com/Roboparty/atom01_deploy/tree/main 代码解读: //////********************inverse kinematics*****************////// InsKinematicsResult Decouple::inverse_kinematics(double q_roll,double q_pitch, bool leftLegF…...

如何彻底解决多语言应用兼容性问题:Locale Remulator终极配置指南

如何彻底解决多语言应用兼容性问题:Locale Remulator终极配置指南 【免费下载链接】Locale_Remulator System Region and Language Simulator. 项目地址: https://gitcode.com/gh_mirrors/lo/Locale_Remulator Locale Remulator是一款基于Detours技术的系统区…...

YOLO Face检测解决方案:从技术瓶颈到商业价值的高效转化

YOLO Face检测解决方案:从技术瓶颈到商业价值的高效转化 【免费下载链接】yolo-face YOLO Face 🚀 in PyTorch 项目地址: https://gitcode.com/gh_mirrors/yo/yolo-face 面对复杂场景下的人脸检测需求,技术决策者常常陷入两难&#xf…...

合同管理系统:解决合同档案杂乱无章,检索效率低的核心痛点

在企业日常运营中,合同作为业务往来的核心凭证,贯穿合作全流程。但多数企业仍被合同档案杂乱无章、检索效率低下的问题困扰:纸质合同堆积如山、电子文件散落在不同设备,找一份合同翻遍档案柜耗时几小时,甚至出现版本混…...

【flutter for open harmony】第三方库Flutter 鸿蒙版 密码生成器 实战指南(适配 1.0.0)✨

Flutter实战:开源鸿蒙密码生成器组件 Flutter 三方库 cached_network_image 的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net 本文详细介绍如何在Flutter鸿蒙应用中实现一个功能完善的密码生成器&#…...

信号量(二进制/计数)

二进制信号量定义: #include "semphr.h" // SemaphoreHandle_t // 二进制信号量(Binary Semaphore) SemaphoreHandle_t xBinarySemaphore; void vTaskA(void *pvParameters) {while(1) {// 获取信号量if(xSemaphoreTake(xBinarySem…...

less-1 union 注入

注入类型判断--推测字段数量--可显字段--获取数据库输入?id1测试有回显证明是get参数输入?id1语句闭合&#xff0c;后报错&#xff0c;证明后台的mysql语句可能是 select * from <表明> where id1 LIMIT 0,1 ... &#xff0c;输入?id1 -- 把后面的 注释掉不执行id1 后…...

3种创新方案永久告别IDM激活烦恼:从原理到实践的完整指南

3种创新方案永久告别IDM激活烦恼&#xff1a;从原理到实践的完整指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager&#xff08;IDM…...

RAG(三)检索(3)混合检索

一、步骤 混合检索&#xff08;Hybrid Retrieval&#xff09;是将多种检索方法&#xff08;通常是基于关键词的稀疏检索和基于向量的语义检索&#xff09;进行组合&#xff0c;通过多路召回和统一排序来提升检索效果。 dense&#xff1a;向量语义检索&#xff0c;擅长“意思相…...

py-webrtcvad终极指南:Python语音活动检测实战技巧大揭秘

py-webrtcvad终极指南&#xff1a;Python语音活动检测实战技巧大揭秘 【免费下载链接】py-webrtcvad Python interface to the WebRTC Voice Activity Detector 项目地址: https://gitcode.com/gh_mirrors/py/py-webrtcvad py-webrtcvad 是Google WebRTC项目中语音活动…...

吃透 Wireshark!全网超详细抓包 + 协议分析实战指南,小白也能快速上手

各位网络安全的小伙伴们&#xff0c;还在对着枯燥的课本和晦涩的官方文档头疼吗&#xff1f;今天&#xff0c;就让我这位在网络安全圈摸爬滚打多年的老司机&#xff0c;带你玩转Wireshark&#xff0c;保证你看完这篇&#xff0c;抓包分析技能直接起飞&#xff01; Wireshark&a…...

5分钟掌握Semi-Utils:开源照片水印自动化解决方案深度解析

5分钟掌握Semi-Utils&#xff1a;开源照片水印自动化解决方案深度解析 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具&#xff0c;后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 项目价值定位与技术哲学 Se…...

如何5分钟上手QtScrcpy:Android设备跨平台投屏与键鼠控制完全指南

如何5分钟上手QtScrcpy&#xff1a;Android设备跨平台投屏与键鼠控制完全指南 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ra…...

BongoCat终极指南:如何让你的桌面猫咪活起来

BongoCat终极指南&#xff1a;如何让你的桌面猫咪活起来 【免费下载链接】BongoCat &#x1f431; 跨平台互动桌宠 BongoCat&#xff0c;为桌面增添乐趣&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 想象一下&#xff0c;当你敲击键盘时&#…...

别再只会用fillna了!Pandas数据预处理实战:缺失值、离散化、归一化与相关性分析保姆级教程

Pandas数据预处理实战&#xff1a;从缺失值处理到特征工程的完整指南 当你面对一个来自真实业务场景的脏数据集时&#xff0c;是否经常感到无从下手&#xff1f;数据预处理占据了数据科学项目80%的工作量&#xff0c;而Pandas作为Python生态中最强大的数据处理工具&#xff0c;…...

Markdown Viewer:5分钟告别浏览器原生Markdown阅读困境的终极解决方案

Markdown Viewer&#xff1a;5分钟告别浏览器原生Markdown阅读困境的终极解决方案 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否曾在浏览器中打开一个Markdown文件&#…...

2026 湖南智慧票务系统公司推荐榜

随着湖南文旅产业高质量发展&#xff0c;全省 A 级景区及文博场馆数字化改造全面铺开&#xff0c;智慧票务作为景区数字化的核心入口&#xff0c;需求持续攀升。本次榜单综合系统技术成熟度、项目落地数量、运行稳定性、本地化服务能力及售后响应速度五大客观维度&#xff0c;筛…...

PHP安全那些坑:从PolarCTF靶场看RCE绕过与变量覆盖的防御之道

PHP安全实战&#xff1a;从CTF靶场解析RCE与变量覆盖的防御策略 在2023年OWASP发布的十大Web应用安全风险中&#xff0c;注入类漏洞依然高居榜首。作为占据全球78%网站服务端的语言&#xff0c;PHP的代码安全问题直接影响着数百万线上业务。上周在审查某金融平台代码时&#xf…...

百度文库免费获取工具终极指南:三步告别付费墙,轻松保存任何文档

百度文库免费获取工具终极指南&#xff1a;三步告别付费墙&#xff0c;轻松保存任何文档 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 还在为百度文库的付费文档而烦恼吗&#xff1f;每次找到心…...