| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条融合规则 Co-authored-by: wangpengbo26<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !9915 merge layer_norm_pass_2 into master 迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条融合规则 Created-by: wangpengbo26 Commit-by: wangpengbo26 Merged-by: cann-robot Description: ## 描述 迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条 GE 自定义融合规则至本仓库,将 ONNX 导入的 LayerNorm 展开图融合为 LayerNorm / LayerNormV3 算子,减少图执行时的算子下发数量和中间结果访存。同步补充设计文档、配图和 UT。 ### 改动原因 ONNX 导入的 LayerNorm 在 GE 图中以展开形式存在(ReduceMean、Sub、Pow、Add、Sqrt、Div 等基础算子组合),算子下发数量多、中间结果访存开销大。两条 ONNX 融合规则迁移至本仓库统一维护,匹配后替换为 LayerNorm / LayerNormV3 算子节点,提升执行性能。 ### 改动方法 1. **LayerNormONNXFusionPass**:识别 ONNX 导入的 ReduceMean、Sub、Pow(或 Square)、Add、Sqrt、Div 等小算子组合,融合为 LayerNorm 算子。支持 6 种场景:带/不带 gamma 和 beta、平方计算前带 Cast、开方前经 Max+Min / Min+Max 数值裁剪;带 gamma 和 beta 时同时融合末尾的 Mul 和 Add。不带 gamma/beta 时创建全 1 gamma 和全 0 beta 常量。 2. **LayerNormONNXMULFusionPass**:识别 ReduceMean、两个独立 Sub、Mul(或 Pow)、Add、Sqrt(或 Pow)、Div 等组合,融合为 LayerNormV3 算子。支持 4 种场景:Mul/Pow 计算平方、带/不带 gamma 和 beta;另支持 Rsqrt 替代 Pow(0.5)。 3. **设计文档**:新增 LayerNormONNXFusionPass.md 和 LayerNormONNXMULFusionPass.md,描述融合模式(14 张配图)、使用约束(axes/keep_dims、Sub 位置、Cast/Div 限制、epsilon/Pow 指数常量约束、内部节点不复用等)、支持的型号(Ascend 950PR/950DT)。 4. **UT**:LayerNormONNXFusionPassTest 12 个用例、LayerNormONNXMULFusionPassTest 12+ 个用例,覆盖融合成功(Pow/Square、Div/RealDiv、Cast、Max/Min 裁剪、共享 axes const、gamma 输入位置交换)与不融合场景(不支持平台、keep_dims=false、Pow 指数非 2、epsilon 过大、中间节点有外部消费者等)。 5. **math_proto_stub.cpp**(+165):新增 Pow、Square、Sqrt、Maximum、Minimum、RealDiv、Div 算子原型 stub,供 UT 构图使用。 涉及文件(23 个,+3287): - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_fusion_pass.cpp(新增,+815) - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_fusion_pass.h(新增,+33) - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_mul_fusion_pass.cpp(新增,+693) - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_mul_fusion_pass.h(新增,+33) - norm/layer_norm/docs/LayerNormONNXFusionPass.md(新增,+75) - norm/layer_norm/docs/LayerNormONNXMULFusionPass.md(新增,+58) - docs/zh/figures/layer_norm_onnx_fusion_pass_1~8.png(新增) - docs/zh/figures/layer_norm_onnx_mul_fusion_pass_1~6.png(新增) - norm/layer_norm/tests/ut/op_graph/test_layer_norm_onnx_fusion_pass.cpp(新增,+709) - norm/layer_norm/tests/ut/op_graph/test_layer_norm_onnx_mul_fusion_pass.cpp(新增,+664) - common/stub/op_graph/math_proto_stub.cpp(+165) ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/6115 ## 测试 - LayerNormONNXFusionPassTest:12 个 UT 用例。 - LayerNormONNXMULFusionPassTest:12+ 个 UT 用例。 - 覆盖融合成功与不融合(约束不满足)场景。 ## 文档更新 - 新增 LayerNormONNXFusionPass.md、LayerNormONNXMULFusionPass.md 设计文档及 14 张配图 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9915 | 1 个月前 | |
docs: supplement GEIR documentation for layer_norm operators Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !10467 merge ln_geir_doc into master docs: supplement GEIR documentation for layer_norm operators Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 为 5 个 layer_norm 系列算子补充 Ascend IR(GEIR)文档和图模式调用示例,并更新 README 中的图模式调用链接。 ### 改动原因 layer_norm、layer_norm_v3、layer_norm_v4、layer_norm_grad、layer_norm_grad_v3 算子此前缺少 Ascend IR 文档,README 中图模式调用链接为空或指向算子 IR 原型头文件,无法指导用户通过 Ascend IR 构图方式调用算子。 ### 改动方法 1. **新增 Ascend IR 文档**(docs/ascendirXxx.md,5 篇): - 产品支持情况、功能说明、计算公式 - 参数说明(输入/输出/属性,含数据类型和数据格式) - 约束说明、调用示例(含错误处理宏 CHECK_RET/LOG_PRINT 与 GetGeError 错误信息获取) 2. **GEIR 调用示例**: - 新增 layer_norm_grad、layer_norm_grad_v3、layer_norm_v4 示例 - 重构 layer_norm、layer_norm_v3 示例(统一代码结构,精简冗余) 3. **README 更新**(5 个): - 图模式调用链接从"-"或"算子 IR 原型头文件"更新为指向 Ascend IR 文档和示例代码 - layer_norm_grad:产品支持表更新(Atlas A3/A2 训练/推理系列由 × 改为 √),公式格式清理 涉及文件(15 个,+2961 -567): | 算子 | 文档(新增) | 示例 | README | |------|--------------|------|--------| | layer_norm | ascendirLayerNorm.md(+335) | test_geir_layer_norm.cpp(+203 -277 重构) | +1 -1 | | layer_norm_v3 | ascendirLayerNormV3.md(+335) | test_geir_layer_norm_v3.cpp(+204 -262 重构) | +2 -2 | | layer_norm_v4 | ascendirLayerNormV4.md(+353) | test_geir_layer_norm_v4.cpp(+267 新增) | +2 -2 | | layer_norm_grad | ascendirLayerNormGrad.md(+355) | test_geir_layer_norm_grad.cpp(+262 新增) | +16 -16 | | layer_norm_grad_v3 | ascendirLayerNormGradV3.md(+355) | test_geir_layer_norm_grad_v3.cpp(+264 新增) | +7 -7 | ## 关联的Issue 不涉及 ## 测试 文档和示例代码补充,不涉及算子功能逻辑变更。 ## 文档更新 - 新增 5 篇 Ascend IR 文档(ascendirLayerNorm / ascendirLayerNormV3 / ascendirLayerNormV4 / ascendirLayerNormGrad / ascendirLayerNormGradV3) - 新增 3 个 GEIR 调用示例,重构 2 个示例(layer_norm、layer_norm_v3) - 更新 5 个 README(图模式链接、产品支持表、公式格式) ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10467 | 1 个月前 | |
refactor: 迁移 TF 插件注册至新框架 API(part 3) Co-authored-by: Nice_try<zhangzhiwei108@huawei.com> # message auto-generated for no-merge-commit merge: !9758 merge tf-plugin-part3 into master refactor: 迁移 TF 插件注册至新框架 API(part 3) Created-by: Nice_try Commit-by: Nice_try Merged-by: cann-robot Description: ## 描述 将 TF 框架侧自定义算子注册(REGISTER_CUSTOM_OP)从旧工具链迁移至 ops-nn 新仓(TF 插件迁移 part 3),共新增/调整 22 个 *_tf_plugin.cpp 注册文件。 ### 改动原因 1. 旧注册 API(ParseParamsFn/AutoMappingFn)与标量 OriginOpType({...}) 写法在新工具链已不适用,统一迁移为 ParseParamsByOperatorFn(AutoMappingByOpFn) 与 OriginOpType(std::vector<ge::AscendString>{...}) 形式; 2. 依赖 TF protobuf NodeDef(node_def.pb.h)的旧解析逻辑在新工具链中已不存在,相关解析改为基于 ge::Operator 的子图分解(ParseOpToGraphFn/FusionParseParamsFn)实现; 3. 承接本仓已完成的 TF 插件迁移 part 1/2,补齐剩余算子的 TF 注册。 ### 改动方法 按模块汇总: - common:新增 AscendWeightQuant(TF 字符串 dst_type 到 ge DataType 的转换解析)、GatherPoint(分解为 GatherV2+Const 子图)、GatherPointGrad(分解为 ScatterUpdate 子图)注册; - index:gather_v2 新增 Gather/ResourceGather 到自定义 Gather 的注册;scatter_add/scatter_sub 新增 TensorScatterAdd/TensorScatterSub 注册;新增 BroadcastGradientArgs、SparseSegmentMean、SparseSegmentMeanGrad、SparseSlice、SparseToDense 注册; - norm:BNInfer/BNTrainingReduceGrad/BNTrainingUpdateGrad/LayerNorm/LayerNormGrad 由 ParseParamsFn 迁移到 ParseParamsByOperatorFn;LayerNorm/LayerNormGrad 增补 FusedLayerNorm/FusedLayerNormGrad 双 origin 映射;bn_training_update_v2 新增 BNTrainingUpdate 注册; - optim:ApplyAdagrad 迁移新 API(保留 ApplyAdagrad/ResourceApplyAdagrad 双 origin); - matmul:新增 Einsum 注册; - rnn:新增 BlockLSTM(分解为 DynamicRNN 子图,含 seq_length 的 Cast 与输出重排)、DynamicRNN 融合解析(FusionParseParamsFn)与 DynamicRnn 注册、DynamicRNNV2/DynamicRnnV2 系列注册(含 is_misplaced 属性处理)。 ## 关联的Issue 关联 Issue #5505:https://gitcode.com/cann/ops-nn/issues/5505 ## 测试 本 PR 仅涉及注册/图解析代码迁移,无测试文件变更;依赖仓内 CI(编译、静态检查、UT/ST 工作流)验证。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:TF 插件注册迁移(part 3) ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9758 | 1 个月前 | |
feat(graph): 补齐9个算子InferDataType交付件(op_graph/*_graph_infer.cpp) Co-authored-by: hahaha22<wangrunze20@h-partners.com> # message auto-generated for no-merge-commit merge: !10951 merge feat/infer-datatype-migration into master feat(graph): 补齐9个算子InferDataType交付件(op_graph/*_graph_infer.cpp) Created-by: hahaha22 Commit-by: hahaha22 Merged-by: cann-robot Description: ## 描述 按 graph_develop_guide.md 图模式交付件要求,为 9 个算子补齐 InferDataType 交付件 op_graph/<op>_graph_infer.cpp(IMPL_OP(Op).InferDataType(f) 注册),dtype 推导规则迁移自 canndev v1.0 旧式 IMPLEMT_COMMON_INFERFUNC/IMPLEMT_INFERFUNC 的类型推导语义: - **透传类(out=in0,4个)**:ConfusionSoftmaxGrad(y=grad)、LogSoftmaxV2(logsoftmax=logits)、SoftmaxGrad(grad_x=softmax)、SyncBatchNormBackwardElemt(grad_input=grad_output); - **双输出同源(1个)**:SyncBatchNormBackwardReduce(sum_dy_xmu 与 y 均取 sum_dy 的 dtype,对齐 v1.0 nn_batch_norm_ops.cc 实现); - **非0索引锚定(out=in1,1个)**:LogSoftmaxGrad(y=x,输入0 是 grad); - **多输出绑定(3个)**:LayerNorm/LayerNormV3(y=x、mean=gamma、variance/rstd=beta,CANN 特有的混合精度载体设计,对齐 v1.0 nn_norm_ops.cc)、SyncBatchNormGatherStats(4 个输出均取 variance 的 dtype,shape 另取 mean,对齐 v1.0 实现)。 InferDataType 仅做纯推导(SoftmaxGrad 为 grad_x=softmax 透传),不增加输入 dtype 一致性校验:混合 dtype 组合由 tiling 侧既有三口全等校验在编译期拦截。 > 2026-10-13:本 MR 曾为 SoftmaxGrad 加入构图期 grad_softmax==softmax 一致性校验,经复审已回退(revert 提交 e1ad6cfa1),恢复纯透传形态。 CMake 无需改动(构建宏 GLOB_RECURSE op_graph/*.cpp 自动收编)。 ## 关联的Issue 无 ## 测试 1. 语法检查:9 个新文件 g++ -fsyntax-only 全部通过; 2. 构建:bash build.sh --opgraph -j16 全量构建通过,9 个新 .o 均进入 graph_plugin_nn_obj 并链接入 libopgraph_nn.so(2026-10-13 校验回退后重新全量构建通过); 3. 行为验证:按 KernelRunContext ABI 构造 mock InferDataTypeContext 直接调用注册函数,9 算子覆盖透传、in1 锚定、多输出逐口绑定(含 GatherStats 4 输出、LayerNorm 系 3 输出、BackwardReduce 双输出)及 SoftmaxGrad 混合 dtype 透传行为,全部通过(2026-10-13 回退后全量重跑)。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!10951 | 6 天前 | |
feat: 责任田 31 算子批量同步 Ascend960 平台支持 Co-authored-by: zzz2048<zhuhanhan@huawei.com> # message auto-generated for no-merge-commit merge: !11896 merge feat/responsibility-ops-ascend960-clean into master feat: 责任田 31 算子批量同步 Ascend960 平台支持 Created-by: zzz2048 Commit-by: zzz2048 Merged-by: cann-robot Description: ## 描述 从 ops-nn-dev 基线同步责任田(norm/activation/index)33 算子的 Ascend960 平台支持。 - def 注册目标平台(Ascend960)+ config binary.json - kernel arch35 宏隔离,非目标平台走 #else 原路径零回归 ## 测试 已在 Ascend960 环境完成编译与功能验证。 ## 类型标签 - [x] ✨ Feature 关联 Issue: #6624 See merge request: cann/ops-nn!11896 | 10 天前 | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 3 个月前 | |
迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条融合规则 Co-authored-by: wangpengbo26<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !9915 merge layer_norm_pass_2 into master 迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条融合规则 Created-by: wangpengbo26 Commit-by: wangpengbo26 Merged-by: cann-robot Description: ## 描述 迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条 GE 自定义融合规则至本仓库,将 ONNX 导入的 LayerNorm 展开图融合为 LayerNorm / LayerNormV3 算子,减少图执行时的算子下发数量和中间结果访存。同步补充设计文档、配图和 UT。 ### 改动原因 ONNX 导入的 LayerNorm 在 GE 图中以展开形式存在(ReduceMean、Sub、Pow、Add、Sqrt、Div 等基础算子组合),算子下发数量多、中间结果访存开销大。两条 ONNX 融合规则迁移至本仓库统一维护,匹配后替换为 LayerNorm / LayerNormV3 算子节点,提升执行性能。 ### 改动方法 1. **LayerNormONNXFusionPass**:识别 ONNX 导入的 ReduceMean、Sub、Pow(或 Square)、Add、Sqrt、Div 等小算子组合,融合为 LayerNorm 算子。支持 6 种场景:带/不带 gamma 和 beta、平方计算前带 Cast、开方前经 Max+Min / Min+Max 数值裁剪;带 gamma 和 beta 时同时融合末尾的 Mul 和 Add。不带 gamma/beta 时创建全 1 gamma 和全 0 beta 常量。 2. **LayerNormONNXMULFusionPass**:识别 ReduceMean、两个独立 Sub、Mul(或 Pow)、Add、Sqrt(或 Pow)、Div 等组合,融合为 LayerNormV3 算子。支持 4 种场景:Mul/Pow 计算平方、带/不带 gamma 和 beta;另支持 Rsqrt 替代 Pow(0.5)。 3. **设计文档**:新增 LayerNormONNXFusionPass.md 和 LayerNormONNXMULFusionPass.md,描述融合模式(14 张配图)、使用约束(axes/keep_dims、Sub 位置、Cast/Div 限制、epsilon/Pow 指数常量约束、内部节点不复用等)、支持的型号(Ascend 950PR/950DT)。 4. **UT**:LayerNormONNXFusionPassTest 12 个用例、LayerNormONNXMULFusionPassTest 12+ 个用例,覆盖融合成功(Pow/Square、Div/RealDiv、Cast、Max/Min 裁剪、共享 axes const、gamma 输入位置交换)与不融合场景(不支持平台、keep_dims=false、Pow 指数非 2、epsilon 过大、中间节点有外部消费者等)。 5. **math_proto_stub.cpp**(+165):新增 Pow、Square、Sqrt、Maximum、Minimum、RealDiv、Div 算子原型 stub,供 UT 构图使用。 涉及文件(23 个,+3287): - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_fusion_pass.cpp(新增,+815) - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_fusion_pass.h(新增,+33) - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_mul_fusion_pass.cpp(新增,+693) - norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_mul_fusion_pass.h(新增,+33) - norm/layer_norm/docs/LayerNormONNXFusionPass.md(新增,+75) - norm/layer_norm/docs/LayerNormONNXMULFusionPass.md(新增,+58) - docs/zh/figures/layer_norm_onnx_fusion_pass_1~8.png(新增) - docs/zh/figures/layer_norm_onnx_mul_fusion_pass_1~6.png(新增) - norm/layer_norm/tests/ut/op_graph/test_layer_norm_onnx_fusion_pass.cpp(新增,+709) - norm/layer_norm/tests/ut/op_graph/test_layer_norm_onnx_mul_fusion_pass.cpp(新增,+664) - common/stub/op_graph/math_proto_stub.cpp(+165) ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/6115 ## 测试 - LayerNormONNXFusionPassTest:12 个 UT 用例。 - LayerNormONNXMULFusionPassTest:12+ 个 UT 用例。 - 覆盖融合成功与不融合(约束不满足)场景。 ## 文档更新 - 新增 LayerNormONNXFusionPass.md、LayerNormONNXMULFusionPass.md 设计文档及 14 张配图 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!9915 | 1 个月前 | |
feat: 责任田 31 算子批量同步 Ascend960 平台支持 Co-authored-by: zzz2048<zhuhanhan@huawei.com> # message auto-generated for no-merge-commit merge: !11896 merge feat/responsibility-ops-ascend960-clean into master feat: 责任田 31 算子批量同步 Ascend960 平台支持 Created-by: zzz2048 Commit-by: zzz2048 Merged-by: cann-robot Description: ## 描述 从 ops-nn-dev 基线同步责任田(norm/activation/index)33 算子的 Ascend960 平台支持。 - def 注册目标平台(Ascend960)+ config binary.json - kernel arch35 宏隔离,非目标平台走 #else 原路径零回归 ## 测试 已在 Ascend960 环境完成编译与功能验证。 ## 类型标签 - [x] ✨ Feature 关联 Issue: #6624 See merge request: cann/ops-nn!11896 | 10 天前 | |
docs: supplement GEIR documentation for layer_norm operators Co-authored-by: rk<wangpengbo26@huawei.com> # message auto-generated for no-merge-commit merge: !10467 merge ln_geir_doc into master docs: supplement GEIR documentation for layer_norm operators Created-by: wangpengbo26 Commit-by: rk Merged-by: cann-robot Description: ## 描述 为 5 个 layer_norm 系列算子补充 Ascend IR(GEIR)文档和图模式调用示例,并更新 README 中的图模式调用链接。 ### 改动原因 layer_norm、layer_norm_v3、layer_norm_v4、layer_norm_grad、layer_norm_grad_v3 算子此前缺少 Ascend IR 文档,README 中图模式调用链接为空或指向算子 IR 原型头文件,无法指导用户通过 Ascend IR 构图方式调用算子。 ### 改动方法 1. **新增 Ascend IR 文档**(docs/ascendirXxx.md,5 篇): - 产品支持情况、功能说明、计算公式 - 参数说明(输入/输出/属性,含数据类型和数据格式) - 约束说明、调用示例(含错误处理宏 CHECK_RET/LOG_PRINT 与 GetGeError 错误信息获取) 2. **GEIR 调用示例**: - 新增 layer_norm_grad、layer_norm_grad_v3、layer_norm_v4 示例 - 重构 layer_norm、layer_norm_v3 示例(统一代码结构,精简冗余) 3. **README 更新**(5 个): - 图模式调用链接从"-"或"算子 IR 原型头文件"更新为指向 Ascend IR 文档和示例代码 - layer_norm_grad:产品支持表更新(Atlas A3/A2 训练/推理系列由 × 改为 √),公式格式清理 涉及文件(15 个,+2961 -567): | 算子 | 文档(新增) | 示例 | README | |------|--------------|------|--------| | layer_norm | ascendirLayerNorm.md(+335) | test_geir_layer_norm.cpp(+203 -277 重构) | +1 -1 | | layer_norm_v3 | ascendirLayerNormV3.md(+335) | test_geir_layer_norm_v3.cpp(+204 -262 重构) | +2 -2 | | layer_norm_v4 | ascendirLayerNormV4.md(+353) | test_geir_layer_norm_v4.cpp(+267 新增) | +2 -2 | | layer_norm_grad | ascendirLayerNormGrad.md(+355) | test_geir_layer_norm_grad.cpp(+262 新增) | +16 -16 | | layer_norm_grad_v3 | ascendirLayerNormGradV3.md(+355) | test_geir_layer_norm_grad_v3.cpp(+264 新增) | +7 -7 | ## 关联的Issue 不涉及 ## 测试 文档和示例代码补充,不涉及算子功能逻辑变更。 ## 文档更新 - 新增 5 篇 Ascend IR 文档(ascendirLayerNorm / ascendirLayerNormV3 / ascendirLayerNormV4 / ascendirLayerNormGrad / ascendirLayerNormGradV3) - 新增 3 个 GEIR 调用示例,重构 2 个示例(layer_norm、layer_norm_v3) - 更新 5 个 README(图模式链接、产品支持表、公式格式) ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10467 | 1 个月前 |
LayerNorm
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
-
算子功能:
对指定层进行均值为0、标准差为1的归一化计算。
- 归一化:对输入张量的每个样本进行归一化处理,使得每个样本的均值为0,方差为1。
- 缩放和偏移:在归一化之后,可以通过缩放因子和偏移量进一步调整归一化后的输出,以适应不同的模型需求。
-
计算公式:
mean=E[x]mean = {E}[x] mean=E[x]
variance=Var[x]variance = \mathrm{Var}[x] variance=Var[x]
y=w×(x−meanVar[x]+eps)+by = w \times (\frac{x - mean}{ \sqrt{\mathrm{Var}[x] + eps}}) + b y=w×(Var[x]+epsx−mean)+b
其中,E[x]表示输入的均值,Var[x]表示输入的方差。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 表示进行归一化计算的输入,公式中的输入x。shape为[A1,...,Ai,R1,...,Rj],其中A1至Ai表示无需norm的维度,R1至Rj表示需norm的维度。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| gamma | 输入 | 表示进行归一化计算的权重,公式中的输入w。gamma为必选输入,不支持为空。数据类型与输入x一致或为FLOAT类型,且与beta的数据类型相同。shape为[R1,...,Rj],[Rn,...,Rj]或[Am,...,Ai,R1,...,Rj](1 < n ≤ j,1 ≤ m ≤ i),与输入x从begin_params_axis起始的连续维度shape相同。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| beta | 输入 | 表示进行归一化计算的偏移量,公式中的输入b。beta为必选输入,不支持为空。数据类型与输入x一致或为FLOAT类型,且与gamma的数据类型相同。shape与gamma的shape相同。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| begin_norm_axis | 可选属性 |
|
INT | - |
| begin_params_axis | 可选属性 |
|
INT | - |
| epsilon | 可选属性 |
|
FLOAT | - |
| y | 输出 | 表示进行归一化计算的结果,公式中的y。shape需要与x的shape相等,为[A1,...,Ai,R1,...,Rj]。数据类型与x的数据类型保持一致。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| mean | 输出 | 表示进行归一化后的均值,公式中的mean。与variance的shape相同,shape为[A1,...,Ai,1,...,1],Ai后共有j个1,与需要norm的轴长度保持相同。数据类型与gamma和beta的数据类型保持一致。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| variance | 输出 | 表示进行归一化后的方差,公式中的variance。与mean的shape相同,shape为[A1,...,Ai,1,...,1],Ai后共有j个1,与需要norm的轴长度保持相同。数据类型与gamma和beta的数据类型保持一致。 | FLOAT、FLOAT16、BFLOAT16 | ND |
约束说明
无
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_layer_norm | 通过Ascend IR构图方式调用LayerNorm算子。 |