| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
算子日志可读性与代码规范性的优化 Co-authored-by: xingtaowu<wuxingtao3@h-partners.com> # message auto-generated for no-merge-commit merge: !9376 merge fix_nn_log into master 算子日志可读性与代码规范性的优化 Created-by: xingtaowu Commit-by: xingtaowu Merged-by: cann-robot Description: ## 描述 批量修正日志/报错信息中的英文拼写错误与语法问题,并补充更明确的参数越界诊断信息,同时修正示例测试程序中的日志级别与代码格式问题。改动不涉及业务逻辑与算法流程变化,均为日志可读性与代码规范性的优化。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5291 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 冒烟通过 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ x] 其他,请描述:算子日志可读性与代码规范性的优化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9376 | 1 个月前 | |
TF plugin修改1 Co-authored-by: sunchun<sunchun4@h-partners.com> # message auto-generated for no-merge-commit merge: !7547 merge nn1 into master TF plugin修改1 Created-by: sunchun Commit-by: sunchun Merged-by: cann-robot Description: ## 描述 TF plugin修改 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4196 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7547 | 2 个月前 | |
Add macro definition guard for UnsortedSegmentMax and UnsortedSegmentProd Co-authored-by: zhangxiyan7<zhangxiyan7@huawei.com> # message auto-generated for no-merge-commit merge: !9262 merge master into master Add macro definition guard for UnsortedSegmentMax and UnsortedSegmentProd Created-by: zhangxiyan7 Commit-by: zhangxiyan7 Merged-by: cann-robot Description: ## 描述 UnsortedSegmentMax、UnsortedSegmentProd算子原型增加宏定义保护 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5210 ## 测试 ## 文档更新 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9262 | 1 个月前 | |
UnsortedSegmentProd性能优化 Co-authored-by: zhangxiyan7<zhangxiyan7@huawei.com> # message auto-generated for no-merge-commit merge: !9677 merge UnsortedSegmentProd into master UnsortedSegmentProd性能优化 Created-by: zhangxiyan7 Commit-by: zhangxiyan7 Merged-by: cann-robot Description: ## 描述 针对 UnsortedSegmentProd 算子性能对标竞品部分用例不达标的问题,从单一 Simt 路径扩展为多模板路径体系,并增加全无效 id 向量化快路径。分模板优化说明: 1. OutFl / OutFlWsMerge(输出全载)模板 - 输入行数远超输出规模( inputOuterDim > outputSize × 总核数 × 2)时启用:输出整块驻留 UB,输入行按批流入直接累乘,消除逐行原子写 - WsMerge 变体:各核在 workspace 私有段累乘局部积,最后按输出行跨核 merge,突破单核 UB 容量限制 2. InputPart(输入分区)模板 - 输入行数 ≥ 1024 且输出可驻留 workspace 时启用:按输入行多核分区并行,各核产出局部积后按输出行 merge,解决输入长、输出短的负载并行度问题 - strided flag 跨核聚合:各核将"是否存在有效 id"写入带 stride 的 GM flag,清缓存 + SyncAll 后汇聚,全局无有效 id 时直接跳过 merge 写初值 1 3. SegmentSort(段排序)模板 - float32 且 128 ≤ innerDim < 512、行数 ≥ 1024 时启用:RadixSort 对 segmentIds 排序(多核本地排序 + 归并树合并),归约阶段按连续 segment 顺次连乘,消除随机访存 4. SplitCol / SortSimt 模板:复用公共路径 + Prod 特化 - SplitCol 的 baseA ;sLoopNum == 1 时走单块快路径——一次性读入全部 ids 并先做全无效检测,再决定是否搬运数据 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5636 ## 测试 目标用例性能达标(换算带宽后实现 竞品耗时/NPU耗时 > 0.2),冒烟通过。部分用例性能对比结果如下: | # | 用例 / dtype | 输入形状(seg数) | GPU耗时(µs) | 初始NPU耗时(µs) | 初始耗时比 | 最终NPU耗时(µs) | 最终耗时比 | |---|---|---|---|---|---|---|---| | 1 | 000132 fp32/int32 | [5410,77,4] (554) | 19.35 | 381.08 | 0.051 | 30.09 | 0.643 | | 2 | 000040 bf16/int32 | [20,1,8,9,12] (906) | 13.32 | 235.62 | 0.057 | 10.40 | 1.280 | | 3 | 000047 bf16/int64 | [2,2019,33,2,2,2,2,2] (231) | 451.06 | 12101.55 | 0.037 | 110.87 | 4.068 | | 4 | 000116 fp16/int32 | [63,5,10044] (834) | 28.21 | 518.22 | 0.054 | 27.30 | 1.033 | | 5 | 000062 int32/int32 | [3,2,1110,2,2,11,2,2] (224) | 14.59 | 1248.42 | 0.012 | 29.71 | 0.491 | | 6 | 000140 fp32/int32 | [2,4,4,1,8,5,8] (308) | 4.98 | 76.65 | 0.065 | 4.97 | 1.003 | | 7 | 000131 fp32/int64 | [60,5717] (262) | 6.69 | 144.32 | 0.046 | 7.02 | 0.953 | | 8 | 000163 int32/int64 | [101,32383] (853) | 70.59 | 1705.76 | 0.041 | 148.06 | 0.477 | | 9 | 000130 fp32/int32 | [1605,1054] (724) | 620.00 | 34430.41 | 0.018 | 141.21 | 4.391 | | 10 | 000171 int32/int64 | [10090,3,3,3,5,3] (822) | 490.38 | 26759.76 | 0.018 | 270.01 | 1.816 | | 11 | 000017 fp32/int64 | [770] (909) | 8.04 | 1084.10 | 0.007 | 20.81 | 0.386 | | 12 | 000007 fp32/int32 | [52,9739,4,4] (97) | 434.26 | 19934.99 | 0.022 | 66.02 | 6.577 | | 13 | 000134 fp32/int32 | [5,28,34,19] (66) | 160.63 | 34359.26 | 0.005 | 638.77 | 0.251 | | 14 | 000024 fp32/int32 | [20,4,5,21,9] (769) | 5.45 | 198.86 | 0.027 | 7.66 | 0.711 | | 15 | 000006 fp16/int32 | [68,4,4,13603] (208) | 208.56 | 4464.44 | 0.047 | 113.08 | 1.844 | | 16 | 000126 fp16/int32 | [136,2,2,2,645,2,2,2] (965) | 58.30 | 1237.38 | 0.047 | 46.24 | 1.261 | | 17 | 000046 bf16/int32 | [2,2,2,272,2,2,2,63] (406) | 143.06 | 3622.09 | 0.039 | 63.18 | 2.264 | | 18 | 000021 fp32/int64 | [5,12,3171] (383) | 23.28 | 152.96 | 0.152 | 26.94 | 0.864 | | 19 | 000011 fp32/int64 | [2,7081,2,2,2,6,3,2] (632) | 57.57 | 4150.62 | 0.014 | 140.37 | 0.410 | | 20 | 000037 bf16/int64 | [145,4,8254] (1000) | 78.42 | 1037.15 | 0.076 | 96.01 | 0.817 | | 21 | 000135 fp32/int64 | [5,5,4,41] (839) | 45.12 | 3645.09 | 0.012 | 15.85 | 2.847 | | 22 | 000146 bf16/int32 | [23,47] (269) | 14.94 | 480.06 | 0.031 | 15.58 | 0.959 | | 23 | 000017 fp32/int64 | [9718] (954) | 44.76 | 2030.42 | 0.022 | 19.37 | 2.310 | | 24 | 000056 int32/int32 | [4,4,17,4,6535] (396) | 3092.56 | 209483.03 | 0.015 | 552.16 | 5.601 | | 25 | 000227 int32/int64 | [116,317,10,446] (788) | 1254.56 | 83651.63 | 0.015 | 2683.99 | 0.467 | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:UnsortedSegmentProd算子性能优化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9677 | 27 天前 | |
UnsortedSegmentProd性能优化 Co-authored-by: zhangxiyan7<zhangxiyan7@huawei.com> # message auto-generated for no-merge-commit merge: !9677 merge UnsortedSegmentProd into master UnsortedSegmentProd性能优化 Created-by: zhangxiyan7 Commit-by: zhangxiyan7 Merged-by: cann-robot Description: ## 描述 针对 UnsortedSegmentProd 算子性能对标竞品部分用例不达标的问题,从单一 Simt 路径扩展为多模板路径体系,并增加全无效 id 向量化快路径。分模板优化说明: 1. OutFl / OutFlWsMerge(输出全载)模板 - 输入行数远超输出规模( inputOuterDim > outputSize × 总核数 × 2)时启用:输出整块驻留 UB,输入行按批流入直接累乘,消除逐行原子写 - WsMerge 变体:各核在 workspace 私有段累乘局部积,最后按输出行跨核 merge,突破单核 UB 容量限制 2. InputPart(输入分区)模板 - 输入行数 ≥ 1024 且输出可驻留 workspace 时启用:按输入行多核分区并行,各核产出局部积后按输出行 merge,解决输入长、输出短的负载并行度问题 - strided flag 跨核聚合:各核将"是否存在有效 id"写入带 stride 的 GM flag,清缓存 + SyncAll 后汇聚,全局无有效 id 时直接跳过 merge 写初值 1 3. SegmentSort(段排序)模板 - float32 且 128 ≤ innerDim < 512、行数 ≥ 1024 时启用:RadixSort 对 segmentIds 排序(多核本地排序 + 归并树合并),归约阶段按连续 segment 顺次连乘,消除随机访存 4. SplitCol / SortSimt 模板:复用公共路径 + Prod 特化 - SplitCol 的 baseA ;sLoopNum == 1 时走单块快路径——一次性读入全部 ids 并先做全无效检测,再决定是否搬运数据 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/5636 ## 测试 目标用例性能达标(换算带宽后实现 竞品耗时/NPU耗时 > 0.2),冒烟通过。部分用例性能对比结果如下: | # | 用例 / dtype | 输入形状(seg数) | GPU耗时(µs) | 初始NPU耗时(µs) | 初始耗时比 | 最终NPU耗时(µs) | 最终耗时比 | |---|---|---|---|---|---|---|---| | 1 | 000132 fp32/int32 | [5410,77,4] (554) | 19.35 | 381.08 | 0.051 | 30.09 | 0.643 | | 2 | 000040 bf16/int32 | [20,1,8,9,12] (906) | 13.32 | 235.62 | 0.057 | 10.40 | 1.280 | | 3 | 000047 bf16/int64 | [2,2019,33,2,2,2,2,2] (231) | 451.06 | 12101.55 | 0.037 | 110.87 | 4.068 | | 4 | 000116 fp16/int32 | [63,5,10044] (834) | 28.21 | 518.22 | 0.054 | 27.30 | 1.033 | | 5 | 000062 int32/int32 | [3,2,1110,2,2,11,2,2] (224) | 14.59 | 1248.42 | 0.012 | 29.71 | 0.491 | | 6 | 000140 fp32/int32 | [2,4,4,1,8,5,8] (308) | 4.98 | 76.65 | 0.065 | 4.97 | 1.003 | | 7 | 000131 fp32/int64 | [60,5717] (262) | 6.69 | 144.32 | 0.046 | 7.02 | 0.953 | | 8 | 000163 int32/int64 | [101,32383] (853) | 70.59 | 1705.76 | 0.041 | 148.06 | 0.477 | | 9 | 000130 fp32/int32 | [1605,1054] (724) | 620.00 | 34430.41 | 0.018 | 141.21 | 4.391 | | 10 | 000171 int32/int64 | [10090,3,3,3,5,3] (822) | 490.38 | 26759.76 | 0.018 | 270.01 | 1.816 | | 11 | 000017 fp32/int64 | [770] (909) | 8.04 | 1084.10 | 0.007 | 20.81 | 0.386 | | 12 | 000007 fp32/int32 | [52,9739,4,4] (97) | 434.26 | 19934.99 | 0.022 | 66.02 | 6.577 | | 13 | 000134 fp32/int32 | [5,28,34,19] (66) | 160.63 | 34359.26 | 0.005 | 638.77 | 0.251 | | 14 | 000024 fp32/int32 | [20,4,5,21,9] (769) | 5.45 | 198.86 | 0.027 | 7.66 | 0.711 | | 15 | 000006 fp16/int32 | [68,4,4,13603] (208) | 208.56 | 4464.44 | 0.047 | 113.08 | 1.844 | | 16 | 000126 fp16/int32 | [136,2,2,2,645,2,2,2] (965) | 58.30 | 1237.38 | 0.047 | 46.24 | 1.261 | | 17 | 000046 bf16/int32 | [2,2,2,272,2,2,2,63] (406) | 143.06 | 3622.09 | 0.039 | 63.18 | 2.264 | | 18 | 000021 fp32/int64 | [5,12,3171] (383) | 23.28 | 152.96 | 0.152 | 26.94 | 0.864 | | 19 | 000011 fp32/int64 | [2,7081,2,2,2,6,3,2] (632) | 57.57 | 4150.62 | 0.014 | 140.37 | 0.410 | | 20 | 000037 bf16/int64 | [145,4,8254] (1000) | 78.42 | 1037.15 | 0.076 | 96.01 | 0.817 | | 21 | 000135 fp32/int64 | [5,5,4,41] (839) | 45.12 | 3645.09 | 0.012 | 15.85 | 2.847 | | 22 | 000146 bf16/int32 | [23,47] (269) | 14.94 | 480.06 | 0.031 | 15.58 | 0.959 | | 23 | 000017 fp32/int64 | [9718] (954) | 44.76 | 2030.42 | 0.022 | 19.37 | 2.310 | | 24 | 000056 int32/int32 | [4,4,17,4,6535] (396) | 3092.56 | 209483.03 | 0.015 | 552.16 | 5.601 | | 25 | 000227 int32/int64 | [116,317,10,446] (788) | 1254.56 | 83651.63 | 0.015 | 2683.99 | 0.467 | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:UnsortedSegmentProd算子性能优化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!9677 | 27 天前 | |
支持UnsortedSegmentProd算子 Co-authored-by: zhangxiyan7<zhangxiyan7@huawei.com> # message auto-generated for no-merge-commit merge: !5879 merge UnsortedSegmentProd into master 支持UnsortedSegmentProd算子 Created-by: zhangxiyan7 Commit-by: zhangxiyan7 Merged-by: cann-robot Description: ## 描述 新增UnsortedSegmentProd算子支持Ascend950实现,UnsortedSegmentProd算子是索引算子,相同索引的数值进行原子乘再输出,原子乘使用atomCas实现,同地址的写请求需要在MATA上排队,是性能瓶颈所在。在推荐网络中同地址的情况非常多,index一般按照powerlaw分布,重复度非常高,这种场景利用atomCas很差。对索引进行排序去重的方式消除核内相同地址的写请求。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3587 ## 测试 自验用例400+精度通过,冒烟通过 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5879 | 3 个月前 | |
docs目录基本概念md中文名改为英文名 Co-authored-by: chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !7857 merge master into master docs目录基本概念md中文名改为英文名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao;chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> docs目录基本概念md文件名改为英文: 避免link中的中文字符引发的跳转异常,例如两段式接口.md变成%E4%B8%A4%E6%AE%B5%E5%BC%8F%E6%8E%A5%E5%8F%A3.md,不易于维护,可能导致其他平台跳转有问题。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4260](https://gitcode.com/cann/ops-nn/issues/4260) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> docs/zh/context所有md和对应的link ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7857 | 2 个月前 |
UnsortedSegmentProd
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
- 算子功能: 对一个张量分段求乘积
- 公式说明:
y[i]=∏j...:segmentids[j...]==ix[j...]y[i] = {\prod}_{j...:segment_ids[j...]==i} x[j...] y[i]=∏j...:segmentids[j...]==ix[j...]
其中,对满足segment_ids[j...] == i的所有位置j... 求乘积。若某个段i没有对应的元素,则y[i] = 1。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 输入数据 | FLOAT32、FLOAT16、BFLOAT16、INT32、INT64、UINT32、UINT64 | ND |
| segment_ids | 输入 | 分段索引 | INT32、INT64 | ND |
| num_segments | 输入 | 分段个数 | INT32、INT64 | ND |
| y | 输出 | 输出值信息 | FLOAT32、FLOAT16、BFLOAT16、INT32、INT64、UINT32、UINT64 | ND |
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_unsorted_segment_prod | 通过算子IR构图方式调用UnsortedSegmentProd算子。 |