已关闭
[Bug-Report] swin_transformer_ln_qkv_quant: Tiling无效方案返回SUCCESS + proto.h数据类型不一致 + 属性名拼写错误 + 文档描述错误 #2678
daishuangshuang创建于 5月26日关闭于 6月3日
huang-chuhong
5月26日 评论:
5月26日 评论:
/assign @yolic


5月26日 将 yolic 设为负责人
5月26日 issue类型由 任务 改变为 缺陷
yuning_chen
5月27日 评论:
5月27日 评论:
您好,感谢您的关注,问题会尽快修改合入


6月3日 关闭了 issue
6月3日 添加了label:resolved
6月8日 issue状态由 待办的 改变为 已完成
6月8日 添加了label:Accepted
一、问题描述(必填)
swin_transformer_ln_qkv_quant算子存在多个代码和文档缺陷,涵盖 Tiling 逻辑错误、接口声明与实现不一致、文档描述错误、属性名拼写错误等问题。问题1(P0)— Tiling 未找到合法方案时仍返回 GRAPH_SUCCESS
Tiling 代码第 500 行判断
(solutionFlag == true) && (lnSolutionFlag == true),但当条件不满足时,代码不会返回失败,而是跳出 switch 继续执行SetWorkSpace、SetBlockDim、SetTilingKey、SaveTilingData,最终返回GRAPH_SUCCESS。这意味着无效或未初始化的 tiling 数据被传给 kernel。ffn/swin_transformer_ln_qkv_quant/op_host/swin_transformer_ln_qkv_quant_tiling.cppif ((solutionFlag == true) && (lnSolutionFlag ==true)) { tilingData.mmInfo.set_mmSizeM(mSizePerLoop); // ... 设置 tiling 数据 } break; // 跳出 switch 后继续执行,无论 solutionFlag 是否为 true SwinTransformerLnQkvQuantSetWorkSpace(context); context->SetBlockDim(static_cast<int64_t>(blockNum)); SwinTransformerLnQkvQuantSetTilingKey(context); SwinTransformerLnQkvQuantSaveTilingData(context); return ge::GRAPH_SUCCESS;问题2(P0)— 不支持的 headNum 静默通过
当
headNum在TEMPLATE_MAP中找不到匹配时(如 headNum > 32),templateId被设为LN_INDEPENDT_MODE,但 switch 语句中没有处理该模式的 case,直接落入default: break;。tiling 数据未被设置但仍然返回GRAPH_SUCCESS。auto iter = TEMPLATE_MAP.find(headNum); templateId = (iter != TEMPLATE_MAP.end()) ? iter->second : ProcessMode::LN_INDEPENDT_MODE; // switch 中无 LN_INDEPENDT_MODE 的 case,落入 default: break;问题3(P0)— proto.h 数据类型与 def.cpp 严重不一致
proto.h 第 56-57 行 weight 声明为
DT_FLOAT16,bias 声明为DT_FLOAT16,但 def.cpp 中 weight 实际为DT_INT8,bias 实际为DT_INT32。第 31 行注释 bias 描述为 "float16",也与实际不符。ffn/swin_transformer_ln_qkv_quant/op_graph/swin_transformer_ln_qkv_quant_proto.h// proto.h(错误) .INPUT(weight, TensorType({DT_FLOAT16})) // 应为 DT_INT8 .INPUT(bias, TensorType({DT_FLOAT16})) // 应为 DT_INT32 // def.cpp(正确) .DataType({ge::DT_INT8}) // weight .DataType({ge::DT_INT32}) // bias问题4(P1)— README quantOffset 描述错误
README 第 89-93 行
quantOffset描述为 INT32 类型、维度[3*H],但 def.cpp 中实际为 FLOAT16 类型、维度[H]。ffn/swin_transformer_ln_qkv_quant/README.md问题5(P1)— aclnn 文档 epsilon 类型不一致
函数原型中 epsilon 参数类型为
double,但参数说明表格中数据类型列为float。ffn/swin_transformer_ln_qkv_quant/docs/aclnnSwinTransformerLnQkvQuant.md问题6(P1)— 属性名 h_win_szie 拼写错误
proto.h 中属性名
h_win_szie存在拼写错误,应为h_win_size。该拼写错误同时存在于注释(第 42 行)和REQUIRED_ATTR注册(第 69 行)中。ffn/swin_transformer_ln_qkv_quant/op_graph/swin_transformer_ln_qkv_quant_proto.h* @li h_win_szie: A required attribute, the type is int. Defaults to 7. \n .REQUIRED_ATTR(h_win_szie, Int) // 应为 h_win_size二、修复建议
solutionFlag && lnSolutionFlag检查,不满足时返回GRAPH_FAILED;TEMPLATE_MAP.find未命中时直接返回GRAPH_FAILED或增加对应处理分支TensorType({DT_INT8}),bias 改为TensorType({DT_INT32}),注释同步修正[H]h_win_szie统一改为h_win_size(注意同步更新 tiling.cpp 等引用处)三、影响范围
无效 tiling 数据传给 kernel 可能导致计算结果错误或运行时崩溃;proto.h 类型不一致会导致上层框架传参错误;文档错误会误导使用者。