尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
详细讲解 FlashDecoding 与 FlashDecoding+ 的原理
1. 铺垫背景Decode 阶段标准 FlashAttention 的致命瓶颈在 Prefill 阶段Query 的序列长度NQN_{Q}NQ​很大如 4096可以很好地利用 GPU 的 Tensor Core 并行计算但在 Decode 阶段Query 形状为 [B,1,H,D](Batch Size B序列长度 1Head 数 H维度 D)\text{Query 形状为 } [B, 1, H, D] \quad (\text{Batch Size } B \text{序列长度 } 1 \text{Head 数 } H \text{维度 } D)Query形状为[B,1,H,D](Batch SizeB序列长度1Head数H维度D)此时QQQ只有1 个 Token但它需要与历史 KV Cache长度NKVN_{KV}NKV​可能为 128k计算 Attention。标准 FlashAttention 在 Decode 阶段的并发危机GPU 算力饿死并行维度受限Parallelism Bound标准 FlashAttention 的并行粒度是按Batch Size (BBB)×\times×Heads (HHH)来划分 Thread Blocks 的。假设场景推理时B1,H32B1, H32B1,H32整个 GPU 只有1×32321 \times 32 321×3232个独立的并行任务。物理后果一块 H100/A100 显卡有100 个 SMStreaming Multiprocessor只有 32 个任务意味着只有 32 个 SM 在干活剩下的 70 个 SM 完全闲置空转极度的 Memory-Bound内存带宽瓶颈单个线程块需要沿着 128k 长的 KV Cache串行Sequential做循环 Tiling 累加。GPU 的内存带宽被长序列拉爆而算力利用率Occupancy Tensor Core Utilization低至可怜的 5%~10%。核心矛盾KV Cache 沿着 Sequence 维度极长但标准 FlashAttention不敢对 KV Cache / Sequence 维度做跨 SM 的并行因为最后一个 Token 的 Softmax 需要全局的最大值mmm和分母ddd2. FlashDecoding 核心原理 Sequence 维度的跨 SM 拆分FlashDecoding 的核心破局点一句话总结“利用 Online Softmax 的归一化数学性质强制对 KV Cache 的 Sequence 维度做切块Split KV扔给不同的 SM 并行计算最后做一次快速归约Reduction”[ 标准 FlashAttention (Decode 阶段) ] SM 0 ─── 处理 Batch 1, Head 1 (串行遍历 128k 全量 KV Cache......) ─── 输出 SM 1 ─── 处理 Batch 1, Head 2 (串行遍历 128k 全量 KV Cache......) ─── 输出 ... (其余 70 个 SM 闲置) [ FlashDecoding (KV 序列拆分) ] 将 128k KV Cache 切分为 16 个 Slices (每个 8k): SM 0 ─── 处理 Slice 0 (0~8k) ─── 输出局部 (O_0, m_0, d_0) ┐ SM 1 ─── 处理 Slice 1 (8k~16k) ─── 输出局部 (O_1, m_1, d_1) ├── 第二阶段: 极轻量级 Tree-Reduction ─── 最终 O ... │ (利用 Online Softmax 跨 Block 融合) SM 15 ─── 处理 Slice 15 (120k~) ─── 输出局部 (O_15, m_15, d_15)┘FlashDecoding 的两阶段执行 Pipeline阶段一Split-KV 跨 SM 并行计算Map 阶段切分策略除了按B×HB \times HB×H切分外增加一个KV Sequence 拆分因子KnumK_{num}Knum​。比如把NKV128kN_{KV}128\text{k}NKV​128k拆分为 16 个小切片Slices。并行任务数总并行任务数增加为B×H×KnumB \times H \times K_{num}B×H×Knum​例如1×32×165121 \times 32 \times 16 5121×32×16512。所有 SM 被瞬间塞满SM 片上计算每个 SM 处理属于自己的小 KV 切片在片上 SRAM 利用标准 FlashAttention 逻辑计算输出 3 个局部状态局部未归一化输出向量O~i\tilde{O}_iO~i​局部最大值mim_imi​局部分母累加和did_idi​将这 3 个极小的局部中间结果写入 Global Memory显存占用极微小仅为O(B×H×Knum×D)O(B \times H \times K_{num} \times D)O(B×H×Knum​×D)。阶段二跨 Block 快速归约Tree-Reduction 阶段发射一个极小的 Reduction Kernel。重新利用Online Softmax 的校正因子推导mglobalmax⁡(m1,m2,…,mk)m_{global} \max(m_1, m_2, \dots, m_k)mglobal​max(m1​,m2​,…,mk​)αiemi−mglobal\alpha_i e^{m_i - m_{global}}αi​emi​−mglobal​dglobal∑iαi⋅did_{global} \sum_{i} \alpha_i \cdot d_idglobal​i∑​αi​⋅di​Ofinal∑iαi⋅O~idglobalO_{final} \frac{\sum_{i} \alpha_i \cdot \tilde{O}_i}{d_{global}}Ofinal​dglobal​∑i​αi​⋅O~i​​耗时因为KnumK_{num}Knum​很小如 16 或 32归约计算量极小耗时几乎接近 0 毫秒3. FlashDecoding 的进阶突破异步与动态自适应FlashDecoding 虽然解决了 SM 占不满的问题但在工业级实际部署中仍有两个痛点固定 Split 粒度引发的负载不均与 Overhead对于短序列过度 Split 导致的 Reduction 阶段开销反而侵蚀了收益。Synchronized Barrier同步屏障开销阶段一Map与阶段二Reduce之间需要一个 Global Barrier同步所有 SM。百度与学术界等提出的FlashDecoding对此进行了深度重构与优化[ FlashDecoding 架构优化 ] │ ┌─────────────────────────────────┴─────────────────────────────────┐ ▼ ▼ 【动态 Split-KV 决策树】 【Unified Kernel 与 Asynchronous Reduction】 根据 (Batch, Head, SeqLen, Hardware SM Count) 消除独立的 Reduction Kernel 动态求解最优 Split 块数 K_num 利用 Tensor Core 与 Shared Mem 异步流水线FlashDecoding 的三大核心技术突破动态自适应 Split 策略Dynamic Load-BalancingFlashDecoding 在 Runtime 引入了一个超轻量级的代价模型Cost Model。根据当前请求的BBB、序列长度NKVN_{KV}NKV​以及目标 GPU 的 SM 物理数量动态计算出能恰好填满 SM 的最优切分块数KnumK_{num}Knum​。短序列不切或少切超长序列大幅切彻底避免了“为了切而切”的调度 Overhead。异步 Reduction 与 Kernel 融合Unified Kernel / Asynchronous ReductionFlashDecoding 将 Map 与 Reduce 逻辑融合成单个 CUDA Kernel。利用 GPU 的Atomic Operations原子操作或 SM 间的Grid-Level Barrier / Asymmetric Synchronization先算完的 SM 可以直接异步参与部分归约计算进一步消除了跨 Kernel 发射与全局同步的开销。针对 Flat Head / GQAGrouped-Query Attention的特化优化现代大模型如 LLaMA-3、Mistral广泛采用 GQA如 8 个 KV Head 对应 32 个 Query Head。FlashDecoding 针对 GQA 的 KV Cache 共享特性做成了专门的KV-Reused Layout 优化大幅提升了 Shared Memory 缓存命中率。4. 面试高频对比FlashAttention vs FlashDecoding vs FlashDecoding维维度Standard FlashAttention (V1/V2)FlashDecodingFlashDecoding主攻阶段Prefill 阶段长 Q长 K/VDecode 阶段短 Q超长 K/VDecode 阶段全场景/动态长上下文并行维度B×HB \times HB×H(Batch×\times×Heads)B×H×KnumB \times H \times K_{num}B×H×Knum​(引入 KV Sequence 维度)B×H×Dynamic(Knum)B \times H \times \text{Dynamic}(K_{num})B×H×Dynamic(Knum​)(自适应 GQA 特化)SM 利用率Decode 阶段低低于 10%Decode 阶段极高接近 100%极致全 Sequence 长度下保持 90%计算流程单 Kernel 串行 Tiling 累加两阶段Map 切片 Tree-Reduce动态 Unified 单 Kernel 异步归约核心数学片上 Online Softmax跨 Block / 跨 SM 的 Online Softmax异步原子归约 动态代价模型5. 复盘背诵口诀FlashDecoding 核心突破“Decode 阶段 Q 只有一SM 闲置算力低切分 KV 跨 SM 跑局部状态存下来Online Softmax 做归约长上下文速度飞。”一句话精炼“FlashDecoding 突破了 Decode 阶段按 Batch/Head 并行的硬性限制利用 Online Softmax 的可按块缩放特性将KV Cache 序列Sequence维度切块分发给多个 SM 并行计算最后通过毫秒级 Tree-Reduction 汇总彻底拉满 GPU 算力利用率。”
RELATED

