已合并
flexattention: port flex attention overflow fixes to master #45274
a_knight创建于 8月25日
flexattention: port flex attention overflow fixes to master #45274
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 a_knight 的贡献)atomgit-bot
8月25日 评论:
8月25日 评论:
变更摘要
该 PR 将 flex attention 的溢出修复移植到最新 master:针对反向传播模板中索引计算可能发生的整数溢出,引入 INDEX_DTYPE(tl.int32/tl.int64)统一索引类型;同时对 dK/dV tasklist reduce 配置增加 UB 预算过滤,并将稀疏块与 tile 块的匹配从「相等」放宽为「整除」以支持子块(sub-block)遍历,从而修复大 shape 或非对齐块场景下的溢出/错误问题。
主要改动
- 索引溢出修复(
INDEX_DTYPE): 在flexattention_template.py中将tile_id、task_id及各类偏移计算(原.to(tl.int64))统一转换为INDEX_DTYPE,并在select_algorithm.py的NPUTritonTemplate中新增_write_index_dtype_define,允许 flex_attention 模板根据can_use_32bit_indexing选择tl.int32或tl.int64,避免大 shape 下索引溢出。 - dK/dV tasklist reduce 的 UB 预算过滤: 在
flex_attention.py新增_filter_dkdv_tasklist_reduce_configs,按npu_config.ub_size的固定比例计算 UB 预算并过滤BLOCK_N1/head dim 过大的配置;若无配置满足约束,则将tasklist_reduce_ub_safe置为 false 并禁用该图的 tasklist 代码生成。 - 子块(sub-block)支持:
flex_attention_config_generator.py将块匹配条件由block_m == sparse_q_block_size改为sparse_q_block_size % block_m == 0,模板中对应将静态断言改为整除判断,并通过SPARSE_Q_MULTIPLE/SPARSE_KV_MULTIPLE及kv_work_pos/kv_sub_block循环遍历稀疏 KV 块内的子块。 - dK/dV-only 任务数修正:
flex_attention_backward_dkdv_only_source中NUM_TASKS由NUM_KV_BLOCKS * ZKV * HKV修正为NUM_KV_BLOCKS * ZQ * HKV,同时相关地址偏移(q_adj1、do_adj1、off_chz1等)改用INDEX_DTYPE。


不准确?
ascend-robot
8月25日 评论:
8月25日 评论:
atomgit-bot
8月25日 评论:
8月25日 评论:
此处折叠了160条消息 查看更多
8月26日 添加了label:lgtm
8月26日 添加了label:approved
8月26日 合入了pull request
ascend-robot
8月26日 评论:
8月26日 评论:
流水线 pytorch_gitcode_PR_multiVersion#14513 [ commitID:ed38019e ] 已完成


【合入来源】
【修改方案】
【资料变更】
【接口变更】
【功能验证】
【CheckList】