| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(scatter,foreach): 修复 ScatterMax/Min/Mul/Div 排序竞态与 Div 精度档,并整改 12 个算子 golden Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !10059 merge fix/golden-third-party-precision-batch2 into master fix(scatter,foreach): 修复 ScatterMax/Min/Mul/Div 排序竞态与 Div 精度档,并整改 12 个算子 golden Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 修复 ScatterMax/Min/Mul/Div 排序阶段的多核同步缺口与 foreach_div_list_inplace 的除法精度档, 并整改 12 个 foreach/scatter/lamb 算子 tests/assets/golden.py 的四类缺陷、补齐 2 处资料。 ### 一、内核缺陷 **1) scatter_reduce_common 并行归并排序缺少 MTE3->V / MTE3->S 同步(竞态)** SortLocalRuns() 循环尾只发 MTE3->MTE2(保护下一轮的输入搬入),未约束下一轮的 V 管道(Sort/Adds)与 S 管道(补哨兵)—— 而它们写的正是同一对 UB shiftSorted / originUb,本轮把它们搬出到 GM 的 DataCopyPad(MTE3) 尚未读完就被覆写, 导致落盘的排序键与原位置索引被污染,少数 var 行折进别行的 update。 旁证:同文件 SortMergeTree() 循环尾发的是 MTE3->S(它只用 S 写 UB,够用), 反衬出 SortLocalRuns() 漏了两条。 修复: cpp + const event_t m3v = pipe_.FetchEventID(HardEvent::MTE3_V); + const event_t m3s2 = pipe_.FetchEventID(HardEvent::MTE3_S); ... SetFlag<MTE3_MTE2>(m3m2); WaitFlag<MTE3_MTE2>(m3m2); + SetFlag<MTE3_V>(m3v); WaitFlag<MTE3_V>(m3v); + SetFlag<MTE3_S>(m3s2); WaitFlag<MTE3_S>(m3s2); **A/B 同种子对照**(var 6288948 行 / M 5375 万 / 合法索引 / 8 个固定种子,其余完全相同): | | 修复前 | 修复后 | |---|---:|---:| | PASS | 2 | **8** | | FAIL | 6 | **0** | 原触发用例连跑 3 遍 3/3 全绿(修复前每次必红)。ScatterMin 同规模复跑 3/3 全绿。 影响面:该内核为 ScatterMax/Min/Mul/Div 共享(Process() 中 MAX/MIN/MUL 走完全相同的路径, DIV 共用排序阶段),四个算子一并修复;位于 op_kernel/arch35/ 专属目录,不影响 A2。 **2) foreach_div_list_inplace 未开启 Div 的 0 ULP 精度档** Div(...) 未传 DivConfig,落到 DEFAULT_DIV_CONFIG = {DivAlgo::INTRINSIC}; 在 dav-3510 上该档是 1 ULP 保真舍入(实测 3126 万个 fp32 元素中 **8.29% 偏 1 ULP**), 而竞品 fp32 除法为 0 ULP 正确舍入。显式选 PRECISION_0ULP_FTZ_TRUE: | | 偏 0 ULP | 偏 1 ULP | 最大偏差 | |---|---:|---:|---:| | 修改前 | 91.71% | 8.29% | 1 ULP | | 修改后 | **100.0000%** | **0%** | **0 ULP** | 全泛化集 34/34 通过,性能 +4.2%(--run 12 同条件实测 209.8us -> 218.7us)。 未取仓内他处常见的 FTZ_FALSE:两档精度实测完全相同,但 FTZ_FALSE 的非规格数完整处理 同条件实测 218.7us -> 2028.1us(**9.3x**),而本算子输入域内不产生 fp32 非规格数。 ### 二、golden 整改(12 个算子) **3) Promote 撤销** —— _to_fp32 无条件把 Promote 后的 float64 砍回 fp32,等于撤销 TTK 的 Promote 能力:fp32 档的 mare 恒等于地板值 0.0019531(= 1ULP / 2^-14),无论内核对错都过, **该档等于从未被验证**。加 float64 护栏(CPU 侧不 cast,来什么算什么)。 **4) 三方腿入参绑定失效** —— _TpKernelFaithful 包装遮蔽了真实签名,TTK 按 __call__ 签名 绑定入参导致 TypeError,三方腿整条不可用。透传 __signature__ 修复。 **5) TensorList 载体还原** —— bf16 以 void 视图传入,torch 不认,按位 view 回 bf16(同宽无损)。 **6) 标量重载** —— torch 的 foreach 标量重载只接受 Number,Python 标量是 weak-typed 不会抬高 dtype,改为返回 Python 数值。 **7) scatter_list 的 uint16/uint32 崩溃** —— 走 torch index_put 会抛异常,改用等宽有符号 位视图(uint16->int16、uint32->int32)规避。 **8) scatter_div 工作 dtype** —— 由硬编码 fp32 改为跟随输入(仅保留 bf16->fp32 的载体桥接)。 **9) scatter_max/min/mul/div 的 tf 三方腿按内核算法转写** —— 内核对 fp16 是 LoadWiden 到 fp32 计算、NarrowStore 窄回,原实现只在窄类型上算,与被测内核不是同一个算法。 ### 三、资料 **10)** aclnnScatterMin.md 补齐索引取值范围约束(索引值的取值范围为[0, varRef.shape[0]))—— 该条 Max/Mul/Div 三个算子的资料原本就有,仅 Min 的约束列为空,属资料内部不一致。 **11)** aclnnScatterList.md 补充 maskOptional 取值范围(措辞与既有的 indice 取值条款对齐), 并修正参数表 mask 维度列笔误(原写 0-8,实际实现仅支持 1 维,tiling 对 maskDims != 1 直接返回 GRAPH_FAILED)。 ## 验证 | 项 | 结果 | |---|---| | ScatterMax 排序竞态 A/B(同 8 种子) | 修复前 2/8 通过 → 修复后 **8/8 通过** | | ScatterMin 同规模复跑 | **3/3 通过** | | foreach_div 全泛化集 | **34/34 通过**,3126 万元素 100% 偏 0 ULP | | 12 个算子 kernel + geir 双通路 | **1646 例,除已修复项外全部通过** | | ScatterMax/Min aclnn 通路 | **2/2、2/2 通过**(GetWorkspaceSize 与 OnXpuProfiling 均命中) | | CI 门禁 | ruff check / ruff format 全部通过 | 关联 Issue #5682 See merge request: cann/ops-nn!10059 | 1 个月前 | |
[fix] 补充examples目录下10个示例代码文件缺失的版权声明头 Co-authored-by: tangweiwei<tangweiwei2@huawei.com> # message auto-generated for no-merge-commit merge: !10258 merge fix/example-copyright-header into master [fix] 补充examples目录下10个示例代码文件缺失的版权声明头 Created-by: tangweiwei2 Commit-by: tangweiwei Merged-by: cann-robot Description: ## 描述 检查仓内所有 .cpp/.cc/.h 源文件(排除 experimental 目录)的版权声明情况,发现 examples 目录下 10 个示例代码文件缺失标准版权声明头(Copyright (c) 20xx Huawei Technologies Co., Ltd. ... CANN Open Software License Agreement Version 2.0 ...)。 本 PR 为以下 10 个文件补充版权声明头,版权年份与各算子同目录下其他源文件保持一致: 1. examples/add_example/examples/test_geir_add_example.cpp(2025) 2. index/scatter_mul/examples/test_geir_scatter_mul.cpp(2026) 3. index/scatter_max/examples/test_geir_scatter_max.cpp(2026) 4. index/scatter_min/examples/test_geir_scatter_min.cpp(2026) 5. index/scatter_div/examples/test_geir_scatter_div.cpp(2026) 6. activation/swiglu_group/examples/test_aclnn_swiglu_group.cpp(2026) 7. vfusion/modulate_grad/examples/test_aclnn_modulatebackward.cpp(2025) 8. quant/swiglu_mx_quant/examples/arch35/test_aclnn_swiglu_mx_quant.cpp(2026) 9. quant/swiglu_mx_quant_with_dual_axis/examples/arch35/test_aclnn_swiglu_mx_quant_with_dual_axis.cpp(2026) 10. quant/swiglu_backward_mx_quant_with_dual_axis/examples/arch35/test_aclnn_swiglu_backward_mx_quant_with_dual_axis.cpp(2026) 仅在每个文件头部新增版权声明,不改动任何功能代码。 ## 关联的Issue 关联Issue #5782 ## 测试 - 使用脚本扫描确认修改前 10 个文件无版权声明,修改后均包含标准版权头; - 仅新增文件头部注释,不影响编译与功能,无需运行算子测试。 ## 文档更新 无 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10258 | 1 个月前 | |
950系列支持 scatter_max/min/mul/div、scatter_list、foreach addcmul/addcdiv_list Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !5991 merge master into master 950系列支持 scatter_max/min/mul/div、scatter_list、foreach addcmul/addcdiv_list Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 支持950系列 scatterXXX 长尾算子;支持ForeachXXXList 长尾算子 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 ut/st 所有host ut全覆盖,且覆盖率全达标;所有算子ttk泛化100+用例全部Pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5991 | 3 个月前 | |
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 个月前 | |
fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !8767 merge fix/scatter-noncontig-and-lamb-infershape into master fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 长尾算子问题优化:scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/4865 ## 测试 不涉及 ## 文档更新 README ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!8767 | 1 个月前 | |
950系列支持 scatter_max/min/mul/div、scatter_list、foreach addcmul/addcdiv_list Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !5991 merge master into master 950系列支持 scatter_max/min/mul/div、scatter_list、foreach addcmul/addcdiv_list Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 支持950系列 scatterXXX 长尾算子;支持ForeachXXXList 长尾算子 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 ut/st 所有host ut全覆盖,且覆盖率全达标;所有算子ttk泛化100+用例全部Pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5991 | 3 个月前 | |
ScatterMul/Div/Max/Min 排序路径改直排 int64 key,消除 var 首维能力上限 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !10655 merge feat/scatter-int64-index into master ScatterMul/Div/Max/Min 排序路径改直排 int64 key,消除 var 首维能力上限 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10655 | 25 天前 | |
950系列支持 scatter_max/min/mul/div、scatter_list、foreach addcmul/addcdiv_list Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !5991 merge master into master 950系列支持 scatter_max/min/mul/div、scatter_list、foreach addcmul/addcdiv_list Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 支持950系列 scatterXXX 长尾算子;支持ForeachXXXList 长尾算子 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 ut/st 所有host ut全覆盖,且覆盖率全达标;所有算子ttk泛化100+用例全部Pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!5991 | 3 个月前 | |
fix(index): 修复 scatter Div/Mul 四算子的除法精度、INT_MIN 除零误判与 golden dtype 语义 Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !10347 merge fix/scatter-all into master fix(index): 修复 scatter Div/Mul 四算子的除法精度、INT_MIN 除零误判与 golden dtype 语义 Created-by: zl_hw Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 修复 ScatterDiv / ScatterMul / ScatterMax / ScatterMin 在 Ascend 950(arch35)上的 5 处缺陷: 1. **浮点除法精度**:由默认的 DivAlgo::INTRINSIC(硬件近似除)改为 PRECISION_0ULP_FTZ_FALSE。 2. **整型除零守护**:由 Abs 判零改为 CompareScalar(NE) + Select,不再依赖会溢出的算术变换。 3. **MUL 浮点跨核 partial**:抽出 TakeSegmentWhole(),MUL 浮点一律由起始核整体接管,不拆跨核 partial;该路径因此成为确定性实现。 4. **golden dtype 语义**:改为按 TTK 下发的 golden_mode 与内核实际放宽行为决定是否抬档/窄回;补齐四算子 int8/uint8 判据档;ScatterDiv 整型三方腿避开 INT_MIN / -1。 5. **确定性资料**:四算子 README、ScatterDiv/ScatterMul 的 aclnn 资料、docs/zh/op_api_list.md 的确定性说明三层对齐为「默认确定性实现」。 另:tiling 的 UB 分块上限改为由 GetCoreMemSize(UB) 实算,不再写死。 各缺陷的成因与影响见关联 Issue。 ## 关联的Issue 关联Issue #5835 ## 测试 - 编译:builtin 四算子 rc=0;g++-13 / g++-14 各自零 error 零 warning。 - kernel 泛化(两方)8397 例、kernel 三方(cross_check)199 例,均 100% PASS。 - aclnn / geir / e2e(tf) 三条通路四算子各自 100% PASS。 - 确定性:固定输入连跑 5 次,输出逐位一致。 ## 文档更新 更新四个算子的 README.md、ScatterDiv/ScatterMul 的 aclnn 资料,以及 docs/zh/op_api_list.md 的确定性说明列。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!10347 | 29 天前 |
ScatterMin
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:实现兼容tf.compat.v1.scatter_min的功能,将tensor updates中的值按指定的索引tensor indices逐元素取最小值更新到tensor var的切片上。若有多于一个updates值作用到var的同一个切片,则依次在该切片上取最小值。属于原地(in-place)更新,输出复用输入var。规则如下:
var[indices[i],...]=min(var[indices[i],...],updates[i,...])var[indices[i], ...] = \min(var[indices[i], ...], updates[i, ...]) var[indices[i],...]=min(var[indices[i],...],updates[i,...])
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| var | 输入 | 支持空Tensor。表示待被更新的张量,Device侧的aclTensor,原地更新。shape支持1维及以上,数据类型需与updates一致。 | FLOAT16、FLOAT32、INT32、INT8、UINT8 | ND |
| indices | 输入 | 支持空Tensor。表示待更新的索引张量,Device侧的aclTensor。shape支持1维及以上,数据类型为INT32或INT64。支持索引越界,越界索引(小于0或大于等于var第一维)会被静默跳过,不做更新。 | INT32、INT64 | ND |
| updates | 输入 | 支持空Tensor。表示需要与var逐元素取最小值的张量,Device侧的aclTensor。shape支持1维及以上,需满足updates.shape = indices.shape + var.shape[1:],数据类型需与var一致。 | FLOAT16、FLOAT32、INT32、INT8、UINT8 | ND |
| var | 输出 | 支持空Tensor。表示更新后的张量,Device侧的aclTensor,与输入var共享内存。shape和数据类型均与输入var一致。 | FLOAT16、FLOAT32、INT32、INT8、UINT8 | ND |
| use_locking | 属性 | HOST侧的bool值,是否对更新加锁,默认false。 | bool | - |
约束说明
- 确定性计算:默认确定性实现。
- var的首维大小不超过INT32_MAX。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_scatter_min | 通过aclnnScatterMin接口方式调用ScatterMin算子。 |