相关推荐

C++ vector多维初始化:从一维到三维的内存布局与性能优化

C++ vector多维初始化:从一维到三维的内存布局与性能优化

1. 项目概述:从一维到多维,理解C vector的初始化艺术在C的日常开发中,std::vector绝对是使用频率最高的STL容器,没有之一。它完美替代了原始的C风格数组,提供了动态大小、自动内存管理等诸多便利。但很多朋友&#xff…

📅 2026/9/5 10:45:28
Display Driver Uninstaller深度解析:显卡驱动彻底清理的完整技术指南

Display Driver Uninstaller深度解析:显卡驱动彻底清理的完整技术指南

Display Driver Uninstaller深度解析:显卡驱动彻底清理的完整技术指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drive…

📅 2026/10/6 3:16:41
从单细胞图谱到组织原位观察:PCF如何承接scRNA-seq结果?

从单细胞图谱到组织原位观察:PCF如何承接scRNA-seq结果?

在肿瘤微环境研究中,单细胞RNA测序(scRNA-seq)已成为解析细胞异质性的重要工具。它能够在转录层面系统识别组织中的不同细胞类型和分子状态,为后续研究提供候选标志物。然而,单细胞测序在解离过程中不可避免地丢失了细…

📅 2026/9/17 13:43:33
MORE NEWS

