| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 | 1 个月前 | |
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 | 1 个月前 | |
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 | 1 个月前 | |
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 | 1 个月前 | |
EluGrad算子贡献 Co-authored-by: ilovescrapy<2623969821@qq.com> # message auto-generated for no-merge-commit merge: !3221 merge master into master EluGrad算子贡献 Created-by: ilovescrapy Commit-by: ilovescrapy Merged-by: cann-robot Description: ## 描述 # 需求背景(required) ## 需求来源背景介绍 ### EluGrad算子实现优化 基于EluGrad算子历史TBE版本使用Ascend C编程语言进行优化。 EluGrad算子(TBE)实现路径和相关API路径 EluGrad算子实现路径为:/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/impl EluGrad算子实现中的API路径:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/dsl ### EluGrad算子现状分析 通过对EluGrad算子TBE版本的功能分析,当前支持的能力如下: ①输出参数为z,输入参数有2个,grads和activations是参与计算的参数,支持float16,float32,bfloat16、int32、int8五种格式的输入. ②EluGrad算子功能是: $$ y=grads⋅(min(activations,0)+1) $$ EluGrad算子TBE版本的整体流程图如下图所示:  # 需求分析 ## 外部组件依赖 不涉及外部组件依赖。 ## 内部适配模块 适配Aclnn接口调用。 ## 需求模块设计 ### 算子原型 * 需要注意的是虽然在算子原型中有NC1HWC0,FRACTAL_Z,C1HWNCoC0,ND四种排布格式,但经过实测,tbe并不支持C1HWNCoC0格式,而tbe额外支持了NCHW, NHWC所以做出如下修改。 | | | | | | | | ------ | ---- | -------------- | ------ | ------ | ---- | | 名称 | 类别 | dtype | format | shape | 介绍 | | grads | 输入 | fp16/fp32/bf16 | ND, NCHW, NHWC, NC1HWC0, FRACTAL_Z | all | 输入 | | activations | 输入 | fp16/fp32/bf16 | ND, NCHW, NHWC, NC1HWC0, FRACTAL_Z | all | 输入 | | y | 输出 | fp16/fp32/bf16 | ND, NCHW, NHWC, NC1HWC0, FRACTAL_Z | 同输入 | 输出 | 1. 相关约束 Atlas A2 训练系列产品/Atlas 800I A2推理产品float16、float32、bfloat16、int32、int8 # 需求详细设计 ## 使能方式 | **上层框架** | **涉及的框架勾选** | | ---------------- | ------------------ | | TF训练/推理 | | | Pytorch训练/推理 | | | ATC推理 | √ | | Aclnn直调 | √ | | OPAT调优 | | | SGAT子图切分 | | ## 需求总体设计 **3.2.1 host侧设计:** **tiling策略:** 当不需要广播的情况下,算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。虽然tbe代码中有将标量1广播到x.shape的操作,在AscendC中通过Duplicate接口可以复制标量1,该接口不需要shape传入。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tailTileLength 和 formerTileLength 计算单次搬运的数据量,通过 tailTileNum 和 formerTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 1. 分核策略 优先使用满核的原则。 如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 输入数据大小计算:通过GetInputShape和GetDataTypeLength函数获取输入数据的大小和类型长度,计算出输入数据的总字节数。 UB内存大小和核心数量获取:通过平台信息获取UB内存大小和核心数量,并根据这些信息调整核心数量。 1. 数据分块和内存优化策略 充分使用UB空间的原则。 需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。 UB内存大小获取:通过GetCoreMemSize函数获取UB内存的大小,用于后续的数据切分计算。 Tile块计算:根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM,计算出每个Tile块的数据数量。 数据切分:将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量。 设置切分参数:将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到EluGradTilingData对象中。 这些策略确保了数据在多个核心之间的均匀分布,并且在单个核心内进行了合理的切分,以提高并行处理的效率。 1. tilingkey规划策略 无 **数据检测**: 对不支持AscendC::Cast()bfloat16向float32转换的硬件进行直接在tiling策略时返回Get Operator Workspace failed. error code is 561002报错。 **3.2.2 kernel侧设计:** 进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。 1. 由于支持Ascend C开发的硬件中AscendC::EluGrad支持float16、float32和bfloat16数据的输入,可以将bfloat16和float16的数据都转成float32进行计算,计算完成后在将精度转换回去. 2. tilingkey始终为0。 3. 会用到的API有:Cast、Adds、Mul、Compare等等。 4. Ascend C的EluGrad算子流程见下图。  ## 支持硬件 | **支持的芯片版本** | **涉及勾选** | | ------------------------- | ------------ | | 香橙派OrangePi AIpro | | | Atlas 200I/500 A2推理产品 | | | Atlas 800I/T A2 | √ | ## 算子约束限制 不支持广播。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/1754 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!3221 | 4 个月前 | |
更新SigmoidCrossEntropyWithLogitsGradV2等算子文档说明 Co-authored-by: fullt<full.fu@huawei.com> # message auto-generated for no-merge-commit merge: !4530 merge readme into master 更新SigmoidCrossEntropyWithLogitsGradV2等算子文档说明 Created-by: fullt Commit-by: fullt Merged-by: cann-robot Description: ## 描述 优化SigmoidCrossEntropyWithLogitsGradV2等算子文档说明 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/2519 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新README.md和算子docs下的接口文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!4530 | 3 个月前 |
EluGrad
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas 800I A2 推理产品件 | √ |
功能说明
- 算子功能:求elu函数梯度。
- 计算公式:
y=(min(activations,0)+1)∗gradsy = (min(activations,0) + 1) * grads y=(min(activations,0)+1)∗grads
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| grads | 输入 | 对应Elu操作的反向传播梯度 | FLOAT、FLOAT16、BFLOAT16 | ND |
| activations | 输入 | 与"grads"具有相同的类型、格式和形状。对应Elu操作的输出值。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| y | 输出 | 公式中的输出张量 | 同grads | ND |
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口调用 | test_aclnn_elu_grad.cpp | 通过自动生成的aclnn接口调用EluGrad算子。 |
约束说明
无
贡献说明
| 贡献者 | 贡献方 | 贡献算子 | 贡献时间 | 贡献内容 |
|---|---|---|---|---|
| ilovescrapy | 个人开发者 | EluGrad | 2026/3/23 | EluGrad算子适配开源仓 |