Merge blocked
变更摘要
本 PR 是 norm_multiply_dropout 算子迁移系列(1/6)的前向实现,新增 norm_multiply_dropout_forward 的 op_host 与 op_kernel 目录,实现 LayerNorm + Multiply + Dropout 融合前向计算(ln_ret = LayerNorm(x) * weight + bias、ln_out = u * ln_ret、output = dropout(ln_out, dropout_ratio))。包含 tiling 数据结构、入参校验、tiling 计算与算子注册,以及基于 tilingKey 分发的 AscendC 向量 kernel;本 PR 不含构建接入,合入后暂不参与编译。
主要改动
- 算子定义与注册:新增
op_host/norm_multiply_dropout.cpp,通过OpDef注册NormMultiplyDropout,定义输入x/u/weight/bias/mask、输出output/mean/var及属性eps/dropout_ratio,并绑定InferShape、InferDataType、TilingFunc,同时注册ascend910b、ascend910_93及条件编译下的ascend950配置。 - 入参校验与 tiling 计算:在
TilingFunc中完成 shape 维度与一致性校验(x为 2 维且列数限定512/1024、weight/bias为 1 维且与x列对齐)、dtype 白名单校验(fp16/bf16/fp32,SUPPORT_950下剔除 fp32)、mask为uint8且元素数为x元素数的 1/8(无 dropout 时允许{1}占位)、eps取值[1e-10,1e-4]与dropout_ratio取值[0.0,1.0]的范围校验;随后按 UB 容量与行内存系数计算singleBlockRows、大小核行数分配,并写入 tiling 数据。 - tiling 数据结构与 tilingKey 模板参数:新增
norm_multiply_dropout_tiling.h定义NormMultiplyDropoutTilingData(bigCoreNum/littleCoreNum/avgCoreCalcRows/xRowCount/xColCount/singleBlockRows/useCoreNum/dropTmpMem/eps/dropoutRatio),并通过norm_multiply_dropout_tilingKey.h以ASCENDC_TPL_BOOL_DECL(isNeedDrop, 0, 1)声明模板参数,供 host 侧GET_TPL_TILING_KEY与 kernel 侧分发使用。 - AscendC 前向 kernel 实现:新增
op_kernel/norm_multiply_dropout.cpp,模板类kernels::NormMultiplyDropout<T, isNeedDrop>按核心偏移分行处理,非 fp32 输入经Cast升精度计算后回写原类型;实现均值/方差两次WholeReduceSum规约并输出mean、var,再完成标准化、仿射变换、u相乘与DropOut融合。 - dropout 边界语义处理:kernel 内计算
probValue = 1 - dropoutRatio,当probValue > 0时调用DropOut(mode3),当keepProb <= 0(即dropout_ratio=1.0)时改用Duplicate将输出清零,对齐 PyTorch 语义并避免除零产生异常值;isNeedDrop为编译期分支,无需 dropout 时不申请mask相关缓冲。


代码审查
审查结论
按文件逐一确认(7/7 均已审阅):
| 文件 | 结论 |
|---|---|
| op_host/CMakeLists.txt | 1 项(P3:file(GLOB) 收集源文件) |
| op_host/norm_multiply_dropout.cpp | 4 项(P2:除零保护顺序;P3×3:singleBlockRows 下溢/缺下界校验、%d/size_t 格式不匹配、isNeedDrop 重复计算) |
| op_host/norm_multiply_dropout_tiling.h | no issues(字段类型/顺序、REGISTER_TILING_DATA_CLASS 与 op 名一致) |
| op_kernel/CMakeLists.txt | no issues |
| op_kernel/norm_multiply_dropout.cpp | 2 项(P2:Vector 写 UB 后缺 V→S 同步即 GetValue;P3:lnOutBuf 等死代码白占 UB) |
| op_kernel/norm_multiply_dropout_tilingKey.h | no issues(仅一个模板字段,无历史字段顺序变更) |
| gitleaks | 1 项(P1:未说明的二进制被提交到仓库根目录) |
优先级统计:P0 × 0,P1 × 1,P2 × 2,P3 × 5,共 8 项。
整体风险判断:算子主流程(LayerNorm + Multiply + Dropout 的 tiling 拆分、均值/方差规约、dropout=1.0 清零分支)结构清晰,host 侧入参/dtype/shape 校验较完整,未见越界、泄漏或 32 位乘法链溢出的可触发路径(行/列上界 1e6×1024 在 int32 范围内)。主要风险集中在两处:一是 kernel 内标量读取前缺少 V→S 同步,属于会偶现的精度/正确性问题(需在真机上用回归用例确认);二是仓库根目录被提交了不透明的 gitleaks 二进制,属供应链风险,建议在合入前删除。其余为可维护性/构建可靠性层面的建议级问题。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 2 |
⛔ 需要修改


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
PR Approval Progress
⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-Ascend/ops-rec | ❌ (0/2)(You can also ask: YYTYY_, alliswell1024, 汪泽南, CUIZIBO, ddsxfr) | ❌ (0/1)(You can also ask: tqy1998, 蒋皓洋, yangzhen92a, 曾伟, 项攀霄) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
huiyangpeng, thanks for your pull request. All authors of the commits have signed the CLA. 👍


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | PR-build-SAST-check | ✅ COMPLETED | >>> |
| Build-2.7.1_arm | ✅ COMPLETED | >>> | |
| Build-2.10.0_arm | ✅ COMPLETED | >>> | |
| Build-2.7.1_X86 | ✅ COMPLETED | >>> | |
| Build-2.10.0_X86 | ✅ COMPLETED | >>> | |
| 恶意代码检查 | Antipoison | ✅ COMPLETED | >>> |
| 编码安全与规范检查 | pre-commit | ✅ COMPLETED | >>> |
| clang-tidy | ✅ COMPLETED | >>> | |
| 开源片段检查 | SCA | ✅ COMPLETED | >>> |
| 开发者测试 | presmoke | ✅ COMPLETED | >>> |
| 流水线 | PR-pipeline_ops-rec | ✅ COMPLETED | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


合入来源
问题/功能描述
norm_multiply_dropout 算子迁移(系列 PR 1/6):新增 LayerNorm + Multiply + Dropout 融合前向算子核心实现。
计算公式:
修改方案描述
norm_multiply_dropout_forward/op_host/:tiling 头文件、check_params 入参校验(dtype 白名单按 SUPPORT_950 条件编译剔除 fp32、eps/dropout_ratio 开闭区间校验)、tiling 实现与算子注册norm_multiply_dropout_forward/op_kernel/:AscendC 前向 kernel(LayerNorm+Multiply+Dropout 融合)、tilingKey 分发;kernel 内 dropout 按 keepProb 边界分支,keepProb <= 0(dropout_ratio=1.0)时清零输出,对齐 PyTorch 语义.pre-commit-config.yaml(codespell 忽略词补充 dOut/dout,消除梯度形参名误报)是否涉及UT/ST
开发自检