| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix doc tools Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !7147 merge master into master fix doc tools Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 修改master分支里面doctool扫描的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3911 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [.] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7147 | 29 天前 | |
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 | 30 天前 | |
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 | 30 天前 | |
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 | 30 天前 | |
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 | 30 天前 | |
【社区任务】LogSoftmaxV2 算子开发-算子提交 Co-authored-by: LiJianhao2<25213050226@m.fudan.edu.cn> # message auto-generated for no-merge-commit merge: !412 merge master into master 【社区任务】LogSoftmaxV2 算子开发-算子提交 Created-by: LiJianhao2 Commit-by: LiJianhao2 Merged-by: cann-robot Description: # 【社区任务】LogSoftmaxV2 算子设计文档 ## 一、需求背景 ### 1.1 需求来源 本次算子开发来自社区任务需求,要求基于LogSoftmaxV2算子历史TBE版本使用Ascend C编程语言进行优化。 ### 1.2 背景介绍 #### 1.2.1 LogSoftmaxV2算子实现优化 tbe源码: /usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/impl/dynamic/logsoftmax_v2.py aclnn接口:ops-nn/experimental/activation/logsoftmax_v2/op_host/op_api/aclnn_logsoftmax_v2.cpp #### 1.2.2 LogSoftmaxV2算子现状分析 tbe算子支持的数据类型:float16,float32,bfloat16 tbe算子支持的数据格式:只有ND 属性:axes为listInt,可选,默认为-1 tbe算子实现描述: 对输入数据调用 reduce_max、vexp、reduce_sum、vlog 等接口,采用数值稳定性优化方法计算 log_softmax 数学表达式为: log_softmax(x_i) = x_i - max(x) - log(∑exp(x_j - max(x))) LogSoftmaxV2算子TBE版本的整体流程图如下图所示:  算子原型 | 类别 | 名称 | 位置 | dtype | format | unknownshape_format | shape/取值 | 可选性 | 默认值/说明 | |------|------|------|-------|--------|-------------------|------------|--------|-------------| | 输入 | logits | input0 | float16,float,bfloat16 | ND,ND,ND | ND,ND,ND | – | required | – | | 输出 | logsoftmax | output0 | float16,float,bfloat16 | ND,ND,ND | ND,ND,ND | all | required | – | | 属性 | axes | attr | – | – | – | all | optional | 默认值:-1(类型:listInt) | ## 二、需求分析 ### 2.1 外部组件依赖 LogSoftmaxV2实现依赖下面的外部组件和基础库 - CANN Runtime,ACL - - 依赖ACL提供的aclTensor,aclStream等接口 - - 依赖CommonOpExecutor相关基础设施统一管理workspace和已申请tensor - aclnn框架 - - 依赖暴露的aclnnLogSoftmaxV2接口进行初始化和算子执行 - 编译工具 - - 依赖ascendc编译器和cmake等 ### 2.2 内部适配模块 LogSoftmaxV2实现依赖下面的一些内部模块: - tiling模块:LogSoftmaxV2TilingData - 算子封装模块:l0op::LogSoftmaxV2 - 相关tensor适配模块:l0op::Contiguous, l0op::Cast, l0op::ViewCopy等 ### 2.3 需求模块设计 #### 2.3.1 AscendC算子原型: __aicore__ inline void logsoftmax_v2(GM_ADDR input, GM_ADDR output, GM_ADDR workspace, GM_ADDR tiling_data){} #### 2.3.2 AscendC算子相关约束 - 维度约束:tensor维度不超过8维 - 形状约束:axes为listint类型,支持多维,由于输入是ND,可以对这多维进行合轴处理,转化为单轴归约,input和output的shape相同 - 数据类型约束:与tbe相同 ## 需求详细设计 ### 3.1 使能方式 通过msopgen方式生成自定义算子工程,并进行编译部署,最终通过aclnn方式进行调用和调试 ### 3.2 需求总体设计 #### 3.2.1 host侧设计 对于logsoftmax的计算,分为行上和列上两种情况,基于此,有以下两种情况: - 归约轴为最后一轴,此时将tiling中的shape信息改为[m,n],dim=1,dims=2 - 归约轴为中间轴,此时将tiling中的shape信息改为[b,m,n],dim=1,dims=3 分块策略: - 归约轴为最后一轴,则将m均分给所有p个核(通常是40个vector) - 归约轴为中间轴,为了搬运高效,每个核最好一次处理连续若干列,按照total = b x (n +127) / 128进行分块,同样均分给p个核 tilingkey设置: - 归约轴为最后一轴,float32设置为1,float16设置为2,bfloat16设置为3 - 归约轴为中间轴,float32设置为4,float16设置为5,bfloat16设置为6 #### 3.2.2 device/kernel侧设计 ##### 3.2.2.1 实现描述 基于归约轴位置采用差异化计算策略,由于数据类型不同引来的差异化计算则体现在流程图中。 - 对于行归约模式,逐行执行完整的LogSoftmax计算流程:首先计算行最大值,接着执行数值平移(x-max),然后进行指数运算和归约求和,最后通过对数域调整得到最终结果。 - 对于列归约模式,采用分块计算策略,将m×n矩阵划分为a×b的子块,按列优先顺序进行遍历。每个子块执行在线Softmax计算后立即将结果写回输出位置——此设计是因为该存储区域随后会被后续子块的计算数据覆盖。待所有子块处理完成后,将各子块产生的sum和max中间结果通过原子操作累加至目标地址,完成全局规约。 ##### 3.2.2.2 流程图 Ascend C的LogSoftmax2算子流程见下图。  ### 3.3 支持硬件 Atlas 800I/T A2 ### 3.4 算子约束限制 - 输入输出shape要求一致 - 不支持广播 - 输入维度不超过8维 - 支持数据类型包括fp16,fp32,bf16 ## 四、特性交叉分析 logsoftmax算子通常与其反向的求导算子存在交叉影响,反向求导的算子中,logsoftmax的输出是其输入 ## 五、可测试分析 ### 精度标准 对比cpu实现,fp32类型下最大绝对误差max_abs_err <= 1e-4;bf16,fp16精度下 max_abs_err <= 1e-3 ### 性能标准 与tbe实现相比,使用msprof分析,性能上差异在5%以内,在常用shape上优于tbe版本 ### 兼容性分析 - 应在多平台上测试验证算子实现 - 与常用的其它算子混合调用,确保在实际场景中正常运行 See merge request: cann/ops-nn!412 | 3 个月前 | |
fix doc tools Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !7147 merge master into master fix doc tools Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 修改master分支里面doctool扫描的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3911 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [.] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7147 | 29 天前 |
LogSoftmaxV2
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas 800I A2 推理产品 | √ |
功能说明
- 算子功能:实现张量的对数归一化计算,在指定维度上计算输入元素的对数Softmax值。
- 计算公式:
outi=inputi−log(∑jexp(inputj))out_i = input_i - \log\left(\sum_j \exp(input_j)\right) outi=inputi−log(j∑exp(inputj))
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| axes | 输入 | 指定的归约轴 | ListInt | / |
| input | 输入 | 待进行归约的tensor | FLOAT、FLOAT16、BFLOAT16 | ND |
| out | 输出 | 归约的输出tensor | FLOAT、FLOAT16、BFLOAT16 | ND |
约束说明
无
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_log_softmax_v2.cpp | 通过aclnnLogSoftmaxV2接口方式调用LogSoftmaxV2算子。 |
贡献说明
| 贡献者 | 贡献方 | 贡献算子 | 贡献时间 | 贡献内容 |
|---|---|---|---|---|
| 看不见我 | 个人开发者 | LogSoftmaxV2 | 2025/12/24 | LogSoftmaxV2算子适配开源仓 |