更多资讯

📰

CCNP PDF课程资料学习指南:从理论基础到实验验证的网络工程师进阶路线

简介:思科CCNP课程.pdf是一份根据培训机构内部PPT整理而成的CCNP学习笔记,作者边看边记,适合备考CCNP或负责企业级网络设计、实施与排障的网络工程师。内容覆盖TCP/IP协议回顾、VLAN/Trunk/VTP部署、生成树STP与RSTP、二层与三层交换、链路聚…

📰

基于C#和MySQL的房屋租赁管理系统课程设计完整资源

简介:基于C#与MySQL的房屋租赁管理系统完整项目包,面向计算机、软件工程、通信工程等专业学生,适合作为课程设计或毕业设计参考,也适合有一定C#基础的学习者通过完整项目理解业务系统开发流程。压缩包共69个文件,约12.…

📰

CNC模具加工全流程实战:从开粗到精加工的工艺路线与参数详解

1. 从一张报废的模仁说起:CNC模具加工到底难在哪干了十几年CNC,我见过太多人把模具加工想简单了。很多人觉得,不就是把一块钢料按图纸铣出来吗?三轴机床跑个刀路,尺寸到位就完事了。但真正在模具厂待过的人都知道&…

📰

Java物联网通用驱动包:统一Modbus、Bacnet、OPC-UA协议对接

简介:这是一套基于Java开发的物联网IOT通用驱动包源码,面向需要快速集成多种工业通信协议的Java开发者、系统集成商及物联网项目团队,帮助解决Modbus-TCP、Bacnet、OPC-UA等协议接入繁琐、重复造轮子的问题。资源包共76个文件,约1…

📰

RTThread HardFault定位实战:寄存器分析与栈回溯方法

1. 从一次深夜调试说起:为什么HardFault定位值得单独拿出来讲搞嵌入式的人大概都有过这种经历:板子跑着跑着突然就不动了,串口没有任何输出,调试器一连上发现程序停在了一个叫HardFault_Handler的死循环里。这时候你盯着屏幕&…

📰

Java Web文件夹递归上传与SM4加密落盘:从JSP到Servlet完整实现

接到过几个类似的需求,都是内网里的文件管理系统,要求挺一致:Java后台、JSP做页面、用户能直接在网页上选整个文件夹,把里面多层级的目录结构和文件一次性传上来,落盘后文件还不能是明文的。这个“文件夹递归上传 服务…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