| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 个月前 | |
feat: rename op_api_def.h to op_api_def_nn.h Co-authored-by: chenqianyu<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !8360 merge rename_opapidef into master feat: rename op_api_def.h to op_api_def_nn.h Created-by: FishPotatoChen Commit-by: chenqianyu Merged-by: cann-robot Description: ## 描述 本次改动将 op_api/op_api_def.h 重命名为 op_api/op_api_def_nn.h,并同步更新了所有引用该头文件的源文件与测试文件中的 #include 路径,共涉及 161 个文件。 改动原因:将 op_api 定义头文件统一命名为 op_api_def_nn.h,以更好地体现其所属模块(NN 算子)的语义,便于后续与其他模块的头文件区分管理。 此外,在提交过程中发现 4 个文件(aclnn_foreach_addcmul_scalar_v2.cpp、aclnn_max_unpool3d.cpp、test_aclnn_addmv.cpp、test_aclnn_fast_batchnorm_backward.cpp)的许可证头使用了非标准的旧格式,导致 OAT 合规检查失败。本次一并将其更新为标准的 CANN 开源许可证头格式,确保通过合规校验。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4954 ## 测试 - 通过 pre-commit 钩子校验:trailing whitespace、end-of-file-fixer、clang-format 均通过 - 通过 OAT 合规检查(161 个文件全部通过) - 本次为头文件重命名改动,不涉及逻辑变更,编译依赖关系保持不变 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:头文件重命名与许可证头修复 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8360 | 7 天前 | |
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 个月前 | |
【CANN训练营第二季社区任务】Mish算子开发-算子提交 Co-authored-by: wendylan<820589834@qq.com> # message auto-generated for no-merge-commit merge: !490 merge master into master 【CANN训练营第二季社区任务】Mish算子开发-算子提交 Created-by: wendylan Commit-by: wendylan Merged-by: cann-robot Description: ## 描述 背景信息 基于Mish算子历史TBE版本使用Ascend C编程语言进行优化。 通过对Mish算子TBE版本的功能分析,当前支持的能力如下: ① x,y支持float16,float32,bfloat16三种数据类型的输入。 ② Mish算子逐元素进行运算,仅有一个输入,不涉及到对输入数据进行广播。 ③ 计算方式根据数据类型和实现模式采用不同策略: Mish算子TBE版本的整体流程图如下图所示:  SUPER_PERFORMANCE模式的计算公式为: $$y = x*(1-2/(1+(1+(1+x/64)^{64})^2))$$ 其他模式的计算公式为: $$y = \begin{cases} x*(2e^{-x} + 1) / (2e^{-2x} + 2e^{-x} + 1), & \text{if $x > 0$} \\ x*(2e^x + e^{2x}) / (2 + 2e^x + e^{2x}), & \text{if $x \leq 0$} \end{cases}$$ **算子原型** 输入输出参数 |名称 |类别 | dtype |format| shape |介绍| |---|---|---|---|---|---| |x |输入 |float16/float32/bfloat16| ND |任意合法形状 |输入| |y |输出 |float16/float32/bfloat16|ND |与x形状相同 |输出| **算子支持型号** Atlas A2 训练系列产品/Atlas 800I A2推理产品 **host侧设计方案** 算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 **分核策略** 优先使用满核的原则。 如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 输入数据大小计算:通过GetInputShape和GetDataTypeLength函数获取输入数据的大小和类型长度,计算出输入数据的总字节数。 UB内存大小和核心数量获取:通过平台信息获取UB内存大小和核心数量,并根据这些信息调整核心数量。 **数据分块和内存优化策略** 充分使用UB空间的原则。 需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。 UB内存大小获取:通过GetCoreMemSize函数获取UB内存的大小,用于后续的数据切分计算。 Tile块计算:根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM和不同类型下的ubDataNum,计算出每个Tile块的数据数量。 数据切分:将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量。 设置切分参数:将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到MishTilingData对象中。 这些策略确保了数据在多个核心之间的均匀分布,并且在单个核心内进行了合理的切分,以提高并行处理的效率。 **tilingkey规划策略** 不进行tilingkey划分,在kernel侧利用输入数据的类型来走不同的分支。 **kernel侧设计方案** 进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。 CopyIn、Compute、CopyOut阶段都是以连续的数据切片(tiling块)为单位处理数据。根据每个vector核心的索引号计算数据切片的位置。 依照TBE实现,在HIGH_PRECISION模式将float16数据精度转换为float32计算。 bfloat16数据类型转为float32数据类型进行计算。 把原TBE算子中的tbe.vmul、tbe.vmuls、tbe.vadds、tbe.vrec、tbe.vexp、tbe.cast_to指令替换为AscendC的Mul、Muls、Adds、Reciprocal、Exp、Cast等矢量指令。 使用AscendC的Compare和Select指令替换原TBE算子的tbe.vcmp和tbe.vsel指令,实现数据的条件判断和数据选取。 按照TBE算子的计算逻辑完成Mish计算。 AscendC的Mish算子流程见下图:  ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/175 ## 测试 单测:测试各种数据类型(float16/float32/bfloat16) 功能测试:测试不同维度的输入 性能测试:对比TBE版本的性能提升 ## 文档更新 新增mish文档aclnnMish.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:社区任务算子设计文档 See merge request: cann/ops-nn!490 | 4 个月前 | |
修改doc tools低错 Co-authored-by: caiwenwen<caiwenwen6@h-partners.com> # message auto-generated for no-merge-commit merge: !4214 merge master into master 修改doc tools低错 Created-by: caiwenwen Commit-by: caiwenwen Merged-by: cann-robot Description: ## 描述 修改nn仓的markdown语法、htlm是否闭合、链接是否可以正常跳转、本地链接是否正常跳转修改低错修改 ## 关联的Issue 关联Issue [#1783](https://gitcode.com/cann/ops-nn/issues/1783) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 全部文档的链接跳转、htlm标签闭合、markdown语法规范问题 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [X] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!4214 | 3 个月前 |
Mish
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas 800I A2推理产品 | √ |
功能说明
- 算子功能:逐元素计算张量的Mish激活函数。
- SUPER_PERFORMANCE模式的计算公式为:
y=x∗(1−2/(1+(1+(1+x/64)64)2))y = x*(1-2/(1+(1+(1+x/64)^{64})^2)) y=x∗(1−2/(1+(1+(1+x/64)64)2))
其他模式的计算公式为:
y={x∗(2e−x+1)/(2e−2x+2e−x+1),if x>0x∗(2ex+e2x)/(2+2ex+e2x),if x≤0y = \begin{cases} x*(2e^{-x} + 1) / (2e^{-2x} + 2e^{-x} + 1), & \text{if $x > 0$} \\ x*(2e^x + e^{2x}) / (2 + 2e^x + e^{2x}), & \text{if $x \leq 0$} \end{cases}y={x∗(2e−x+1)/(2e−2x+2e−x+1),x∗(2ex+e2x)/(2+2ex+e2x),if x>0if x≤0
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 公式中的输入张量x | FLOAT、FLOAT16、BFLOAT16 | ND |
| y | 输出 | 公式中的输出张量y | FLOAT、FLOAT16、BFLOAT16 | ND |
约束说明
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_mish | 通过aclnnMish接口方式调用Mish算子。 |
贡献说明
| 贡献者 | 贡献方 | 贡献算子 | 贡献时间 | 贡献内容 |
|---|---|---|---|---|
| 闻毅 | 个人开发者 | Mish | 2025/12/23 | Mish算子适配开源仓 |