| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(act_ulq_clamp_max_grad): 注册 Host UT 构建链、修正样例与 README 约束 Co-authored-by: zhou-liang1027<zhouliang88@huawei.com> # message auto-generated for no-merge-commit merge: !12025 merge fix/act_ulq_clamp_max_grad-ut-example-rank into master fix(act_ulq_clamp_max_grad): 注册 Host UT 构建链、修正样例与 README 约束 Created-by: zhou-liang1027 Commit-by: zhou-liang1027 Merged-by: cann-robot Description: ## 描述 fix(act_ulq_clamp_max_grad): 注册 Host UT 构建链、修正样例与 README 约束 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/7318 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12025 | 7 天前 | |
feat: 增加 ascend350 平台支持(22 个算子) Co-authored-by: wenqi_wu<wenqiwu0628@163.com> # message auto-generated for no-merge-commit merge: !11038 merge adapt-ascend350 into master feat: 增加 ascend350 平台支持(22 个算子) Created-by: wenqi_wu Commit-by: wenqi_wu Merged-by: cann-robot Description: ## 描述 为 22 个算子增加 ascend350(arch35)平台支持,并将 Threshold 的 aclnn 接口 SocVersion BF16 判断重构为 NpuArch 判断。 算子列表(22 个): - activation: Relu6D、SoftplusGrad、Threshold - index: InplaceUpdate、ScatterNonAliasingAdd、SparseSegmentSumGrad - loss: SmoothL1Loss、SmoothL1LossGrad - norm: LpNormUpdate - optim: FusedMulApplyMomentum、FusedMulApplyMomentumExtern、SparseApplyAdadelta、SparseApplyFtrl、SparseApplyFtrlV2、SparseApplyProximalAdagrad、SparseApplyRMSProp - pooling: Dilation2D - quant: ActULQClampMaxGrad、ActULQClampMinGrad、ActsULQInputGrad、GroupedDynamicMxQuantWithDualAxis、SwigluBackwardMxQuantWithDualAxis 改动内容: 1. CMakeLists:SUPPORT_COMPUTE_UNIT 追加 ascend350,SUPPORT_TILING_DIR 追加 arch35; 2. op_host/*_def.cpp:追加 AICore().AddConfig("ascend350", ...); 3. op_kernel/CMakeLists:COMPUTE_UNITS 追加 ascend350; 4. 3 个算子复制 op_host/config/ascend950/*.json 到 ascend350/(ScatterNonAliasingAdd、GroupedDynamicMxQuantWithDualAxis、SwigluBackwardMxQuantWithDualAxis); 5. Threshold op_api/aclnn_threshold.cpp:GetDtypeSupportList 的 SocVersion 判断重构为 NpuArch 判断。 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6131 ## 测试 <!--TODO--> ## 文档更新 无需更新文档 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11038 | 13 天前 | |
fix(quant): acts_ulq初始化nddmaParams_槽位constantValue消除未初始化读 Co-authored-by: dengguojie<dengguojie@huawei.com> # message auto-generated for no-merge-commit merge: !12893 merge fix/18 into master fix(quant): acts_ulq初始化nddmaParams_槽位constantValue消除未初始化读 Created-by: dengguojie Commit-by: dengguojie Merged-by: cann-robot Description: ## 描述 ActsULQ( quant/acts_ulq,arch35)acts_ulq_kernel.h 成员数组 AscendC::MultiCopyParams<T, ND> nddmaParams_[3] 的 constantValue 成员无默认成员初始化,Init() 只填 loopInfo 从未写入该成员;而三参 NDDMA DataCopy(dst, src, params) 重载会无条件按值读取 params.constantValue(与是否设置 pad 无关)——构成确定性未初始化读 UB。mssanitizer(mSSAN --tool initcheck,op_debug_config=sanitizer)插桩运行检出:每个 aiv 核固定 3 处 uninitialized read of size 4 on PRIVATE(fp16 用例为 size 2),fp32/fp16 × RANK4/RANK8 × 单核/多核用例均命中(多核按核数线性放大),语句级栈帧 #0 .../arch35/acts_ulq_kernel.h:427(CopyInBrc() 内结构体按值拷贝处)。正常态无数值影响(pad 未设置时该值语义不被消费),仅插桩可见。详见关联 Issue。 修复:Init() 槽位循环内逐槽补一行 nddmaParams_[inp].constantValue = (T)0;,附 1 行防复发注释;改动 +2/−0,仅 1 个文件:quant/acts_ulq/op_kernel/arch35/acts_ulq_kernel.h。契约对齐仓内范本:norm/bn_training_reduce/op_kernel/arch35/bn_training_reduce_small_r.h:161({loopInfo, 0} 聚合初始化)、norm/batch_norm3_d/op_kernel/arch35/batch_norm3d_ra_full_reduce.h:233、quant/ascend_requant/op_kernel/arch35/ascend_requant_kernel.h:170(params.constantValue = (T)0; 调用方逐成员清零先例)。 ## 关联的Issue Fixes #7508 ## 测试 - mssanitizer initcheck 插桩:3 个触发用例(5D fp32 单核 / 1D fp32 三核 / 2D fp16)修复前合计 **15× ERROR(3+9+3)→ 修复后 0 ERROR(No error detected)**; - 正常态(无插桩)7D 多核锚点用例 perf PASS + oob 越界检查全 OK,修复前后不变(PASS→PASS); - Tiling UT 11/11 通过,修复前后不倒退; - 全量回归 207 用例(数值/执行/oob 三门):四分类对账 **PASS→FAIL = 0(零回归)**——FAIL→PASS 3(mSAN 转绿)+ PASS→PASS 1 + 新增覆盖 202;另有 4 例差异为首次数值执行无基线的存量形态(亚 ULP/round-tie 数值边界与 tiling 层非同形 broadcast 拒绝,非本修改引入); - pre-commit 12 hooks 全 PASS(clang-format / codespell / OAT Compliance 等)。 ## 决策与权衡 - 修复选型:Init() 槽位循环内逐槽显式清零(本方案,1 行)vs 声明处整体聚合初始化(触碰面大、需重排既有 Init 逻辑)——选最小修改面,与 ascend_requant_kernel.h:170 调用方逐成员清零先例一致; - 数值中性论证:constantValue 仅在 pad 设置时被语义消费,本算子 NdDmaConfig pad 未设置(unsetPad),清零不改变任何搬运语义——全量回归零退化 + 正常态 perf/oob 不变佐证; - 范围控制:仅修 acts_ulq 本算子(Init() 内 1 行 + 注释),不扩展到仓内其他 MultiCopyParams 使用方(存量面另行专项评估);框架侧 MultiCopyParams.constantValue 增加默认成员初始化属 CANN 框架仓事项,不在本仓范围。 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!12893 | 4 天前 | |
fix(acts_ulq_input_grad): TilingData 精简、示例规范、golden 口径、infershape/Verify 对齐 A2(含原 !12970) Co-authored-by: gcw_YBIAEfqJ<wangweidong15@huawei.com> # message auto-generated for no-merge-commit merge: !12900 merge fix/acts-ulq-input-grad-scan into master fix(acts_ulq_input_grad): TilingData 精简、示例规范、golden 口径、infershape/Verify 对齐 A2(含原 !12970) Created-by: gcw_YBIAEfqJ Commit-by: gcw_YBIAEfqJ Merged-by: cann-robot Description: > 本 PR 合并了原 !12900(扫描问题修复)与 !12970(A2 校验对齐)的全部提交,!12970 已关闭。 > **更新(2026-10-29)**:按需求方要求回退 README.md 的改动,本 PR 现仅含代码与测试改动(5 个提交 / 9 个文件)。 ## 一、扫描问题修复(3 项) 1. **TilingData 精简为 5 字段**: ubLoopOfFormerBlock/ubTailOfFormerBlock/ubLoopOfTailBlock/ubTailOfTailBlock 为 kernel 不消费的派生量(kernel 按 blockLength_/ubFormer_ 自行推导),删除以消除冗余与双源不一致;tiling 计算与 UT 断言同步精简。 2. **GEIR 示例规范**:array_ops.h → ops_proto_legacy.h、ge_error_codes.h → graph/error_codes.h(消除弃用告警);atol 由 1.22e-3 修正为 spec fp32 口径 1.22e-4(2^-13,量化计算类社区标准)。 3. **golden 口径对齐**:fp16 升 fp32 计算后降回原 dtype(对齐需求交付包 golden,{0,1} 掩码合同域内位等价);__golden__ 补 geir 通路(图模式为主交付通路,本算子无单算子接口/e2e,仅 kernel+geir 两条)。 ## 二、infershape / InferDataType 对齐 A2(2 项) 4. **infershape 校验分层对齐 A2**(canndev op_proto/acts_ulq_input_grad.cc): - 未知 rank(新框架 1 维 [-2])→ 跳过维数/逐维校验,输出透传 [-2],运行期由 Tiling 兜底 - 含动态维(-1)→ 跳过逐维值校验;全静态时仍逐维严格相等(不支持 broadcast) - 与 A2 的有意差异:A2 的 is_dynamic 对两掩码用了不同 API(min 用 IsUnknownShape()、max 用 IsUnknownDimNum(),属笔误导致放宽不对称),本实现对三输入统一按「是否含 -1 维」判定 - **新增 rank 范围校验**(spec rank_range: [0,8],对应 error_codes.shape_mismatch 的 rank 越界):此前仅由编译管线 para_check(RANK_LIMIT=8, E80012)提供,算子自身无拦截且与编译通道形态耦合;补入后不依赖通道形态,报错更早更明确 5. **补 Verify 等价校验**(两掩码 dtype 必须一致):对齐 A2 的 IMPLEMT_VERIFIER。新框架无独立 Verify 注册位(本仓亦无算子使用 CheckSupport),故落在 InferDataType——同为图编译期执行且早于 GE 类型转换插入,拦截时机与 A2 Verify 一致。**刻意不在此校验 y_grad 与 mask 的组合白名单**(仍留在 Tiling),以保留 GE 对交叉类型自动插 Cast 归一的能力。 ## 三、验证 **UT**:25/25 通过(tiling 14 + infershape 11);infershape 新增 5 例(静态 y + 动态 mask、未知 rank + 已知 rank mask、rank 不一致、rank=8 上界、rank=9 越界) **pre-commit**:全量通过(clang-format / ruff / codespell / OAT 合规) **上板(Ascend950PR,自编 vendor 包)**: | 用例 | built-in 包 | 本 PR 编包 | |---|---|---| | 92 例精度用例(4 组合 × shape/极值/边界) | 全 PASS | **全 PASS(无回归)** | | 三方比对(NPU/golden/torch 标杆) | 93 PASS | **93 PASS / 0 FAIL** | | 两掩码 dtype 不一致(bool+fp16、fp16+fp32、bf16+fp16) | 未拦截(GE Cast 后静默计算) | **图编译期正确拒绝** ← 第 5 项目标效果 | | rank=9 | 拒绝(编译管线) | **拒绝(算子自身 infershape)** | | shape 不一致 / 同 size 异维 [4,8]vs[8,4] | 拒绝 | 拒绝 | | 交叉类型 y=fp16 + 两掩码=fp32 | 接受(GE Cast) | **接受且值正确**(保留能力) | | 输出 dtype 声明与 y 不一致 | — | 接受;InferDataType 归一为 y 的 dtype,值正确 | 新 Verify 的错误信息实测含算子标识、函数名、FILE:LINE 与实际 dtype 值: [acts_ulq_input_grad_graph_infer.cpp:47][Verify4ActsULQInputGrad] OpName:[p] The type of clamp_min_mask must be same as clamp_max_mask, but got clamp_min_mask=27, clamp_max_mask=1 其他既有验证:GEIR 示例重编零弃用告警 + 上板 ALL PASS;golden 合同域 6 dtype 组合位一致、极值 IEEE(inf 透传 / inf×0=nan);TTK 284 例重放两方/三方全 PASS。 ## 四、说明 - 与 master 最新无文件冲突(upstream 新增提交未触碰本算子目录) - 推送时使用 SKIP=pre-push-build 定向旁路本地构建门禁:门禁失败源于 master 上 matmul 等算子引用 platform_ascendc::SocVersion::ASCEND350 而本机 CANN 9.3.0 该枚举无此值(9 处编译错误,**与本算子无关**,本算子在门禁日志中 0 报错);LFS 钩子正常执行 - 回退 README 后已逐文件校验:9 个代码文件的 blob 校验和与回退前(已完成 UT 25/25 + 上板验证的状态)完全一致,验证结论直接沿用 See merge request: cann/ops-nn!12900 | 2 天前 | |
新增4个HiFloat4量化算子 Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12451 merge hif4_quant into master 新增4个HiFloat4量化算子 Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 (对应 HEAD 提交 feat: 拆分新增4个HiFloat4量化算子,共改动 120 个文件,+14755)新增 4 个 **HiFloat4(HiF4)量化**算子。4 个算子均基于 HiFloat4(S1P2,4-bit)三层缩放架构(Block Scale Ea / Sub-block Scale Eb / Micro-block Scale Ec),目标平台为 ascend960dt。 主要改动如下: 1. **新增 4 个 HiFloat4 量化算子** - aclnnAntiHiF4Quant(AntiHiF4Quant):将 HiF4(S1P2)量化数据按三层缩放因子(Ea/Eb/Ec)反量化为 FP16/BF16,按 scale shape 自动判定 PER_CHANNEL / PER_HEAD 模式。 - aclnnDynamicHiF4Quant(DynamicHiF4Quant):沿指定 axis 按 Block=64 / Sub-block=8 / Micro-block=4 三层缩放的在线动态量化,继承 DynamicMxQuant 架构。 - aclnnDynamicBlockHiF4Quant(DynamicBlockHiF4Quant):同时沿 -1、-2 轴按 64×64 基本块(Sub-block 8×8、Micro-block 4×4)三层缩放动态量化,分别输出 -1/-2 轴的 scale1、scale2。 - aclnnGroupedDynamicHiF4Quant(GroupedDynamicHiF4Quant):按 group_index 分组、组内按 64 元素为一块的三层缩放动态量化。 - 每个算子均包含:op_api(aclnn 对外接口 + 内部 l0op 接口)、op_graph(proto)、op_host(def / infershape / arch35 tiling,含 tail 与 not_tail 分支)、op_kernel(arch35 内核,含 common / tail / not_tail / struct / tilingdata)、docs(aclnn API 文档)、examples/arch92、tests/ut(op_host 的 infershape/tiling + op_kernel)、README,以及 op_host/config/ascend960dt 下的 *_binary.json 与 *_simplified_key.ini。 - 算子原型使用 ge::DT_HIFLOAT4 / DT_HIFLOAT4_SCALE,并在 *_def.cpp 中注册 ascend960dt。 ## 关联的Issue 无。 ## 测试 - 新增各算子 op_host UT(infershape、tiling)与 op_kernel UT。 - 新增各算子的 aclnn 示例(examples/arch92/test_aclnn_*_hi_f4_quant.cpp)。 - 通过 ascend960dt 编译与静态检查。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12451 | 11 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
nn仓121回合主线黄迁蓝 Co-authored-by: qq_52874943<gaomingyuan3@h-partners.com> # message auto-generated for no-merge-commit merge: !10361 merge master into master nn仓121回合主线黄迁蓝 Created-by: qq_52874943 Commit-by: qq_52874943 Merged-by: cann-robot Description: ## 描述 本 PR 为 Erfinv 算子新增 ascend960DT 平台的支持,包括新增该平台下的算子内核二进制配置、在算子定义中注册 ascend960DT 配置,并将该平台加入算子二进制编译配置的 compute_units 列表,使 Erfinv 算子能够在 ascend960DT 上编译运行。 ## 关联的Issue 关联Issue[#6917](https://gitcode.com/cann/ops-nn/issues/6917) ## 测试 本地已完成新精度对比与性能测试,通过静态检查、蓝区冒烟、算子ST以及算子二级冒烟 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!10361 | 12 天前 | |
fix: 错误码整改复检与检视问题修复 Co-authored-by: gcw_mJtIrnnZ<wuyifan67@h-partners.com> # message auto-generated for no-merge-commit merge: !12993 merge fix-quant-error-code-followup into master fix: 错误码整改复检与检视问题修复 Created-by: gcw_mJtIrnnZ Commit-by: gcw_mJtIrnnZ Merged-by: cann-robot Description: ## 描述 E9****替换为正式结构化错误码,进行整改。 ## 关联的Issue 关联Issue [#7622](https://gitcode.com/cann/ops-nn/issues/7622) ## 测试 编译成功和UT测试成功 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12993 | 3 天前 | |
AscendRequant, BatchNormExt2, EuclideanNorm等35个算子适配350 Co-authored-by: wsunmoon<wangming176@huawei.com> # message auto-generated for no-merge-commit merge: !11873 merge dvlite into master AscendRequant, BatchNormExt2, EuclideanNorm等35个算子适配350 Created-by: wsunmoon Commit-by: wsunmoon Merged-by: cann-robot Description: ## 描述 AscendRequant, BatchNormExt2, EuclideanNorm等35个算子适配350: 新增350二进制配置json文件 CMakeLists.txt文件配置350 算子信息库新增350 ## 关联的Issue 关联Issue [#7755](https://gitcode.com/cann/ops-nn/issues/7755) ## 测试 编译正常; UT, ST冒烟通过 ## 文档更新 不涉及 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11873 | 2 天前 | |
feat(dvlite): 29 个算子适配 ascend350 Co-authored-by: liuhongzheng<liuhongzheng2@huawei.com> # message auto-generated for no-merge-commit merge: !11927 merge master into master feat(dvlite): 29 个算子适配 ascend350 Created-by: zoujiamin123 Commit-by: liuhongzheng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。-->29 个算子适配 ascend350 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000-->https://gitcode.com/cann/ops-nn/issues/7694 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11927 | 4 天前 | |
fix: 修复 dequant_situ_quant 校验与 kernel 五处缺陷 Co-authored-by: demoauguste<zhanghao418@huawei.com> # message auto-generated for no-merge-commit merge: !13106 merge submit into master fix: 修复 dequant_situ_quant 校验与 kernel 五处缺陷 Created-by: demoauguste Commit-by: demoauguste Merged-by: cann-robot Description: # fix: 修复 dequant_situ_quant 校验与 kernel 五处缺陷 ## 描述 修复 quant/dequant_situ_quant(aclnnDequantSituQuant)的 5 处缺陷,覆盖输出校验、UB 容量估算、量化取整、MoE 分组残留数据和输入校验一致性: 1. **yOut/yScale 前导维逐维校验**(op_host/dequant_situ_quant_tiling.cpp):原实现只校验 rank 与最后一维,声明更小前导维的 y 仍返回成功,kernel 按 x 行数写入导致越界写。现对 y 前导维、yScale(x.shape[:-1])逐维校验,不匹配时首段拒绝。 2. **UB 容量估算与 kernel 实际分配对齐**: - K3 kernel(INT32/BF16/FP16)的高阶 Sigmoid API 有未计入估算的隐藏 tmp buffer,大 H 时越出 UB 触发 507035(vector core exception),改为手写 1/(1+exp(-gate)),UB 需求严格等于声明 buffer; - tiling 的 tempBytes 由 inDimy×4 修正为 3×outDimy×4,与 kernel tmpBuf 实际尺寸一致; - INT8 路径 quantBuf_ 计入"标量 scale + 向量 offset"场景; - UB 预留由 1024 提高到 8192,覆盖 TPipe 管理开销。 3. **量化取整改 trunc**(op_kernel/dequant_situ_quant.h):两处 CastFloatToInt8 首步由 CAST_RINT(round-half-even)改为 CAST_TRUNC,与资料公式 y = trunc(situOut/scale) 一致(修复前 38% 元素差 1 LSB)。 4. **group_index 未覆盖行写零**(K3 Process/ZeroOutRows):sum(group_index) < 行数 时剩余行的 y/y_scale 原样保留脏数据且返回 0,现按核分工显式写零,与 torch 封装的 at::zeros 口径一致。清零使用 Duplicate<float>(按 32B 对齐区域覆盖 y 与 y_scale),兼容不支持 Duplicate<int8_t> 的 CANN 版本。 5. **输入校验与资料对齐**:补齐 x/y/yScale 空 tensor 校验;dynamic 模式拒绝 quant_offset(资料声明仅 static 有效,且原 kernel 该组合会越界写 UB);INT32 路径接受资料允许的标量 (1,) 的 weight_scale/activation_scale/bias(新增 weightScaleIsOne/activationScaleIsOne/biasIsOne/quantOffsetIsOne tiling 字段,kernel 标量走 GetValue(0)+Muls/Adds,GM 拷贝量同步减小);dynamic + 向量 offset 的 UB 越界写随上述校验消除。 host 侧校验日志统一为注册错误码宏风格(OP_LOGE_FOR_INVALID_SHAPE_WITH_REASON 等)。 ## 关联的Issue - #7109 aclnnDequantSituQuant 未校验 yOut 前导维,声明更小的 y 仍返回 0 并 GM 越界写 - #7110 UB 容量估算与 kernel 实际分配不一致,资料合法输入触发 507035 向量核异常 - #7111 量化取整为 round-half-even,资料写 trunc,四条 dtype 路径输出系统性差 1 LSB - #7112 sum(group_index)<行数 时不写剩余行,y/y_scale 残留脏数据且返回 0 - #7113 输入校验与错误码同资料不一致(必选空指针/空 tensor/static 缺 offset/int32 标量 shape) ## 测试 - **真机验证(Atlas A2 910B3,aarch64,CANN 9.2)**:编译 custom opp 包后通过 ctypes 直调两段式接口跑 12 项验证,连续两轮 **12/12 PASS**:#7109 越界场景首段拒绝且 guard 完好;#7110 bf16[1,14336](issue 原复现 shape)不再 507035(首段明确拒绝或正常执行);#7111 与 trunc 参考 0 差异、与 round 参考差 101/256;#7112 未覆盖行 y=0/y_scale=0;#7113 四项校验面全部符合资料。 - **回归**:合法基线(int8/bf16/int32 各路径)、上游新增 BF16/FP16 group_index 用例均通过(tiling UT 已合入 4 个新上游用例 + 4 个回归用例,共 11 个 TEST_F)。 - **另在 Ascend 950PR 环境交叉验证**(该平台官方不支持本算子,仅作参考):核心修复场景全部通过。 ## 文档更新 无(仅代码与 UT)。资料《aclnnDequantSituQuant》的公式与约束不变,本次改动使实现与资料一致。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13106 | 3 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
适配350:dequantize 新增 ascend350 平台支持 Co-authored-by: zhouliang<zhouliang88@huawei.com> # message auto-generated for no-merge-commit merge: !12335 merge master into master 适配350:dequantize 新增 ascend350 平台支持 Created-by: zhou-liang1027 Commit-by: zhouliang Merged-by: cann-robot Description: ## 描述 适配350:dequantize 新增 ascend350 平台支持 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/6930 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12335 | 3 天前 | |
新增4个HiFloat4量化算子 Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12451 merge hif4_quant into master 新增4个HiFloat4量化算子 Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 (对应 HEAD 提交 feat: 拆分新增4个HiFloat4量化算子,共改动 120 个文件,+14755)新增 4 个 **HiFloat4(HiF4)量化**算子。4 个算子均基于 HiFloat4(S1P2,4-bit)三层缩放架构(Block Scale Ea / Sub-block Scale Eb / Micro-block Scale Ec),目标平台为 ascend960dt。 主要改动如下: 1. **新增 4 个 HiFloat4 量化算子** - aclnnAntiHiF4Quant(AntiHiF4Quant):将 HiF4(S1P2)量化数据按三层缩放因子(Ea/Eb/Ec)反量化为 FP16/BF16,按 scale shape 自动判定 PER_CHANNEL / PER_HEAD 模式。 - aclnnDynamicHiF4Quant(DynamicHiF4Quant):沿指定 axis 按 Block=64 / Sub-block=8 / Micro-block=4 三层缩放的在线动态量化,继承 DynamicMxQuant 架构。 - aclnnDynamicBlockHiF4Quant(DynamicBlockHiF4Quant):同时沿 -1、-2 轴按 64×64 基本块(Sub-block 8×8、Micro-block 4×4)三层缩放动态量化,分别输出 -1/-2 轴的 scale1、scale2。 - aclnnGroupedDynamicHiF4Quant(GroupedDynamicHiF4Quant):按 group_index 分组、组内按 64 元素为一块的三层缩放动态量化。 - 每个算子均包含:op_api(aclnn 对外接口 + 内部 l0op 接口)、op_graph(proto)、op_host(def / infershape / arch35 tiling,含 tail 与 not_tail 分支)、op_kernel(arch35 内核,含 common / tail / not_tail / struct / tilingdata)、docs(aclnn API 文档)、examples/arch92、tests/ut(op_host 的 infershape/tiling + op_kernel)、README,以及 op_host/config/ascend960dt 下的 *_binary.json 与 *_simplified_key.ini。 - 算子原型使用 ge::DT_HIFLOAT4 / DT_HIFLOAT4_SCALE,并在 *_def.cpp 中注册 ascend960dt。 ## 关联的Issue 无。 ## 测试 - 新增各算子 op_host UT(infershape、tiling)与 op_kernel UT。 - 新增各算子的 aclnn 示例(examples/arch92/test_aclnn_*_hi_f4_quant.cpp)。 - 通过 ascend960dt 编译与静态检查。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12451 | 11 天前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
docs(dynamic_block_quant): 修正 V2 A2 收窄段 colBlockSize 取值与 V1 错误码表 rowspan Co-authored-by: cuijie25<cuijie24@h-partners.com> # message auto-generated for no-merge-commit merge: !13074 merge fix/issue-7562-dynamic-block-quant-doc into master docs(dynamic_block_quant): 修正 V2 A2 收窄段 colBlockSize 取值与 V1 错误码表 rowspan Created-by: cuijie25 Commit-by: cuijie25 Merged-by: cann-robot Description: ## 描述 处理 #7562 时顺带发现的 2 处文档瑕疵(与 #7562 的核心裁定「561002 为 tiling 阶段失败统一包装、仓内不可达 161002」正交的纯文档资产修正): 1. **V2 A2 收窄段 colBlockSize 取值**:文档写「仅支持取值1或128」,但 A2 i8 tiling 路径要求 colBlockSize 严格等于 128( dynamic_block_quant_i8_tiling.cpp 中 OP_CHECK_IF(tilingParam.blockSizeCol != BLOCK_SIZE_128, ...),取 1 实际被拒绝返回 561002);V1 文档同一约束正确写「仅支持取值128」。V2 对齐修正为 128。 2. **V1 错误码表 rowspan 残留**:ACLNN_ERR_PARAM_INVALID/161002 的 rowspan=\ 为历史残留(当前仅 1 行子项),修正为 1,纯格式修正。 ## 关联的Issue [#7562](https://gitcode.com/cann/ops-nn/issues/7562) ## 测试 纯文档变更。已核对代码:dynamic_block_quant_i8_tiling.cpp 的 colBlockSize 白名单为严格 128;V1 文档同款约束的既有写法即为「仅支持取值128」。 ## 文档更新 更新 quant/dynamic_block_quant/docs/aclnnDynamicBlockQuantV2.md(colBlockSize 取值 1 行)与 aclnnDynamicBlockQuant.md(rowspan 2 行)。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13074 | 2 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
新增4个HiFloat4量化算子 Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12451 merge hif4_quant into master 新增4个HiFloat4量化算子 Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 (对应 HEAD 提交 feat: 拆分新增4个HiFloat4量化算子,共改动 120 个文件,+14755)新增 4 个 **HiFloat4(HiF4)量化**算子。4 个算子均基于 HiFloat4(S1P2,4-bit)三层缩放架构(Block Scale Ea / Sub-block Scale Eb / Micro-block Scale Ec),目标平台为 ascend960dt。 主要改动如下: 1. **新增 4 个 HiFloat4 量化算子** - aclnnAntiHiF4Quant(AntiHiF4Quant):将 HiF4(S1P2)量化数据按三层缩放因子(Ea/Eb/Ec)反量化为 FP16/BF16,按 scale shape 自动判定 PER_CHANNEL / PER_HEAD 模式。 - aclnnDynamicHiF4Quant(DynamicHiF4Quant):沿指定 axis 按 Block=64 / Sub-block=8 / Micro-block=4 三层缩放的在线动态量化,继承 DynamicMxQuant 架构。 - aclnnDynamicBlockHiF4Quant(DynamicBlockHiF4Quant):同时沿 -1、-2 轴按 64×64 基本块(Sub-block 8×8、Micro-block 4×4)三层缩放动态量化,分别输出 -1/-2 轴的 scale1、scale2。 - aclnnGroupedDynamicHiF4Quant(GroupedDynamicHiF4Quant):按 group_index 分组、组内按 64 元素为一块的三层缩放动态量化。 - 每个算子均包含:op_api(aclnn 对外接口 + 内部 l0op 接口)、op_graph(proto)、op_host(def / infershape / arch35 tiling,含 tail 与 not_tail 分支)、op_kernel(arch35 内核,含 common / tail / not_tail / struct / tilingdata)、docs(aclnn API 文档)、examples/arch92、tests/ut(op_host 的 infershape/tiling + op_kernel)、README,以及 op_host/config/ascend960dt 下的 *_binary.json 与 *_simplified_key.ini。 - 算子原型使用 ge::DT_HIFLOAT4 / DT_HIFLOAT4_SCALE,并在 *_def.cpp 中注册 ascend960dt。 ## 关联的Issue 无。 ## 测试 - 新增各算子 op_host UT(infershape、tiling)与 op_kernel UT。 - 新增各算子的 aclnn 示例(examples/arch92/test_aclnn_*_hi_f4_quant.cpp)。 - 通过 ascend960dt 编译与静态检查。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12451 | 11 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
[test]DynamicMxQuantWithDualAxis 补充 -1 轴尾块 mxscale2 搬出 UT 用例 Co-authored-by: hejc_hw<hejianchao1@huawei.com> # message auto-generated for no-merge-commit merge: !13226 merge test/dymq-dual-axis-tail-ut into master [test]DynamicMxQuantWithDualAxis 补充 -1 轴尾块 mxscale2 搬出 UT 用例 Created-by: jianchao_He Commit-by: hejc_hw Merged-by: cann-robot Description: ## 描述 为 DynamicMxQuantWithDualAxis(arch35)补充 -1 轴尾块场景的 UT 覆盖。 CopyOut 中 mxscale2 搬出的源 stride 已在 commit 690291182 中修正为按 ubRowLen_ 推算 ((2 * ubRowLen_ - CeilAlign(2 * dataLen, 32)) / 32):UB 中一个 row-pair 固定占 2 * blockW, 与本次 task 的有效列数 dataLen 无关。原有 UT 全部使用 dimNeg1 = blockW = 256(满块), 未覆盖 dimNeg1 < blockW 的尾块分支,本 PR 补齐该分支的回归用例。仅新增 UT,不改动 kernel。 ## 关联的Issue 关联 Issue #[7826](https://gitcode.com/cann/ops-nn/issues/7826) ## 测试 新增 2 个 CPU 调试用例(tests/ut/op_kernel/test_dynamic_mx_quant_with_dual_axis.cpp): | 用例 | dimNeg1 | 说明 | | --- | --- | --- | | test_case_tail_dimNeg1_200_unaligned | 200 | 尾块且未 32B 对齐 | | test_case_tail_dimNeg1_224_aligned | 224 | 尾块但已 32B 对齐 | 公共 tiling 参数:dimNeg2 = 128、dimNeg2Tail = 64、splitBlockH = 64、blockW = 256、 dimNeg2SplitBlockNum = 2、dimNeg1BlockNum = 1、scaleAlg = 0、roundMode = rint、 dstType = FLOAT8_E5M2、blockDim = 2;kernel 入口 ::dynamic_mx_quant_with_dual_axis<0, 4, 0>。 本地验证命令:bash build.sh -u --opkernel --ut_mode=fast。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:补充 UT 用例 ## AI/Agent生成声明 - [ ] AI辅助编写 See merge request: cann/ops-nn!13226 | 7 小时前 | |
fix(dynamic_quant): arch35 pertoken 在中等 shape 补开 double buffer,消除性能断崖 Co-authored-by: tianye<tianye82@h-partners.com> # message auto-generated for no-merge-commit merge: !13027 merge br_fix_dquant_perf_1029 into master fix(dynamic_quant): arch35 pertoken 在中等 shape 补开 double buffer,消除性能断崖 Created-by: transformer910 Commit-by: tianye Merged-by: cann-robot Description: ### 描述 **问题** arch35 的 DynamicQuantRegbaseTiling::CalculateTilingData() 用 calcDbSize 判断能否开 double buffer。该估算把 scale / offset 也按 **每元素 4 字节** 计入(pertoken 无 smooth / 有 smooth 分别为 22 / 26 B/elem),而 kernel 侧(dynamic_quant_regbase_full_load.h 的 InitBuffer)scale / offset 是**每核一次装载的常数项**,占用仅 Align8(multiRowNum) * 4B * 2 队列 ≤ 4KB。真实占用是 x / y(/ smooth)的 6 / 10 B/elem。 估算偏差造成一段"高不成低不就"的形状区间:单个 row 放得下(calcSize <= UB),但按 calcDbSize 算放不下两份,于是掉进 **单行、无 double buffer** 的分支,MTE2 与 Vector 无法流水,性能断崖。UB 越大区间越宽,例如: | UB | 无 smooth(16 对齐长度区间) | 有 smooth | |---|---|---| | 192K | 8896 ~ 17776 | 7536 ~ 15040 | | 256K | 11872 ~ 23728 | 10048 ~ 20080 | | 384K(A6) | 17840 ~ 35648 | 15088 ~ 30160 | **改动** 只改 tiling,kernel 与 TPL 定义零改动: 1. 在 quantMode_ 被改写前记录 isPerToken = (quantMode_ == TPL_COMMON_FULL_LOAD && groupNum == 0),perchannel 已在上层分流、pertensor / MOE 不满足该条件; 2. 在原 calcDbSize > maxUseUbSize 分支内,若 isPerToken,按 kernel 真实占用重算可容纳 row 数: frame = 2 * ((1 + smooth) * 2 * Align16(L) + AlignOut(L)),AlignOut 为 int4 → 64、其余 → 32; 再扣除 PT_DB_CONST_BYTES(4096) + PT_DB_RESERVED_BYTES(2048)(scale/offset 常数项上界 + 对齐/框架开销预留); 3. 重算结果 > 0 则 useDb = true,否则**完整回退**到原来的 no-DB 公式(保留兜底分支,公式与 kernel 失配时行为不变)。 因此影响面严格等于"arch35 + pertoken + 原先落入 no-DB 的那段区间",pertensor / MOE / perchannel / 原先就开 DB 或走 large-shape 的形状全部不受影响。 **效果(Ascend950PR,UB=253952)** - 中段形状 L=20000、bf16+smooth、int8 输出:tilingKey 64 → 65(开启 double buffer),输出与改动前**逐位一致**; - 仿真扫描:pertoken 的 no-DB 区间被完全消除(只要能放下一个 row 就能开 DB),large-shape 边界与 DB 边界不变。 ### 关联的Issue https://gitcode.com/cann/ops-nn/issues/7912 ### 测试 1. **tiling UT**:bash build.sh -u --ophost --ops=dynamic_quant -j32 → **33/33 PASS**;--ops=dynamic_quant_v2 → **25/25 PASS** - dynamic_quant_tiling_regbase_03(x=[1,1,11264]、bf16+smooth、int8、UB=196608)tilingKey 期望由 96 更新为 97,即本 PR 的目标行为; - 其余 29 条 tilingKey / tilingData 断言不变。 2. **aclnn 精度(TTK,A950PR 实机)**:50 例覆盖受影响区间(含/不含 smooth、int4/int8 输出、对称/非对称) - scale 50/50 ULP=0(逐位相等) - y:按 int8/int4 ≤1 LSB 判据 **50/50 PASS**;无 smooth 的 25 例**逐位一致**;非逐位元素 99 / 265331968(0.000037%) 3. **回退 A/B(pertensor 不受影响)**:HEAD~1 与 HEAD 对同一 pertensor 用例 tilingKey(72)与 tilingData **全字段一致**。 ### 文档更新 无(仅 tiling 逻辑,接口与对外行为不变)。 ### 类型标签 - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ### AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13027 | 7 小时前 | |
fix(geir examples): 修复样例 placeholder 节点名/索引与建图问题 Co-authored-by: qq_37917228<yanmingkui@huawei.com> # message auto-generated for no-merge-commit merge: !13171 merge fix/lamb_apply_optimizer_assign_placeholder_name into master fix(geir examples): 修复样例 placeholder 节点名/索引与建图问题 Created-by: qq_37917228 Commit-by: qq_37917228 Merged-by: cann-robot Description: ## 描述 修复多个 GEIR 样例( examples/test_geir_*.cpp)的建图与编译问题,涉及 19 个文件,分四类: 1. **placeholder 节点名拼接与 index 属性**(lamb_apply_optimizer_assign、apply_adagrad、lamb_apply_weight_assign、sgd、dynamic_quant_update_scatter、dynamic_quant_update_scatter_v2、wts_arq、bn3_d_training_reduce_grad、bn3_d_training_update、in_training_update_grad):宏参数 inputIndex 是整型常量,"placeholder" + inputIndex 执行的是指针偏移而非字符串拼接,非 0 时节点名从字面量中间截断甚至越界读取。改为 "placeholder" + std::to_string(inputIndex);同时把 set_attr_index(0) 统一为 inputIndex - 1——Data 的 index 属性表示该节点在整图输入中的 0 基序号,多个 Data 节点重复声明第 0 个输入与语义不符,统一后与 SetInputs 顺序一致。 2. **foreach 样例建图顺序**(foreach_add_list_inplace、foreach_addcmul_list):旧 Operator 序列化会按端口名排序,导致静态输入(alpha、scalars)被排到动态输入之前,推导实例表错位。改用 NamedIoNodeBuilder 按 IR 定义顺序构建节点,图输出改由 GNode 端口 SetOutputs 设置。 3. **Session/AddGraph 初始化**(lamb_next_m_v_with_decay、lamb_next_right、lamb_update_with_lr、lamb_update_with_lr_v2):补充 array_ops.h;Session({}) 与 AddGraph(..., {}) 的空花括号实参改为显式的 std::map<AscendString, AscendString>(),避免重载推导歧义。(lamb_next_m_v 的同类问题上游已修复,本 PR 不再改动) 4. **其他样例修正**: - in_training_update_grad:Data 占位节点改用 FORMAT_ND + 6 维 storage shape(Ascend950 CheckInternalFormat 不允许用户图 Data 节点以 NDC1HWC0 作 origin format),算子节点输入 desc 另行声明 NDC1HWC0 以满足 binary 格式白名单 - multi_add_rms_norm_dynamic_quant:修正 op_graph proto 头文件相对路径 - apply_came_part1 / apply_came_part3:删除直接 include graph_infer.cpp ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/7907 ## 测试 - OAT(OpenHarmony OSS Audit Tool)增量扫描:全部改动文件,0 问题 - 全部改动文件通过仓库 .clang-format 校验 - 本人验证记录中,lamb_apply_optimizer_assign、lamb_next_m_v* 系列、foreach×2 等样例已在 Ascend950 环境(CANN 9.3.0)按 build.sh --run_example 逐项复现与验证 - batch_norm_ext2 样例的同类问题暂不在本 PR 处理:该文件改动会连带触发 kernel ST,其中 10 个 bne2_gt1G_* 超大 shape 用例在 CI 上失败(既有问题,与本 PR 无关),待问题定位后另行提交 ## 文档更新 无需更新文档 ## 类型标签 - [x] Bug修复 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13171 | 6 小时前 | |
fix(geir examples): 修复样例 placeholder 节点名/索引与建图问题 Co-authored-by: qq_37917228<yanmingkui@huawei.com> # message auto-generated for no-merge-commit merge: !13171 merge fix/lamb_apply_optimizer_assign_placeholder_name into master fix(geir examples): 修复样例 placeholder 节点名/索引与建图问题 Created-by: qq_37917228 Commit-by: qq_37917228 Merged-by: cann-robot Description: ## 描述 修复多个 GEIR 样例( examples/test_geir_*.cpp)的建图与编译问题,涉及 19 个文件,分四类: 1. **placeholder 节点名拼接与 index 属性**(lamb_apply_optimizer_assign、apply_adagrad、lamb_apply_weight_assign、sgd、dynamic_quant_update_scatter、dynamic_quant_update_scatter_v2、wts_arq、bn3_d_training_reduce_grad、bn3_d_training_update、in_training_update_grad):宏参数 inputIndex 是整型常量,"placeholder" + inputIndex 执行的是指针偏移而非字符串拼接,非 0 时节点名从字面量中间截断甚至越界读取。改为 "placeholder" + std::to_string(inputIndex);同时把 set_attr_index(0) 统一为 inputIndex - 1——Data 的 index 属性表示该节点在整图输入中的 0 基序号,多个 Data 节点重复声明第 0 个输入与语义不符,统一后与 SetInputs 顺序一致。 2. **foreach 样例建图顺序**(foreach_add_list_inplace、foreach_addcmul_list):旧 Operator 序列化会按端口名排序,导致静态输入(alpha、scalars)被排到动态输入之前,推导实例表错位。改用 NamedIoNodeBuilder 按 IR 定义顺序构建节点,图输出改由 GNode 端口 SetOutputs 设置。 3. **Session/AddGraph 初始化**(lamb_next_m_v_with_decay、lamb_next_right、lamb_update_with_lr、lamb_update_with_lr_v2):补充 array_ops.h;Session({}) 与 AddGraph(..., {}) 的空花括号实参改为显式的 std::map<AscendString, AscendString>(),避免重载推导歧义。(lamb_next_m_v 的同类问题上游已修复,本 PR 不再改动) 4. **其他样例修正**: - in_training_update_grad:Data 占位节点改用 FORMAT_ND + 6 维 storage shape(Ascend950 CheckInternalFormat 不允许用户图 Data 节点以 NDC1HWC0 作 origin format),算子节点输入 desc 另行声明 NDC1HWC0 以满足 binary 格式白名单 - multi_add_rms_norm_dynamic_quant:修正 op_graph proto 头文件相对路径 - apply_came_part1 / apply_came_part3:删除直接 include graph_infer.cpp ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/7907 ## 测试 - OAT(OpenHarmony OSS Audit Tool)增量扫描:全部改动文件,0 问题 - 全部改动文件通过仓库 .clang-format 校验 - 本人验证记录中,lamb_apply_optimizer_assign、lamb_next_m_v* 系列、foreach×2 等样例已在 Ascend950 环境(CANN 9.3.0)按 build.sh --run_example 逐项复现与验证 - batch_norm_ext2 样例的同类问题暂不在本 PR 处理:该文件改动会连带触发 kernel ST,其中 10 个 bne2_gt1G_* 超大 shape 用例在 CI 上失败(既有问题,与本 PR 无关),待问题定位后另行提交 ## 文档更新 无需更新文档 ## 类型标签 - [x] Bug修复 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13171 | 6 小时前 | |
test(quant): 补充 aclnnDynamicQuantV2 专家数超 1024 的负向 UT Co-authored-by: cuijie25<cuijie24@h-partners.com> # message auto-generated for no-merge-commit merge: !13077 merge fix/issue-7548-dynamic-quant-v2-ut into master test(quant): 补充 aclnnDynamicQuantV2 专家数超 1024 的负向 UT Created-by: cuijie25 Commit-by: cuijie25 Merged-by: cann-robot Description: ## 描述 master 已于 7cb60e3ce(关联 #6271,修同类 561103 问题)把 aclnnDynamicQuantV2 的形状关系校验(含专家数上限)前移到第一段并返回 161002,V1-V4 四入口共用校验链路。但「专家数超过 1024」这一场景未被现有用例覆盖(\ moe_expert_num_mismatch_fail\ 仅测 group 长度与 smooth 首维不一致)。 issue #7548 报告的正是该场景(2048 专家数,CANN 9.2.0 上因发布分支未含 7cb60e3ce 而表现为 561103)。补 1 条负向 UT 锁定 master 现行为:smooth 首维/group 维度 = 2048 > 1024 → 第一段返回 161002,防回归。 ## 关联的Issue [#7548](https://gitcode.com/cann/ops-nn/issues/7548) ## 测试 A2(910B3)host mock UT,\build.sh -u --opapi --ops=dynamic_quant,dynamic_quant_v2\,三步证据链: 1. **master 原码**:**28/28 全部通过**,含新增用例 \ascend910B2_dynamic_quant_v2_moe_expert_num_exceed_1024_fail\(x fp16 [16,32] + smooth [2048,32] + group [2048] + dstType=2 → 161002)——专家数校验在第一段生效; 2. **用例有效性基线对照**:仅禁用 \MAX_EXPERT_NUM\ 上限(1024→99999999,mismatch/空指针/维度等其他校验全部原样),重跑**恰好且仅有该新增用例 1 条失败**(其余 27 条全过)——证明用例精确命中 aclnn 层的专家数校验,而非被其他校验碰巧拦截; 3. **还原复跑**:恢复 1024 后 28/28 复过。 纯 UT 补充,无代码改动。 ## 文档更新 无。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:测试用例补充 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13077 | 2 天前 | |
【fix】(fak_quant_affine_cachemask)解决rank=0(0 维标量张量)输入触发 AI Core 异常 Co-authored-by: wym_666<wangyumei11@huawei.com> # message auto-generated for no-merge-commit merge: !13049 merge fqac_rank0 into master 【fix】(fak_quant_affine_cachemask)解决rank=0(0 维标量张量)输入触发 AI Core 异常 Created-by: wym_666 Commit-by: wym_666 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 解决rank=0(0 维标量张量)输入触发 AI Core 异常 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue [#7536](https://gitcode.com/cann/ops-nn/issues/7536) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地400条atk ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13049 | 2 天前 | |
fake_quant_with_min_max_args算子精度提升 Co-authored-by: ly_cann_coder<liyao152@huawei.com> # message auto-generated for no-merge-commit merge: !12808 merge dev_quant into master fake_quant_with_min_max_args算子精度提升 Created-by: ly_cann_coder Commit-by: ly_cann_coder Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> fake_quant_with_min_max_args算子精度提升 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/wangyueting/changwei_liuyi/issues/84 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码实现优化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12808 | 6 天前 | |
dvlite soc adaptive Co-authored-by: oah28<wujiahao37@huawei.com> # message auto-generated for no-merge-commit merge: !12923 merge dvlite into master dvlite soc adaptive Created-by: oah28 Commit-by: oah28 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> dvlite(Ascend350)SOC 适配:为 33 个算子启用 ascend350 计算单元支持。 Ascend350 与 Ascend950 同为 DAV_3510 架构(regbase),共用 arch35 tiling 与 kernel 源码, 本次按仓内既有 ascend350 适配模式批量扩展: 1. **算子注册**(32 个 *_def.cpp):新增 AICore().AddConfig("ascend350", config), 复用 ascend950 同配置对象(含 apply_adam_w_quant 回归框架默认 opFile 名,与 kernel 入口 apply_adam_w_quant 一致)。 2. **构建配置**:各算子 op_host/op_kernel CMakeLists 的 SUPPORT_COMPUTE_UNIT / COMPUTE_UNIT(S) 增加 "ascend350",TILING_DIR 复用 arch35。 3. **静态二进制**:新增 19 个 op_host/config/ascend350/*_binary.json(与 ascend950 版 逐字段一致)及 2 个 ascend350/*_simplified_key.ini(adam_apply_one_assign、 fake_quant_with_min_max_args_gradient)。 4. **op_api 平台判断适配**(8 个文件):将 GetSocVersion() 硬编码 switch/if 统一改为 GetCurNpuArch() 判断,消除新增 SOC 的遗漏点: - foreach_abs/asin/neg/sign/tanh:DAV_2201 || IsRegbase(curArch) - softshrink_backward:DAV_1001 || DAV_2002 || DAV_3002 → 910 dtype 列表 - ada_layer_norm_backward:DAV_2201 || IsRegbase(curArch) 选择 grad 计算路径 - index_check:!= DAV_2201 && !IsRegbase(curArch) 决定是否跳过检查 5. **全局 kernel 编译配置**:ascendc_config.json 为 ForeachAsin/AddcdivList/SubScalarInplace/ Tanh/Exp/Abs/Sign/Neg/MaximumScalar/LambUpdateWithLrV2/ScatterMin 11 个条目补充 ascend350 compute_units 及对应 compile_options。 涉及算子(33): FastGeluV2、HardSigmoid、SoftShrinkGrad、NPUClearFloatStatus、IndexCheck、ScatterMin、 ForeachAbs/AddcdivList/Asin/Exp/MaximumScalar/Neg/Sign/SubScalarInplace/Tanh(9)、 SigmoidCrossEntropyWithLogitsGrad、SigmoidFocalLoss、AdaLayerNormGrad、 BN3DTrainingReduceGrad、BNTrainingUpdateGrad、INTrainingUpdateV2、L2NormalizeGrad、 AdamApplyOneAssign、ApplyAdamV2、ApplyAdamWQuant、ApplyProximalGradientDescent、 FusedMulApplyKerasMomentum、InplaceApplyFtrl、LambUpdateWithLrV2、SGD、 SparseApplyAdagradV2、Dequantize、FakeQuantWithMinMaxArgsGradient ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> Issue [#7724](https://gitcode.com/cann/ops-nn/issues/7724) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 冒烟通过,测试结果与950一致 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12923 | 2 天前 | |
AscendRequant, BatchNormExt2, EuclideanNorm等35个算子适配350 Co-authored-by: wsunmoon<wangming176@huawei.com> # message auto-generated for no-merge-commit merge: !11873 merge dvlite into master AscendRequant, BatchNormExt2, EuclideanNorm等35个算子适配350 Created-by: wsunmoon Commit-by: wsunmoon Merged-by: cann-robot Description: ## 描述 AscendRequant, BatchNormExt2, EuclideanNorm等35个算子适配350: 新增350二进制配置json文件 CMakeLists.txt文件配置350 算子信息库新增350 ## 关联的Issue 关联Issue [#7755](https://gitcode.com/cann/ops-nn/issues/7755) ## 测试 编译正常; UT, ST冒烟通过 ## 文档更新 不涉及 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11873 | 2 天前 | |
feat(dvlite): 29 个算子适配 ascend350 Co-authored-by: liuhongzheng<liuhongzheng2@huawei.com> # message auto-generated for no-merge-commit merge: !11927 merge master into master feat(dvlite): 29 个算子适配 ascend350 Created-by: zoujiamin123 Commit-by: liuhongzheng Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。-->29 个算子适配 ascend350 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000-->https://gitcode.com/cann/ops-nn/issues/7694 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11927 | 4 天前 | |
fix(fake_quant_with_min_max_vars_per_channel): 修复精度/健壮性问题并新增ascend350平台支持 Co-authored-by: xuxiao59<xuxiao59@huawei.com> # message auto-generated for no-merge-commit merge: !13097 merge fix/changwei into master fix(fake_quant_with_min_max_vars_per_channel): 修复精度/健壮性问题并新增ascend350平台支持 Created-by: gcw_xYUkRrAH Commit-by: xuxiao59 Merged-by: cann-robot Description: ## 描述 本 PR 对 fake_quant_with_min_max_vars_per_channel 算子进行精度修复、安全加固与平台适配,共修改 10 个文件(+967/-71 行),基于 7 轮全量验证(fix1~fix7,203 条上板用例)收敛,并完成社区精度问题的修复与线上完整用例集全量回归(见「社区精度问题修复(上游 issue 关联)」与「测试」节)。 ### 精度修复(op_kernel/arch35) - **退化通道判据**:|min|+|max|==0 改为 |scale|<FLT_MIN_NORMAL 双侧次正规判定;min==max≠0 相等通道从清零域拆出、整通道输出 NaN(对齐 TF 原生 0×inf 语义:Nudge 的 inv_scale=qRange/(max-min)=+inf → 0×inf=NaN);min==max==0 全零通道与次正规步长通道(|scale|<FLT_MIN_NORMAL)维持退化清零 - **量程溢出防护**(max-min > FLT_MAX):scale 防溢出分解 max/qRange - min/qRange;nudge 仅在 ±FLT_MAX 越界时收边;scaled 除法先行;按 qRange/2 分界双侧重建并保留越界兜底 - **narrow_range 高侧修正**:重建距离 qMax-floored 改为 qRange-floored(narrow 下差 qMin=1 个量化步长) - **NaN 传播**:floor→int32 取整吞掉的 NaN 通过 clamped-clamped 补回;min==max≠0 相等通道另经掩码 Select+Add 显式注入 NaN(inf−inf 载体;Cast<int32> 与 0-ULP Div 的 0/0 均不产生 NaN,自然传播不可用) - **golden 标量除法 fp32 化**:消除 python float/tensor 混算的 1 ULP 整数边界翻转 ### 社区精度问题修复(上游 issue 关联) 针对社区反馈的 geir 通路 L0 精度比对失败(matched_ratio≈0.48、失败用例集 22 例,见「关联的Issue」),根因三处、全部在本 PR 修复: 1. **比对参考 golden 倒置域 clamp 序**:golden 倒置通道(min>max)clamp 顺序与 TF 原生相反(先 max 后 min vs TF 先 min 后 max),致与 TF 一致的 kernel 输出被判错——clamp 序对齐 TF(先 min 后 max) 2. **kernel 相等域语义**:min==max≠0 相等通道清零输出 0,TF 原生语义为 NaN——按上述「退化通道判据」拆分并经掩码显式注入 NaN 3. **golden inv_scale 1-ULP**:inv_scale 标量除法两步舍入差 1 ULP,round 0.5 边界产生 ±1 量化级失配(8-bit 宽量程下超 0.01 绝对门)——改 fp32 tensor 单步除法 **验证**:TTK kernel 通路线上完整用例集 656 例(可执行 621 例)**619 PASS**,2 例为本算子不支持的 dtype 变体(通路不适用、非精度失败);社区点名用例 L0_tolerance_c_s_001/008 均 100% PASS。 ### 安全加固(op_host) - **Tiling**:x 未知维守卫(维<0 拒绝);CeilDiv/AlignUp 无溢出实现;MergeInputShape 连乘 + M*N + M 余量三级上界校验;num_bits 按 int64 读取后收窄 - **InferShape**:x rank∈[1,8]、min/max rank==1 且等长且==x 末维 C、num_bits∈[2,16]、输入 dtype 仅 fp32 校验;min/max 等长独立于 x 秩(未知秩时也拒绝) - **GEIR 样例**:dump 写文件返回值检查、内存泄漏修复、失败路径资源释放 ### 平台适配 - 新增 ascend350 平台注册(AddConfig,与 ascend950 共用 arch35 内核) - TF 插件仅对 rank-4 张量设置 NHWC,其他 rank 保持 ND ### 测试资产 - 新增 tests/assets/golden.py(TTK 精度比对参考,与 kernel 计算链逐行对齐,双键注册+e2e) - Kernel UT 扩充至 17 用例(新增退化/次正规/量程溢出/反向区间/nudge 端点边界,及 case_equal_nonzero_nan/case_inverted_nudged_min_side/case_both_zero_output_zero 三类语义看护:相等非零通道 NaN / 倒置通道 nudged_min 侧 / 全零通道清零) - InferShape UT 新增 5 条负向用例(rank>8/长度不匹配/num_bits 越界/非 fp32) ## 关联的Issue Fixes #7791 ## 测试 - UT 14/14 PASS(Host UT 10/10 + Kernel UT 14/14) - 设备 3 直调 TTK:历史失败用例 16/16 PASS(rc=0) - fix7 全量:Kernel 203 条三模式 100% PASS,GEIR 静态图 58/58 PASS,确定性 58 条 10 轮 MD5 全一致,内存/同步检测(memcheck/initcheck/racecheck/synccheck)无异常 - ascend950/ascend350 双平台编包 SUCCESS - 线上用例集全量回归 619 PASS(20261030) ## 文档更新 - README.md:退化规则改为 min==max≠0 输出 NaN、min==max==0 全零(对齐 TF 语义),补次正规步长约束与 narrow_range 分母说明、y 格式补 rank-4 NHWC 注释 ## 类型标签 - [x] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13097 | 2 天前 | |
fix: 错误码整改复检与检视问题修复 Co-authored-by: gcw_mJtIrnnZ<wuyifan67@h-partners.com> # message auto-generated for no-merge-commit merge: !12993 merge fix-quant-error-code-followup into master fix: 错误码整改复检与检视问题修复 Created-by: gcw_mJtIrnnZ Commit-by: gcw_mJtIrnnZ Merged-by: cann-robot Description: ## 描述 E9****替换为正式结构化错误码,进行整改。 ## 关联的Issue 关联Issue [#7622](https://gitcode.com/cann/ops-nn/issues/7622) ## 测试 编译成功和UT测试成功 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12993 | 3 天前 | |
fix(quant): 收紧 aclnnGroupQuant offsetOptional 形状校验为标量或[1] Co-authored-by: cuijie25<cuijie24@h-partners.com> # message auto-generated for no-merge-commit merge: !13075 merge fix/issue-7646-group-quant-offset-rank into master fix(quant): 收紧 aclnnGroupQuant offsetOptional 形状校验为标量或[1] Created-by: cuijie25 Commit-by: cuijie25 Merged-by: cann-robot Description: ## 描述 aclnnGroupQuant 的 offsetOptional 形状校验仅判断元素数(\ GetViewShape().GetShapeSize() == 1\),shape 为 \[1,1]\、\[1,1,1]\ 等元素数为 1 的多维形态被第一段放行,落入 tiling 层才被拒绝并返回内部错误码 561103,与文档「输入\offsetOptional\的shape当前仅支持[1, ]或[]」的约束及错误码表 161002(参数类)的语义不符。 现将 \CheckDim\ 中 offsetOptional 判据收紧为「标量(rank 0)或 shape 为 [1]」,多维形态在第一段即返回 161002。该 rank 缺口为 #6272/#6298 修复(5df41cc27)收紧元素数判据时遗留;tiling 层(\group_quant_tiling.cpp\ 的 \EnsureNotScalar\ 将标量规约为 {1} 后校验 dimNum==1 且 dim0==1)本就拒绝 rank≥2、放行标量,本次使 aclnn 层与 tiling 层口径对齐。 关于 \[]\(rank-0 标量)为何必须保留:\GetShapeSize()\ 为各维连乘(初值 1),rank-0 时循环不执行、空乘积为 1,故原版 \== 1\ 判据本就放行 \[]\——已用**本 PR 修复前的原版源码**单独构建 vendor 包实测确认(见测试段矩阵基线列),非推测。修复后 \[]\、\[1]\ 行为不变,\[0]\、\[2]\ 等元素数非法形态行为不变。 ## 关联的Issue [#7646](https://gitcode.com/cann/ops-nn/issues/7646) ## 测试 A2(910B3)环境验证: **1. host mock UT**,\build.sh -u --opapi --ops=group_quant\: - 修复后:**5/5 全部通过**,含新增 2 条负向用例(\offset_dim_is_two\:offset shape [1,1] → 161002;\offset_dim_is_three\:[1,1,1] → 161002); - 基线对照:换回未修复源码重跑,**恰好且仅有上述 2 条新增用例失败**、存量 3 条用例全部通过——证明新增用例确实命中新逻辑且修复对存量行为零影响。 **2. 实卡形态矩阵**(x fp16 [4,8] / scale fp16 [2,8] / groupIndex int32 {2,4} / dstType=INT8;基线用**修复前原版源码**构建的 vendor 包实测,内置 CANN 9.1.0 与其结果一致): | offsetOptional shape | 基线(原版 \GetShapeSize()==1\) | 修复后 | |---|---|---| | \[]\(rank-0 标量) | 0 / 0(kernel 正常出数) | 0 / 0(y 输出与基线逐值一致) | | \[1]\ | 0 / 0 | 0 / 0(y 逐值一致) | | \[1,1]\ | **561103(缺陷)** | **161002** | | \[2]\ | 161002 | 161002(不变) | 即:原版判据对 rank-0 标量本就放行(\GetShapeSize()\ 空乘积为 1,实测两段返回 0 且 kernel 出数);文档允许的 \[]\/\[1]\ 在修复前后均两段返回 0 且数值输出完全一致;缺陷场景 \[1,1]\ 由 561103 收敛为 161002;元素数非法形态行为不变。vendor 环境均已按三步清理(卸载、还原 load_priority、复跑确认)。 纯 host 侧元数据校验收紧,不触碰 kernel 数值路径,缺陷场景外输出零变化。 ## 文档更新 无需修改:文档约束(仅支持 [1,] 或 [])与错误码表(161002)本就正确,是代码违约。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13075 | 2 天前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
新增4个HiFloat4量化算子 Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12451 merge hif4_quant into master 新增4个HiFloat4量化算子 Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 (对应 HEAD 提交 feat: 拆分新增4个HiFloat4量化算子,共改动 120 个文件,+14755)新增 4 个 **HiFloat4(HiF4)量化**算子。4 个算子均基于 HiFloat4(S1P2,4-bit)三层缩放架构(Block Scale Ea / Sub-block Scale Eb / Micro-block Scale Ec),目标平台为 ascend960dt。 主要改动如下: 1. **新增 4 个 HiFloat4 量化算子** - aclnnAntiHiF4Quant(AntiHiF4Quant):将 HiF4(S1P2)量化数据按三层缩放因子(Ea/Eb/Ec)反量化为 FP16/BF16,按 scale shape 自动判定 PER_CHANNEL / PER_HEAD 模式。 - aclnnDynamicHiF4Quant(DynamicHiF4Quant):沿指定 axis 按 Block=64 / Sub-block=8 / Micro-block=4 三层缩放的在线动态量化,继承 DynamicMxQuant 架构。 - aclnnDynamicBlockHiF4Quant(DynamicBlockHiF4Quant):同时沿 -1、-2 轴按 64×64 基本块(Sub-block 8×8、Micro-block 4×4)三层缩放动态量化,分别输出 -1/-2 轴的 scale1、scale2。 - aclnnGroupedDynamicHiF4Quant(GroupedDynamicHiF4Quant):按 group_index 分组、组内按 64 元素为一块的三层缩放动态量化。 - 每个算子均包含:op_api(aclnn 对外接口 + 内部 l0op 接口)、op_graph(proto)、op_host(def / infershape / arch35 tiling,含 tail 与 not_tail 分支)、op_kernel(arch35 内核,含 common / tail / not_tail / struct / tilingdata)、docs(aclnn API 文档)、examples/arch92、tests/ut(op_host 的 infershape/tiling + op_kernel)、README,以及 op_host/config/ascend960dt 下的 *_binary.json 与 *_simplified_key.ini。 - 算子原型使用 ge::DT_HIFLOAT4 / DT_HIFLOAT4_SCALE,并在 *_def.cpp 中注册 ascend960dt。 ## 关联的Issue 无。 ## 测试 - 新增各算子 op_host UT(infershape、tiling)与 op_kernel UT。 - 新增各算子的 aclnn 示例(examples/arch92/test_aclnn_*_hi_f4_quant.cpp)。 - 通过 ascend960dt 编译与静态检查。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12451 | 11 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
perf(ge_glu_grad_v2): arch35 VF tiling 分核切分优化并补充 host tiling UT Co-authored-by: TH_HW<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12548 merge perf/ge-glu-grad-v2-vf-tiling into master perf(ge_glu_grad_v2): arch35 VF tiling 分核切分优化并补充 host tiling UT Created-by: TH_HW Commit-by: TH_HW Merged-by: cann-robot Description: ## 描述 本次提交针对 arch35(regbase)平台优化 GeGluGradV2 的 VF 计算与 tiling 分核切分,降低 kernel 时延,并补充 host tiling UT; 同时附带 GroupedQuantMax 的 ascend960dt 平台适配与测试 golden/input 资产。 **一、ge_glu_grad_v2 op_host tiling(ge_glu_grad_v2_tiling.cpp)** - Init() 增加 approximate 取值校验,仅允许 0(erf)或 1(tanh),非法值 直接返回失败并给出原因; - CheckParams() 中 dx 的 dtype 改为通过输出描述 GetOutputDesc(DX_INDEX) 获取, 并补充空指针校验,不再从输入描述读取输出 dtype; - ProcessTilingCore() 调整 regbase 分核策略: - perf(pack/transpose)通路增加门槛:regbase 下当 N < totalCoreNum * 2 时关闭 perf 通路、改走 direct 通路,避免为极小 N 支付 transpose 的固定开销; - direct 通路(M <= maxProcCount)不再固定按 maxProcCount / alignM 分组,改为以 每核行预算 ceil(N / totalCoreNum) 为基准,取最小 UB 波次并均衡每波行数; 对 FP32 erf,当行预算单波可容纳但每核 padding 后元素数达到 REGBASE_FP32_PIPELINE_MIN_ELEMENTS = 2048 时仍保留两波,以维持 MTE/VF 双流水 重叠;tanh 保持最小波次,避免额外 task 开销; - 大 M 通路(M > maxProcCount)在 regbase 上对最后一个 M tile 做均衡切分 (tileNum = ceil(M / cap),balancedTile = ceil(M / tileNum) 再向上对齐), 避免 M = 容量 + 1 时出现「满 tile + 极小尾 tile」的负载不均; - 非 regbase 路径行为保持不变。 **二、ge_glu_grad_v2 op_kernel arch35(erf/tanh base 与 FP32 实现)** - ge_glu_grad_v2_erf_base.h / ge_glu_grad_v2_tanh_base.h 新增通用 ProcessFused 与 CopyOutBoth:一次完成左右半部数据的搬入、计算与双路 dx 搬出, 替代原先分别处理左右半部的两段式流程; - ge_glu_grad_v2_erf_fp32.h / ge_glu_grad_v2_tanh_fp32.h 的非 perf 分支由 ProcessLessEqual / ProcessGreater + ComputeLeftHalf / ComputeRightHalf 改为 ProcessFused + ComputeFused:在单个 __VEC_SCOPE__ 内用 RegTensor 一轮完成 gate*dy、CDF/PDF(erf)或 tanh 导数以及左右两路 dx 的计算,减少 VF 循环次数与队列切换;非 __CCE_AICORE__ 编译时回退到原两段式计算。数学表达与原实现 保持一致(erf 的 CDF 近似系数、tanh 的 d = 1/(1+p) 形式均未改变); - erf/tanh base 的大 M 通路 task 映射由跨步分配 (needCoreNum * idx + blockIdx) 改为连续区间分配 firstTask = blockIdx * loopNumPerCore + (blockIdx < tailCoreIndex ? blockIdx : tailCoreIndex), 使行尾 tile 均匀分摊到各核,不再反复落在同一批核上; - FP16 / BF16 的 Process 分支未改动。 **三、ge_glu_grad_v2 host tiling UT(tests/ut/op_host/test_ge_glu_grad_v2_tiling.cpp)** - 新增 regbase_balanced_tiles_do_not_create_an_extra_tail:在 DAV_3510 下覆盖 5 组(fp16/bf16/fp32 × erf/tanh)大 M 场景,校验均衡切分后的 maxProcCount、 groupNum、blockDim,并确认尾 tile 非空、未产生额外 task; - 新增 regbase_direct_group_uses_per_core_budget:覆盖 17 组 dtype / approximate / N / M 组合,校验 direct 通路的 groupNum、blockDim、groupNum * alignedM <= maxProcCount 以及 groupNum 对 N 的完整覆盖关系,并包含 FP32 erf 双波次阈值(2048 元素)的边界用例。 **四、GroupedQuantMax 平台适配与测试资产(附带改动)** - CMakeLists.txt 的 SUPPORT_COMPUTE_UNIT 增加 ascend960dt(复用 arch35 tiling 目录),grouped_quant_max_def.cpp 为 AICore 增加 ascend960dt 配置, 复用 aicoreConfig950; - 新增 tests/assets/golden.py:按 group_list 累积偏移语义(单调不减、 group_list[-1] == x.shape[0])实现参考结果,覆盖空 tensor / 空 group 早退、 分组 amax = max(|x|) 并转回 x dtype、y = SAT-cast(x * scale[g]) 到 hifloat8 / float8_e5m2 / float8_e4m3fn(dst_type 34/35/36);其中 hifloat8 的 hybrid 与 rint 均复用 astype 路径(仓库暂无 hybrid 专用转换),代码注释中已标注为 待跟进项; - 新增 tests/assets/input.py:将随机生成的 group_list 归一化为合法累积偏移 (排序、截断到 [0, x.shape[0]]、末元素置为 x.shape[0]),保证 device 侧与 golden 侧消费同一份合法输入。 ## 关联的Issue 暂无关联 Issue。 ## 测试 - 本地执行 bash build.sh -u --ops=ge_glu_grad_v2 --ut_mode=fast -j16,编译通过: - host UT 共 4 个测试套件 26 个用例全部 PASS,其中包含本次新增的 GeGluGradV2Tiling.regbase_balanced_tiles_do_not_create_an_extra_tail 与 GeGluGradV2Tiling.regbase_direct_group_uses_per_core_budget; - kernel UT 汇总 total=12, pass=12, fail=0, timeout=0(FP32 erf/tanh 等 key 用例 在新 ProcessFused 路径下通过); - 新增 tiling UT 直接断言 tiling data 中的 maxProcCount、groupNum 与 blockDim,并校验 groupNum * alignedM <= maxProcCount、N 覆盖等式与尾 tile 非空; - grouped_quant_max 本次提交仅新增 tests/assets 下的 golden/input 资产与平台配置, 提交中未包含该算子的用例执行结果; - 本次提交未包含上板性能对比数据,性能收益以 CI 或独立性能采集结果为准。 ## 文档更新 本次提交未修改算子使用文档(aclnnGeGluBackward.md、aclnnGeGluV3Backward.md 等均未变更);本文件仅用于补充本次 PR 的变更说明。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:host tiling UT 补充;GroupedQuantMax 增加 ascend960dt 平台配置与 测试 golden/input 资产;tiling 参数校验(approximate 取值、dx dtype 取值来源)增强 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12548 | 3 天前 | |
修改产品名 Co-authored-by: fwx1169505<fengying27@h-partners.com> # message auto-generated for no-merge-commit merge: !11017 merge master into master 修改产品名 Created-by: fengying555682 Commit-by: fwx1169505 Merged-by: cann-robot Description: ## 描述 修改quant和activation文件夹中的md文档涉及的产品名称 ## 关联的Issue [#6056](https://gitcode.com/cann/ops-nn/issues/6056) ## 测试 已经完成文档语法和链接一致性检测 ## 文档更新 quant和activation文件夹中的md文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11017 | 1 个月前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
DynamicQuant等22个算子支持Ascend960dt Co-authored-by: TH_HW<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !11335 merge backBlue into master DynamicQuant等22个算子支持Ascend960dt Created-by: TH_HW Commit-by: TH_HW Merged-by: cann-robot Description: ## 描述 (+17812 / -2151)为一批 ops-nn 算子补齐 **Ascend 960DT(NPU Arch 9201)** 平台支持,并重构 GeGluV2 arch35 内核、为 Erfinv 增加 inplace 通路。 主要改动如下: 1. **Ascend960DT 平台适配(22 个算子)** - activation:Relu、ReluV2、ReluGrad、ReluGradV2、Sigmoid、SigmoidGrad、PRelu、PReluGradUpdate、SiluGrad、Softplus、Swish、SwishGrad、SwiGluGrad、GeGluV2。 - index:MapIndex、SparseSlice、QuantUpdateScatter。 - quant:Quantize、DynamicQuant、DynamicQuantV2、AntiMxQuant、GroupedDynamicMxQuant。 - 具体做法:CMakeLists.txt 的 SUPPORT_COMPUTE_UNIT / SUPPORT_TILING_DIR 增加 ascend960dt;*_def.cpp 增加 AddConfig("ascend960dt", ...);aclnn/op_api 与 infershape 增加 NpuArch::DAV_9201 / Ascend960DT 分支;kernel 增加 __NPU_ARCH__ == 9201 分支;新增 op_host/config/ascend960dt/ 下的算子二进制配置(共 22 个,如 relu_binary.json、p_relu.json 等);scripts/kernel/binary_config/ascendc_config.json 为相关算子登记 ascend960dt 计算单元与编译选项。 2. **GeGluV2 arch35 内核重构** - 将 arch35 模板按 erf / tanh 两类拆分,并补齐 align、align_last_axis_big、vreduce × fp16/bf16/fp32 变体,统一命名 *_arch35.h。 - tiling 新增 RegBase per-template per-element UB 预算模型(GetRegbasePerElem),并支持 ascend960dt。 - aclnnGeGlu 参数校验重构(CheckShape 支持 0D 输入与 dim 范围校验),新增 ST 用例(all_aclnnGeGlu(.V3).json)并调整 UT。 3. **Erfinv 支持 inplace**:新增 inplace dtype 支持列表与校验(GetInplaceDtypeSupportList / CheckInplaceDtypeValid),并补充 op_api UT。 4. **内核与接口修复** - SparseSlice:9201 路径改用 SetValue 写入 sliceStart/sliceEnd(替代 DataCopy),Reg::Reduce 使用完整命名空间限定。 - QuantUpdateScatter:9201 增加 FLOAT_OVERFLOW_MODE_CTRL 保护。 - ReluV2 infershape:Ascend960DT 不支持 NC1HWC0,UINT1 支持列表加入 Ascend960DT。 - DynamicQuant / Mx 量化:9201 上 fp8 scale 改为 bf16 乘法后再 cast 到 e8m0。 5. **代码规范**:统一 License 头注释格式、补齐文件末尾换行、调整 quant 系列 UT 的 CMakeLists;新增 MapIndex、SparseSlice 的 GE IR 图模式示例。 ## 关联的Issue 无。 ## 测试 - 新增 GeGluV2 ST 用例与 Erfinv inplace UT,补充/调整 GeGluV2 相关 UT。 - 新增 MapIndex / SparseSlice 的 GE IR 示例(examples/test_geir_*.cpp)。 - 通过 ascend960dt 编译与静态检查。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!11335 | 12 天前 | |
ascend_dequant等9个算子适配960dt Co-authored-by: TH<taohai2@huawei.com> # message auto-generated for no-merge-commit merge: !12955 merge backBlue1 into master ascend_dequant等9个算子适配960dt Created-by: TH_HW Commit-by: TH Merged-by: cann-robot Description: ## 描述 为 **TopKTopPSampleV2、UniqueDim、AscendAntiQuant、AscendAntiQuantV2、AscendDequant、DynamicBlockMxQuant、GroupedDynamicBlockQuant、MxToBlockMxQuant、QuantMax** 共 9 个算子补齐 **Ascend 960DT(NpuArch / __NPU_ARCH__ 9201)** 平台支持。 Ascend 960DT 与 Ascend 950 共享 arch35 AICore 架构,可直接复用 950 的 kernel 代码、tiling 逻辑与二进制配置,因此本次适配不涉及计算逻辑改动,核心是在编译配置与算子注册中登记 960DT、复用 950 的 config 对象,并在 kernel 中把 950 已有的架构相关指令(3510)以 3510 || 9201 并列宏放开给 960DT。 主要改动如下: 1. **算子注册与编译配置** - SUPPORT_COMPUTE_UNIT / COMPUTE_UNITS 追加 "ascend960dt",SUPPORT_TILING_DIR 追加对应的 "arch35":ascend_anti_quant(含 op_kernel/CMakeLists.txt)、ascend_anti_quant_v2、ascend_dequant、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant(含 op_kernel/CMakeLists.txt)、quant_max。 - 9 个算子的 *_def.cpp 均新增 AddConfig("ascend960dt", <950 的 config 对象>),与 ascend950 **复用同一个 config 对象**,继承相同的 dtype、format 与扩展配置: - top_k_top_p_sample_v2:复用 910b/910_93/950 共用的 aicConfig; - unique_dim、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant:复用各算子 950 的 aicConfig; - ascend_dequant、quant_max:分别复用 config_950、aicoreConfig950。 - 新增 960DT 二进制配置:top_k_top_p_sample_v2、unique_dim(含 unique_dim_simplified_key.ini)、ascend_anti_quant、ascend_anti_quant_v2、dynamic_block_mx_quant、grouped_dynamic_block_quant、mx_to_block_mx_quant 各新增 op_host/config/ascend960dt/*_binary.json,内容与 ascend950 下配置一致;ascend_dequant、quant_max 直接复用 950 配置,不需要新增 json。 - scripts/kernel/binary_config/ascendc_config.json:TopKTopPSampleV2、UniqueDim、AscendAntiQuantV2、GroupedDynamicBlockQuant、DynamicBlockMxQuant、QuantMax 六个条目的 compute_units 追加 ascend960dt;编译选项沿用 950 口径(TopKTopPSampleV2 补 --cce-simd-vf-fusion=true,UniqueDim/AscendAntiQuantV2 补 --cce-no-dcache-flush,其余无额外选项)。 2. **kernel 架构宏放开(3510 → 3510 || 9201)** - index/top_k_top_p_sample_v2/op_kernel/top_k_top_p_sample_v2.h:c_api/asc_simd.h 的 include 与 asc_dcci_entire_out() 调用对 9201 放开。 - quant/dynamic_block_mx_quant/op_kernel/arch35/dynamic_block_mx_quant_base.h、op_kernel/dynamic_block_mx_quant.cpp:FLOAT_OVERFLOW_MODE_CTRL 读取/置 0/恢复对 9201 放开。 - quant/grouped_dynamic_block_quant/op_kernel/arch35/grouped_dynamic_block_quant_large_block.h、..._small_block.h、op_kernel/grouped_dynamic_block_quant.cpp:同上。 - quant/mx_to_block_mx_quant/op_kernel/arch35/mx_to_block_mx_quant.h:SetCtrlSpr<FLOAT_OVERFLOW_MODE_CTRL> 对 9201 放开。 3. **op_api 平台判断** - quant/ascend_anti_quant_v2/op_host/op_api/aclnn_ascend_anti_quant.cpp:CheckShape 中 scale/offset 必须为 1 维的校验,由仅豁免 NpuArch::DAV_3510 扩展为同时豁免 NpuArch::DAV_9201,与 950 行为对齐。 - 其余 8 个算子的 op_api 不存在 SocVersion::ASCEND950 / NpuArch::DAV_3510 判断,IsRegbase()(common/inc/op_api/aclnn_util.h)的 NpuArch 集合已包含 DAV_9201,960DT 自动覆盖。 4. **测试与工程修正(同一提交内顺带收敛)** - index/top_k_top_p_sample_v2/tests/ut/op_host:tiling UT 的错误管理接口由 ErrorManager 迁移至 error_message::ErrMgrInit / GetErrMgrErrorMessage,并在 UT CMakeLists 中显式链接 opbase_util_objs,避免 EZ 错误码静态注册被优化掉导致负向用例失效。 - quant/ascend_dequant/tests:新增 tests/tests/ut/tests/ut/op_host CMake 链与 test_ascend_dequant_infershape.cpp(3 条 op_graph 原型用例:输入输出与默认属性、属性更新、输入输出 desc 更新)。 - quant/ascend_dequant、quant/quant_max、top_k_top_p_sample_v2 UT 的许可头统一为标准格式,并补齐文件末尾换行。 ## 关联的Issue 无。 ## 测试 - 通过 ascend960dt 编译与静态检查。 - 核对 960DT 与 950 运行时路径一致性:9 个算子均 AddConfig("ascend960dt", <950 config>) 复用同一 config 对象;kernel 侧仅在 __NPU_ARCH__ == 9201 时沿用 950 已启用的 dcci / 浮点溢出模式控制指令;IsRegbase() 已覆盖 DAV_9201。 - ascend_dequant 新增 op_graph 原型 UT、top_k_top_p_sample_v2 tiling UT 迁移后通过。 ## 文档更新 无。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12955 | 2 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
【vector算子】【DV121】SwigluHif4Quant、SmoothL1LossV2算子支持新特性 Co-authored-by: jiaoyaolong<jiaoyaolong@huawei.com> # message auto-generated for no-merge-commit merge: !12988 merge Oct2 into master 【vector算子】【DV121】SwigluHif4Quant、SmoothL1LossV2算子支持新特性 Created-by: uer_j Commit-by: jiaoyaolong Merged-by: cann-robot Description: ## 描述 **改动原因**: 1、SwigluHif4Quant算子hif4量化时需要支持unbiased量化 2、SmoothL1LossV2算子支持DV121新特性 3、aclnnMseLossOut reduction=1/2 时 out shape 校验描述 有误 **改动方法**: 1、对相关SwigluHif4Quant算子新增一个可选属性,scale_alg, 支持枚举:0(mse_first)(有偏实现:阈值为4和2,mse会更好,建议PTQ推理场景);1(unbiased) 2、SmoothL1LossV2算子 多个DAG节点融合为 VF节点 3、修正aclnnMseLossOut校验描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue 关联Issue [#7612](https://gitcode.com/cann/ops-nn/issues/7612) <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 Ascend960dt 仿真验证:SwigluHif4Quant算子 800条泛化用例、SmoothL1LossV2算子 200条泛化用例,995条精度 PASS,5条用例异常经基线对比全部归因与本次整改无关。 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 更新了loss/mse_loss/docs/aclnnMseLossOut.md 文档 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12988 | 3 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
master分支alcnn文档英文合入 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !13019 merge master into master master分支alcnn文档英文合入 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 master分支alcnn文档英文合入 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!13019 | 4 天前 | |
fix: 错误码整改复检与检视问题修复 Co-authored-by: gcw_mJtIrnnZ<wuyifan67@h-partners.com> # message auto-generated for no-merge-commit merge: !12993 merge fix-quant-error-code-followup into master fix: 错误码整改复检与检视问题修复 Created-by: gcw_mJtIrnnZ Commit-by: gcw_mJtIrnnZ Merged-by: cann-robot Description: ## 描述 E9****替换为正式结构化错误码,进行整改。 ## 关联的Issue 关联Issue [#7622](https://gitcode.com/cann/ops-nn/issues/7622) ## 测试 编译成功和UT测试成功 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12993 | 3 天前 | |
fix: 错误码整改复检与检视问题修复 Co-authored-by: gcw_mJtIrnnZ<wuyifan67@h-partners.com> # message auto-generated for no-merge-commit merge: !12993 merge fix-quant-error-code-followup into master fix: 错误码整改复检与检视问题修复 Created-by: gcw_mJtIrnnZ Commit-by: gcw_mJtIrnnZ Merged-by: cann-robot Description: ## 描述 E9****替换为正式结构化错误码,进行整改。 ## 关联的Issue 关联Issue [#7622](https://gitcode.com/cann/ops-nn/issues/7622) ## 测试 编译成功和UT测试成功 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12993 | 3 天前 | |
[BugFix] 修复 aclnnTurboQuant 参数校验缺失 Co-authored-by: chen-weipeng12<chenweipeng12@huawei.com> # message auto-generated for no-merge-commit merge: !12536 merge fix/turboquant-aclnn-param-check-master into master [BugFix] 修复 aclnnTurboQuant 参数校验缺失 Created-by: chen-weipeng12 Commit-by: chen-weipeng12 Merged-by: cann-robot Description: ## 问题与影响 aclnnTurboQuant 存在两类参数校验缺陷(#7100 / #7101): 1. **输出 shape 不校验**(#7100):y/scale 的声明 shape 从不与推导结果比对。以 latent={2,512}、y={2,128} 为例,首段仍返回 ACLNN_SUCCESS,内核按推导的 {2,256} 写出,越过声明范围 256B;scale={1} 同理越界 2B。越界仍落在调用方分配的缓冲区内,mssanitizer 无法发现。 2. **非法输入 shape 返回码错误**(#7101):latent rank≠2、headDim≠512、centroids 长度≠16 等违规落入 infershape/tiling 后以 561002 内部错误返回,而接口文档将其归类为参数非法(161002)。dtype 违规则能正确返回 161002。 ## 根因 turbo_quant 没有手写 op_api wrapper(op_host/op_api 为空),自动生成的两段式接口只按 op_def 检查 dtype;输出 tensor 的 shape 校验与输入 shape 的前置检查全部缺失。同类缺陷先例:aclnnFastLayerNorm #5614(已修,13dd09642b)。 ## 修改内容 按仓内手写 wrapper 规范(参照 dynamic_quant / swish_v2 / #5614 的修复方式)新增: - op_host/op_api/aclnn_turbo_quant.cpp/.h:CheckNotNull/CheckDtype/CheckShape —— latent 必须为 2 维且 headDim=512,centroids 必须为 {16},y 必须为 {numTokens, headDim/2},scale 必须为 {numTokens};非法参数在首段返回 161002,内核不再启动,越界写入随之消除。空 tensor(numTokens=0)直接成功返回。 - op_host/op_api/turbo_quant.cpp/.h:l0 层实现,输出经 AllocTensor 产出后 ViewCopy 回调用方张量。 - op_host/CMakeLists.txt:ACLNNTYPE aclnn → aclnn_exclude(手写 wrapper 代替自动生成)。 - tests/ut/op_host/op_api/:新增 20 个 op_api UT(合法基线、空 token、全部非法 shape/dtype/负 numTokens 用例,断言 ACLNN_ERR_PARAM_INVALID)。 含检视意见修复(l0 层 AllocTensor 判空、numTokens 非负校验)。共 8 个文件(+618/-2),仅包含实现、UT 与 CMake 接线。 ## 验证 Atlas 910B4 + CANN 9.2.0(从本提交构建并隔离安装 turbo_quant 自定义算子包,实机验证): - #7101 复现程序 8 个非法输入用例:修复前全部 561002,修复后全部 161002 - #7100 复现程序(y 声明 {2,128}、scale 声明 {1},越界区 canary 0xA5):修复前首段 rc=0、canary 被改写 256B/2B;修复后首段返回 161002、内核未启动、canary 0 字节改动 - 合法路径数值等价:y(512B)+scale 输出修复前后逐字节一致(l0 层 AllocTensor→ViewCopy 与原直写路径对比) - op_api UT 20/20 通过;ophost UT 回归(tiling/infershape)23/23 通过 ## 风险与兼容性 修改只收紧非法参数的校验。合法 shape、dtype 约束、空 tensor、正常计算路径保持现有行为(输出数值逐字节一致)。此前被错误接受的非法输出 shape 现在返回 161002,符合接口文档契约。master 与 9.2.0 分支的 turbo_quant 代码逐字节相同,本修复双分支通用(9.2.0 同内容 PR 随后提交)。 ## AI 辅助说明 本变更在 AI 辅助下完成缺陷分析、代码修改、测试补齐和验证编排,最终代码、测试范围和验证结果均由提交者复核。 Closes #7100 Closes #7101 See merge request: cann/ops-nn!12536 | 10 天前 | |
fix(geir examples): 修复样例 placeholder 节点名/索引与建图问题 Co-authored-by: qq_37917228<yanmingkui@huawei.com> # message auto-generated for no-merge-commit merge: !13171 merge fix/lamb_apply_optimizer_assign_placeholder_name into master fix(geir examples): 修复样例 placeholder 节点名/索引与建图问题 Created-by: qq_37917228 Commit-by: qq_37917228 Merged-by: cann-robot Description: ## 描述 修复多个 GEIR 样例( examples/test_geir_*.cpp)的建图与编译问题,涉及 19 个文件,分四类: 1. **placeholder 节点名拼接与 index 属性**(lamb_apply_optimizer_assign、apply_adagrad、lamb_apply_weight_assign、sgd、dynamic_quant_update_scatter、dynamic_quant_update_scatter_v2、wts_arq、bn3_d_training_reduce_grad、bn3_d_training_update、in_training_update_grad):宏参数 inputIndex 是整型常量,"placeholder" + inputIndex 执行的是指针偏移而非字符串拼接,非 0 时节点名从字面量中间截断甚至越界读取。改为 "placeholder" + std::to_string(inputIndex);同时把 set_attr_index(0) 统一为 inputIndex - 1——Data 的 index 属性表示该节点在整图输入中的 0 基序号,多个 Data 节点重复声明第 0 个输入与语义不符,统一后与 SetInputs 顺序一致。 2. **foreach 样例建图顺序**(foreach_add_list_inplace、foreach_addcmul_list):旧 Operator 序列化会按端口名排序,导致静态输入(alpha、scalars)被排到动态输入之前,推导实例表错位。改用 NamedIoNodeBuilder 按 IR 定义顺序构建节点,图输出改由 GNode 端口 SetOutputs 设置。 3. **Session/AddGraph 初始化**(lamb_next_m_v_with_decay、lamb_next_right、lamb_update_with_lr、lamb_update_with_lr_v2):补充 array_ops.h;Session({}) 与 AddGraph(..., {}) 的空花括号实参改为显式的 std::map<AscendString, AscendString>(),避免重载推导歧义。(lamb_next_m_v 的同类问题上游已修复,本 PR 不再改动) 4. **其他样例修正**: - in_training_update_grad:Data 占位节点改用 FORMAT_ND + 6 维 storage shape(Ascend950 CheckInternalFormat 不允许用户图 Data 节点以 NDC1HWC0 作 origin format),算子节点输入 desc 另行声明 NDC1HWC0 以满足 binary 格式白名单 - multi_add_rms_norm_dynamic_quant:修正 op_graph proto 头文件相对路径 - apply_came_part1 / apply_came_part3:删除直接 include graph_infer.cpp ## 关联的Issue - https://gitcode.com/cann/ops-nn/issues/7907 ## 测试 - OAT(OpenHarmony OSS Audit Tool)增量扫描:全部改动文件,0 问题 - 全部改动文件通过仓库 .clang-format 校验 - 本人验证记录中,lamb_apply_optimizer_assign、lamb_next_m_v* 系列、foreach×2 等样例已在 Ascend950 环境(CANN 9.3.0)按 build.sh --run_example 逐项复现与验证 - batch_norm_ext2 样例的同类问题暂不在本 PR 处理:该文件改动会连带触发 kernel ST,其中 10 个 bne2_gt1G_* 超大 shape 用例在 CI 上失败(既有问题,与本 PR 无关),待问题定位后另行提交 ## 文档更新 无需更新文档 ## 类型标签 - [x] Bug修复 ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!13171 | 6 小时前 | |
torch_extension API文档新增产品型号标签 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !8233 merge master into master torch_extension API文档新增产品型号标签 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. torchapi_*.md增加产品型号标签注释 2. 中文png改为英文文件名 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4551](https://gitcode.com/cann/ops-nn/issues/4551) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 已自验 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> torchapi_*.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!8233 | 2 个月前 | |
Format update: Adjusted the license description format in all relevant files. Co-authored-by: jiangqi<jiangqi47@h-partners.com> # message auto-generated for no-merge-commit merge: !366 merge license6 into master Format update: Adjusted the license description format in all relevant files. Created-by: jiangqi2025 Commit-by: jiangqi Merged-by: turing_project1 Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!366 | 10 个月前 | |
refactor(swiglu_group_grad): 迁移至 activation 目录 Co-authored-by: ZhouChuping<24171214023@stu.xidian.edu.cn> # message auto-generated for no-merge-commit merge: !9329 merge refactor/swiglu-group-grad-to-activation into master refactor(swiglu_group_grad): 迁移至 activation 目录 Created-by: qq_52056150 Commit-by: ZhouChuping Merged-by: cann-robot Description: ## 描述 迁移swiglu_group_grad至 activation 目录 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/5285 ## 测试 本地进行了白盒、门槛用例的验证,共200条用例无功能性问题,线上进行了david冒烟无异常。 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 更新路径 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:迁移算子至新目录 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!9329 | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 7 天前 | ||
| 13 天前 | ||
| 4 天前 | ||
| 2 天前 | ||
| 11 天前 | ||
| 4 天前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 12 天前 | ||
| 3 天前 | ||
| 2 天前 | ||
| 4 天前 | ||
| 3 天前 | ||
| 4 天前 | ||
| 3 天前 | ||
| 11 天前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 4 天前 | ||
| 11 天前 | ||
| 4 天前 | ||
| 7 小时前 | ||
| 7 小时前 | ||
| 6 小时前 | ||
| 6 小时前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 6 天前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 4 天前 | ||
| 2 天前 | ||
| 3 天前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 11 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 3 天前 | ||
| 1 个月前 | ||
| 2 天前 | ||
| 12 天前 | ||
| 2 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 3 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 3 天前 | ||
| 3 天前 | ||
| 10 天前 | ||
| 6 小时前 | ||
| 2 个月前 | ||
| 10 个月前 | ||
| 2 个月前 |