已关闭
[Usage]: aclGraph图模式整网采集Profile,kernel_details.csv中的算子名和Shape信息如何与aclnn算子接口文档对应 #37
qian-chenxi创建于  3月26日关闭于  4月9日
qian-chenxi
3月26日 创建

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

环境信息

- 操作系统:OpenEuler aarch64
- 昇腾硬件信息:A3
- CANN软件版本:CANN商用版 8.5.0
- 安装的对应软件版本

使用场景及问题

背景

客户期望使用msprof工具在vllm-ascend推理引擎运行大模型推理时采集Profile信息,通过构建一个单算子执行用例来分析某个算子的性能情况。因此预期msprof采集解析后的 kernel_details.csv 文件中能够显示正确的算子名,以及整网执行到该算子时的入参shape信息,方便构建单算子用例。此外,算子文档对外开放的最底层接口为aclnn层级的接口。

现状

在当前CANN商用版8.5.0版本下,以一个attention算子为例,采集到的信息如下(部分,来自于解析到的 kernel_details.csv):

Device_id Model ID Task ID Stream ID Name Type OP State Accelerator Core Start Time(us) Duration(us) Wait Time(us) Block Dim Mix Block Dim HF32 Eligible Input Shapes Input Data Types Input Formats Output Shapes Output Data Types Output Formats
0 2 36 48 FusedInferAttentionScore_3b093497fc536d61a77a7a3293a524da_5000000000010200203 FusedInferAttentionScore static MIX_AIC 1774442667917160.078 50.998 1.820000 24 0 NO "16,4,128;12550,128,128;12550,128,128;;2048,2048;16;16;;;;;;;;16,512;;;;;;;;;;;;;;;;" DT_BF16;DT_BF16;DT_BF16;DT_UNDEFINED;INT8;INT64;INT64;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;INT32;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED;DT_UNDEFINED ND;ND;ND;NULL;ND;ND;ND;NULL;NULL;NULL;NULL;NULL;NULL;NULL;ND;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL;NULL "16,4,128;" DT_BF16;FLOAT ND;ND

在msprof的文档中实际上并没有关于 kernel_details.csv 的介绍,从内容上看最接近的文件是 op_summary_*.csv。其中关于 Name, Input Shapes 字段的解释仅为简单的 “算子名称。” 和 “算子的输入维度。task_time为l0时,不采集该字段,显示为N/A。”

疑问1:图模式下如何将采集到的 Name 对应到具体 aclnn算子接口

对于单算子测试来说,客户感知到的是 aclnn算子接口。Fused Infer Attention当前CANN 8.5.0提供了4个版本的aclnn接口,如下图所示。那么,应当如何将上述 Name (FusedInferAttentionScore_3b093497fc536d61a77a7a3293a524da_5000000000010200203) 对应到这些aclnn接口?

image.png

根据我个人的探索,发现图模式下的Name大概率来自于算子编译后产生的.o的名字,如下图所示,能找到对应的文件,但msprof解析后还拼接了一段类似TilingKey的字段上去。

image.png

针对疑问1,请问:

  • 图模式下工具是否有能力得到aclnn的算子接口,并展示在相关列当中。Issue #8 对应的PR #40是否能够解决该问题?
  • 如果当前图模式下图模式无法直接拿到aclnn算子接口名,上述我的探索是否正确?可否在相应的Doc中补充相关信息,引导客户映射到具体的aclnn接口名?

疑问2:FIA算子的Shape信息如何与aclnn接口完成对应

16,4,128;12550,128,128;12550,128,128;;2048,2048;16;16;;;;;;;;16,512;;;;;;;;;;;;;;;; 这里采集到的FIA算子Input Shape一共有30个分号,根据我的理解代表了有31个入参,这里想咨询一下这里采集到的入参是aclnn接口的入参吗?如果是比aclnn更底层的接口,应该如何去找?希望可以在文档中补充相关信息。

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

likedislike
Mrtutu
Mrtutu成员
3月26日 评论:

👋 您好,欢迎向 MindStudio msprof 提交 Issue!
我们已收到您的反馈,感谢你对开源社区的支持。🎉

📅处理时效: 维护团队将在24小时内 查看并回复您的问题(工作日)。
🔍自助查询: 在等待期间,建议您先查阅以下资料,可能已有解决方案:

📖 MindStudio msprof官方文档
📝 贡献者指南

请确保 Issue 描述清晰,包含复现步骤和日志,这将帮助我们更快定位问题。谢谢!

likedislike
ascend-robotascend-robot成员
3月26日 添加了label:usage
MrtutuMrtutu成员
3月27日 将 Seanesmhxocism 设为负责人
Wangang Yu
Wangang Yu成员
3月27日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
3月27日 添加了label:triaged
wangzixuan成员
3月27日 评论:

您好,有几个信息和您同步一下:
1、算子名称相关
①当前阶段您拿到的算子名称为kernelName,是算子侧编译后,基于算子类型和tiling key得到的具备唯一性的算子名。该名称主要用于内部的算子类型标识。
而您所谓的aclnn接口名,则为aclnn框架对于算子的命名,他的命名规则当前为:aclnn算子接口名+kernelName前半部分 组成。该命名定义为opName。
在profiling相关数据中,优先显示算子的opName,次选kernelName。

②当前使用的包版本为CANN商用版8.5.0,业务执行模式为ACLGraph场景。
在CANN8.5.0版本上,配合torch_npu的8.5.0版本,已经具备在ACLGraph场景获取算子shape的能力,但依然呈现kernelName。建议尝试配套版本,如果依然无法获取相关信息,可以留言提供相关PROF数据做进一步问题定位。

③您提供的pr和对应issue是为了解决另一个问题做的。当前提供的kernelName并不是完全无用,当前在算子侧,“静态算子”特性,依赖kernelName命名做呈现(静态算子的kernelName会以static命名)。为避免用户在切换上述CANN8.5.0新包后找不到相关标识,我们在当前阶段做了新的特性修复。
I 在CANN8.5.0上优先保留kernelName命名,确保前后版本兼容
II 在新版本上,在task-time.csv交付件中提供kernelName命名,并还原op_summary中的opName。后续用户可在task-time.csv中获取算子的kernelName。

④当前CANN8.5.0配套版本并不具备呈现opName的能力。想将kernelName再映射回aclnn命名存在一定困难。如果真有必要,可取用当前社区pr40后的msprof-profiler包进行安装,重新解析数据即可使用新版本特性。

2、相关算子tensor信息
当前算子调用层面是Pytorch框架层面的接口,该接口内部会调用CANN内部算子。对于msprof工具而言,采集获取的tensor信息,均为CANN内部的接口信息。即呈现的tensor内容并不完全和Pytorch层面的接口一致。如果有相关必要,建议联系Pytorch社区做相关问题跟踪。明确在参数传递过程有什么转换。

likedislike
Mrtutu
Mrtutu成员
3月30日 评论:

/label add pending

likedislike
ascend-robotascend-robot成员
3月30日 添加了label:pending
Wwangzixuan成员
4月9日 issue状态由 TODO 改变为 DONE
Wwangzixuan成员
4月9日 关闭了 issue