Closed
[Bug-Report|缺陷反馈]: aclnnQkvRmsNormRopeCacheWithKScale 的 L2_DFX_PHASE_1 宏入参与接口参数不一致 #5464
liuhanwen8Add on  Sep 20Closed at  Sep 30
liuhanwen8
liuhanwen8
Sep 20 Create

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

aclnnQkvRmsNormRopeCacheWithKScaleGetWorkspaceSize 中的 L2_DFX_PHASE_1 宏入参与该接口的参数列表不一致,共两处:

  1. DFX_IN 传入的是局部变量名,而非接口形参名:接口形参为 layoutQkv / layoutQOut,但宏中传的是函数内局部变量 layoutQkvAttr / layoutQOutAttr(缺失 layoutQkv、layoutQOut;多余 layoutQkvAttr、layoutQOutAttr)。
  2. DFX_OUT 各参数的相对顺序与接口参数列表不符:接口签名中三个 in-place 输出 kCacheRef / vCacheRef / kScaleCacheRef 位于 qOut / qScaleOptional 之前,而宏中顺序为 qOut, qScaleOptional, kCacheRef, vCacheRef, kScaleCacheRef。

接口签名(去掉框架参数 workspaceSize / executor):
qkv, qGamma, kGamma, cosSin, slotMapping, kCacheRef, vCacheRef, kScaleCacheRef, queryStartLocOptional, seqLensOptional, rotationOptional, vScaleOptional, mropePositionOptional, headNums, layoutQkv, layoutQOut, epsilon, mropeSectionOptional, qQuantMode, kQuantMode, qOut, qScaleOptional

现状代码(posembedding/qkv_rms_norm_rope_cache_with_k_scale/op_host/op_api/aclnn_qkv_rms_norm_rope_cache_with_k_scale.cpp:273-282):

    const char *layoutQkvAttr = QkvRmsNormRopeCacheWithKScale::GetLayoutQkvOrDefault(layoutQkv);
    const char *layoutQOutAttr = QkvRmsNormRopeCacheWithKScale::GetLayoutQOutOrDefault(layoutQOut);
    ...
    L2_DFX_PHASE_1(
        aclnnQkvRmsNormRopeCacheWithKScale,
        DFX_IN(qkv, qGamma, kGamma, cosSin, slotMapping, kCacheRef, vCacheRef, kScaleCacheRef, queryStartLocOptional,
               seqLensOptional, rotationOptional, vScaleOptional, mropePositionOptional, headNums, layoutQkvAttr,
               layoutQOutAttr, epsilon, mropeSectionOptional, qQuantMode, kQuantMode),
        DFX_OUT(qOut, qScaleOptional, kCacheRef, vCacheRef, kScaleCacheRef));

L2_DFX_PHASE_1(APIName, IN, OUT) 的入参应与 L2 接口的参数列表严格一致(名称与相对顺序)。当前写法下,DFX 上报/日志中的参数名与接口对不上(layoutQkvAttr / layoutQOutAttr 并非接口参数),且 OUT 中 in-place 输出与纯输出的先后次序也与接口错位。

Environment / 环境信息 (Mandatory / 必填)

  • 昇腾硬件型号:不涉及(静态代码审查,无需上板复现)
  • CANN 版本:master 分支(2026-09-20 核验)
  • Python 版本:不涉及

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. 拉取 master 分支,打开 posembedding/qkv_rms_norm_rope_cache_with_k_scale/op_host/op_api/aclnn_qkv_rms_norm_rope_cache_with_k_scale.cpp;
  2. 定位 aclnnQkvRmsNormRopeCacheWithKScaleGetWorkspaceSize 内的 L2_DFX_PHASE_1 宏(:277);
  3. 将 DFX_IN / DFX_OUT 的实参名称与相对顺序,与该函数签名去掉 workspaceSize / executor 后的参数名称、顺序逐一比对(亦可对照 docs/aclnnQkvRmsNormRopeCacheWithKScale.md 的「函数原型」小节);
  4. 结果:DFX_IN 少 layoutQkv / layoutQOut、多 layoutQkvAttr / layoutQOutAttr;DFX_OUT 的 5 个实参相对顺序与签名不符。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

宏实参的名称与相对顺序与接口参数列表严格一致:

    L2_DFX_PHASE_1(
        aclnnQkvRmsNormRopeCacheWithKScale,
        DFX_IN(qkv, qGamma, kGamma, cosSin, slotMapping, kCacheRef, vCacheRef, kScaleCacheRef, queryStartLocOptional,
               seqLensOptional, rotationOptional, vScaleOptional, mropePositionOptional, headNums, layoutQkv,
               layoutQOut, epsilon, mropeSectionOptional, qQuantMode, kQuantMode),
        DFX_OUT(kCacheRef, vCacheRef, kScaleCacheRef, qOut, qScaleOptional));

说明:layoutQkvAttr / layoutQOutAttr 这两个局部变量仍可继续用于其后的 MakeParams 调用(保留现有时序与默认值兜底逻辑),本处只需修正宏实参;DFX_OUT 仅调整顺序,不增删实参。

无运行时日志;上述静态审查所见代码即为证据(文件、行号与宏原文已在上文给出)。

Special notes for this issue/备注 (Optional / 选填)

本点位为共性工单 #4930(「28处 L2_DFX_PHASE_1 宏校验缺失参数或顺序不对」)中的第 26 项,按算子拆出单独跟踪,便于独立修复与验证;与 #4930 同源,非新发现。该文件近期因新增 kQuantMode 入参有过改动,但该宏未同步修正。

likedislike
liuhanwen8liuhanwen8
Sep 20 Added label: bug-report
weihao18Collaborators
Sep 20 Comments:

/assign @luwei_1104

likedislike
CANN-robotCANN-robotCollaborators
Sep 20 Assign luwei_1104 as responsible person
Wwangxun21Collaborators
Sep 29 Assign renzetao as responsible person
Wwangxun21Collaborators
Sep 29 Removed responsible person luwei_1104
CANN-robotCANN-robotCollaborators
Sep 30 Close issue
CANN-robotCANN-robotCollaborators
Sep 30 Added label: resolved
周云飞
周云飞Collaborators
26 days ago Comments:

固定快照对应 PR #13224 的实际 diff 已合入 master:L2_DFX_PHASE_1 的 DFX_IN 改为接口对应的输入形参名,并将宏调用前移到默认属性解析之前。DFX_OUT 顺序保持 qOut, qScaleOptional, kCacheRef, vCacheRef, kScaleCacheRef,该 PR 没有修改输出顺序。这里只说明 DFX 记录参数和调用位置的变化,不推断算子计算或输出顺序行为变化。

核对依据:#13224(已合入 master);源码位置1。

likedislike