Flash-Attention中VarlenDynamicPersistentTileScheduler的工作原理解析
2025-05-13 17:52:01作者:姚月梅Lane
引言
在深度学习领域,注意力机制是Transformer架构的核心组件。Flash-Attention项目通过优化内存访问和计算模式,显著提升了注意力计算的效率。其中,VarlenDynamicPersistentTileScheduler作为关键调度器,负责处理变长序列的块调度问题。
调度器核心概念
VarlenDynamicPersistentTileScheduler的主要任务是高效地映射计算块索引(tile_idx)到具体的计算任务。这种映射需要考虑三个维度:
- 批次索引(bidb):表示输入数据中的不同序列
- 头索引(bidh):表示多头注意力中的不同注意力头
- 块索引(block):表示序列被划分成的计算块
工作原理详解
基本映射逻辑
当处理单一注意力头(num_heads=1)和单次分割(num_splits=1)的简单情况时,调度器的工作方式最为直观。例如:
- 序列1长度为160,块大小(kBlockM)为128 → 划分为2块
- 序列2长度为300 → 划分为3块
此时tile_idx的自然映射为:
- 0 → 序列0,块0
- 1 → 序列0,块1
- 2 → 序列1,块0
- 3 → 序列1,块1
- 4 → 序列1,块2
多维扩展
当引入多头注意力后,映射关系变得更加复杂。调度器采用了一种类似坐标转换的方法:
mh_block = block + bidh * num_m_blocks(bidb)
next_tile_idx = group_start_tile + mh_block + num_m_blocks_cumulative(b) * num_head
其中:
num_m_blocks(b)表示批次b中的块数量num_m_blocks_cumulative(b)是批次b之前所有批次的块数累加和
索引枚举方式
tile_idx实际上枚举了所有可能的(batch, head, block)组合,按照以下顺序:
- 固定batch=0,遍历所有head,对每个head遍历所有block
- 然后batch=1,同样遍历所有head和block
- 以此类推
这种枚举方式确保了计算的高效性和内存访问的局部性。
实现难点
该调度器的实现具有相当的复杂性,主要体现在:
- 不同批次的序列长度可能不同,导致每个批次的块数(num_m_blocks)不固定
- 需要维护前缀和(num_m_blocks_cumulative)来正确计算全局索引
- 多头注意力的引入增加了映射的维度
性能考量
这种设计的主要优势在于:
- 能够高效处理变长序列,无需填充(padding)
- 保持计算任务的连续性,提高缓存利用率
- 支持动态调度,适应不同的硬件配置
总结
Flash-Attention中的VarlenDynamicPersistentTileScheduler通过巧妙的索引映射机制,实现了对变长序列多头注意力计算的高效调度。理解其工作原理对于优化注意力计算性能、调试相关代码以及开发类似调度器都具有重要意义。该设计体现了在深度学习计算中平衡算法复杂度和执行效率的典型思路。
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
535
3.75 K
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
67
20
暂无简介
Dart
773
191
Ascend Extension for PyTorch
Python
343
406
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
886
596
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
23
0
React Native鸿蒙化仓库
JavaScript
303
355
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
336
178