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通过巧妙的索引映射机制,实现了对变长序列多头注意力计算的高效调度。理解其工作原理对于优化注意力计算性能、调试相关代码以及开发类似调度器都具有重要意义。该设计体现了在深度学习计算中平衡算法复杂度和执行效率的典型思路。
登录后查看全文
热门项目推荐
相关项目推荐
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C095
baihu-dataset异构数据集“白虎”正式开源——首批开放10w+条真实机器人动作数据,构建具身智能标准化训练基座。00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python058
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7GLM-4.7上线并开源。新版本面向Coding场景强化了编码能力、长程任务规划与工具协同,并在多项主流公开基准测试中取得开源模型中的领先表现。 目前,GLM-4.7已通过BigModel.cn提供API,并在z.ai全栈开发模式中上线Skills模块,支持多模态任务的统一规划与协作。Jinja00
AgentCPM-Explore没有万亿参数的算力堆砌,没有百万级数据的暴力灌入,清华大学自然语言处理实验室、中国人民大学、面壁智能与 OpenBMB 开源社区联合研发的 AgentCPM-Explore 智能体模型基于仅 4B 参数的模型,在深度探索类任务上取得同尺寸模型 SOTA、越级赶上甚至超越 8B 级 SOTA 模型、比肩部分 30B 级以上和闭源大模型的效果,真正让大模型的长程任务处理能力有望部署于端侧。Jinja00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
476
3.54 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
223
94
暂无简介
Dart
726
175
React Native鸿蒙化仓库
JavaScript
287
339
Ascend Extension for PyTorch
Python
284
317
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.27 K
701
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
10
1
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
849
441
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
65
19