已关闭
[Bug]: profiling计算attention算子FLOPs时需要考虑实际序列长度可能为0,head_num不一致的情况 #2608
fanglanyue创建于  7月3日关闭于  7月3日
fanglanyue
fanglanyue
7月3日 创建

在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。

⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:

  • API 令牌或密钥
  • 密码或身份验证凭证
  • 私有网址或接口地址
  • 个人或机密数据
  • ...

在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用 <TOKEN> 等占位符替代原有内容。

环境信息

例如:
- 操作系统
- 昇腾硬件信息
- CANN软件版本
- 安装的对应软件版本

🐛 问题描述

当前计算npu_fusion_attention时,默认q/k head_num一致,没有考虑到GQA场景,会raise error

WARNING:torch_npu.profiler._flops_hook:Failed to calculate FLOPs for npu_fusion_attention
Traceback (most recent call last):
  File "/root/miniconda3/envs/fly_mindspeed/lib/python3.10/site-packages/torch_npu/profiler/_flops_hook.py", line 138, in wrapper
    flops = flop_func(*args, **kwargs)
  File "/root/miniconda3/envs/fly_mindspeed/lib/python3.10/site-packages/torch_npu/profiler/_flops_formulas.py", line 36, in npu_fusion_attention_flops
    return _calculate_common_layout_flops(
  File "/root/miniconda3/envs/fly_mindspeed/lib/python3.10/site-packages/torch_npu/profiler/_flops_formulas.py", line 406, in _calculate_common_layout_flops
    _, _, k_s, k_d = _parse_dims(k_shape, input_layout, kv_heads)
  File "/root/miniconda3/envs/fly_mindspeed/lib/python3.10/site-packages/torch_npu/profiler/_flops_formulas.py", line 448, in _parse_dims
    return b, heads, s, _head_dim(h, heads)
  File "/root/miniconda3/envs/fly_mindspeed/lib/python3.10/site-packages/torch_npu/profiler/_flops_formulas.py", line 461, in _head_dim
    raise ValueError(
ValueError: Hidden size 512 must be divisible by the number of heads 28
 [2026-06-27 10:04:17] iteration        4/      10 | consumed samples:   

没有考虑到actual_seq_qlen累积序列长度转换为实际序列长度后,单个seq可能为0的场景,raise_error:

actual_seq_qlen and actual_seq_kvlen must contain valid cumulative lengths

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
ascend-robotascend-robot成员
7月3日 添加了label:bug
此处折叠了22条事件消息 查看更多
ascend-robotascend-robot成员
7月7日 关联了pull request:[sync] PR-40262: bugfix for profiler FLOPs when actual seq len can be zero