| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[activation] 新增 experimental 算子 swiglu_clamp + cann_ops_nn PTA binding Co-authored-by: boes129<chenqi185@huawei.com> # message auto-generated for no-merge-commit merge: !7492 merge feature/swiglu_step into master [activation] 新增 experimental 算子 swiglu_clamp + cann_ops_nn PTA binding Created-by: boes129 Commit-by: boes129 Merged-by: cann-robot Description: ## 描述 本 PR 新增 experimental/activation/swiglu_clamp 算子 —— silu+clamp+mul 融合激活(SwigluClamp 顺序: **silu 在前、clamp 上限在后**;区别于本仓现有的 clipped_swiglu 的 clamp-then-silu 顺序)。用于 Step-3.7-Flash 等 MoE 模型的 FFN 专家层激活,已在 910B / 910C 完成端到端推理 + 精度验证。 数学: gate = x[..., :N], up = x[..., N:] out = silu(gate).clamp(max=limit) * up.clamp(min=-limit, max=limit) 输入 x[..., 2N] → 输出 [..., N],dtype 同输入;limit 为标量属性(默认 7.0)。中间升 fp32 计算,store 前降精度。 **交付件**(对齐 experimental/activation/mish 模板): | 目录 | 内容 | | --------------- | ------------------------------------------------------------ | | op_host/ | OpDef 注册 + InferShape(末维减半,奇数拒绝) + Tiling(dtype-aware bufferCoefficient) | | op_kernel/ | AscendC 实现: sigmoid / silu / clamp(Mins/Maxs) / Mul,中间升 fp32,bf16/fp16 经 Cast 路径,bf16 同 else 分支 | | op_api/aclnn/ | 两段式接口(.cpp/.h),ACLNN_CMD dlsym,无需头 include | | tests/ut/ | op_host: Infershape 5 case + Tiling 3 dtype; op_kernel: 1 case(gen_data/compare_data,rtol=1e-4,tikicpulib CPU 仿真); 910B / 910C 双 SoC 均 5/5 + 1/1 PASS | | examples/ | ACLNN 调用示例(bf16 + fp32) | | README.md | 算子说明(接口/数学/精度/dtype/平台) | **附带 torch_extension/cann_ops_nn PTA binding**: - csrc/activation/swiglu_clamp.cpp: ACLNN_CMD + PYBIND11,torch.ops.cann_ops_nn.swiglu_clamp 调用链 - ops/activation/swiglu_clamp.py: OpBuilder schema + register_meta(末维减半) + PrivateUse1 - ops/__init__.py: 注册链 from . import activation ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3913 ## 测试 **双 SoC 真机验证**(910B + 910C,均通过 SIG 评审前全量验证): | 验证项 | 910B(AT800T,CANN 9.0.1) | 910C(Atlas A3 / AT900A3,CANN 9.0.0) | | ------------------------------------------------ | ------------------------------ | ------------------------------------------- | | 编译 / 安装(--experimental) | ✅ | ✅(交叉编译 ascend910_93 kernel,3 个 .o) | | ophost UT(infershape + tiling) | ✅ 5/5 | ✅ 5/5 | | op_kernel UT(tikicpulib CPU 仿真,fp32,rtol=1e-4) | ✅ 1/1 | ✅ 1/1 | | ACLNN example(端到端) | ✅ bf16 / fp32 / fp16 | ✅ bf16 / fp32 | | PTA binding torch.ops.cann_ops_nn.swiglu_clamp | ✅ [4,32]→[4,16] + clamp 定点 | ✅ 同 | **双 SoC 输出逐位一致**:910B / 910C 的 aclnn example 共享定点 result[22] 完全相同 —— **bf16 -2.859375、fp32 -2.857722**(= 手算 silu(3) × clamp(-1,±7) = 2.857722 × (-1)),两 SoC 分毫不差,跨平台数值行为确定、无 SoC 相关偏移。 **精度**(60 case = 5 shape × 4 输入模式 × 3 dtype,主矩阵在 910B,910C 定点逐位复验): - BFLOAT16(Step-3.7 实际使用 dtype):**20/20 全 PASS**(MERE+MARE) - FLOAT32:**20/20 全 PASS**(近乎精确,MERE ~1e-8) - FLOAT16:20/20 MERE PASS;MARE 15 case 超标 → 根因 IEEE 754 fp16 denormal 表示极限(silu(深负gate) 下溢到 ~1e-8),**非算子缺陷**;过滤 ~1% 病态点后 MARE 4.88e-4 低于单倍阈值,达标 **性能**(详见 swiglu_clamp-performance-report.md):融合算子相对 torch 拆开(silu+clamp+clamp+mul,~4 个 aclnn)—— bf16 prefill(eager 大档)**5.4–7.5×**、decode(graph)**2.1–3.6×**;端到端 msprof 实测 prefill bf16 **6.20×**,与算子级 bench 吻合。 精度标准对标[生态算子开源精度标准(experimental_standard.md)](https://gitcode.com/cann/opbase/blob/master/docs/zh/ops_precision_standard/experimental_standard.md)。 ## 文档更新 - 新增 experimental/activation/swiglu_clamp/README.md(算子说明: 接口/数学/精度/dtype/平台/编译/运行) ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!7492 | 1 个月前 | |
修改测试问题 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !7987 merge master into master 修改测试问题 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 修改TorchNPU改名 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7987 | 1 个月前 | |
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 | 9 个月前 | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 2 个月前 | |
【CANN开源开放社区任务】【社区任务】AscendC实现Median算子贡献 Co-authored-by: LiJianhao2<25213050226@m.fudan.edu.cn> # message auto-generated for no-merge-commit merge: !6429 merge master into master 【CANN开源开放社区任务】【社区任务】AscendC实现Median算子贡献 Created-by: LiJianhao2 Commit-by: LiJianhao2 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#3513](https://gitcode.com/cann/ops-nn/issues/3513) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!6429 | 1 个月前 | |
feat(experimental): add HingeEmbeddingLoss operator Co-authored-by: shi-xiangyang225<2678490361@qq.com> # message auto-generated for no-merge-commit merge: !7907 merge feature/hinge_embedding_loss into master feat(experimental): add HingeEmbeddingLoss operator Created-by: shi-xiangyang225 Commit-by: shi-xiangyang225 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 使用AscendC实现了HingeEmbeddingLoss 算子,实现了AscendC实现的HingeEmbeddingLoss 算子对Atlas 200/500 A2推理产品和Atlas 800I/T A2硬件的适配 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#4290](https://gitcode.com/cann/ops-nn/issues/4290) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 采用aclnn调用测试  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7907 | 1 个月前 | |
【master】新增 FusedMatmulGelu 融合算子 Co-authored-by: wuxs68<wuxs68@chinaunicom.cn> # message auto-generated for no-merge-commit merge: !6696 merge internvl_fused_dense_gelu_master_experimental into master 【master】新增 FusedMatmulGelu 融合算子 Created-by: wuxs68 Commit-by: wuxs68 Merged-by: cann-robot Description: ## 描述 本 PR 新增 FusedDenseGelu 自定义融合算子,代码路径位于 experimental/matmul/fused_dense_gelu,用于支持 InternVL 等 Transformer 类模型中常见的 Dense / Linear + optional bias + GELU 计算模式。 典型计算形式如下: text y = GELU(x @ weight^T + bias) 当 bias 为空时,计算形式如下: text y = GELU(x @ weight^T) 本次改动主要包括: * 新增 experimental/matmul/fused_dense_gelu 算子目录; * 新增 FusedDenseGelu op host / op kernel / op api 相关实现; * 提供 aclnnFusedDenseGeluGetWorkspaceSize 与 aclnnFusedDenseGelu 两段式 ACLNN 接口; * 支持 FLOAT16、BFLOAT16 数据类型; * 支持 ND 数据格式; * 支持 bias / no bias 两种路径; * 支持 approximate=1 的 GELU tanh 近似计算模式; * 新增 README 与 ACLNN 接口说明文档; * 新增 op_api、op_host、op_kernel 相关 UT 用例; * experimental 目录版本暂不包含 ST 配置,避免 ATK CPU benchmark 侧自定义 API 注册失败问题,后续如需 ST 可单独补充 benchmark executor。 ## 关联的 Issue 关联 Issue:#3515 https://gitcode.com/cann/ops-nn/issues/3515 ## 测试 已在 Ascend910B 环境完成编译打包、安装验证与 UT / runtime 数值测试。 ### 编译打包 执行命令: bash bash build.sh --pkg --soc=ascend910b --ops=fused_dense_gelu 验证结果: text [SUCCESS] Build package success! ### op_api UT 执行命令: bash bash build.sh -u --opapi --ops=fused_dense_gelu --soc=ascend910b --noexec -j8 验证结果: text [ PASSED ] 11 tests. 覆盖场景包括: * FP16 with bias; * FP16 without bias; * BF16 with bias; * invalid approximate; * weight K 维度不匹配; * bias shape 非法; * output shape 非法; * dtype mismatch; * x nullptr; * weight nullptr; * y nullptr。 ### op_host UT 执行命令: bash bash build.sh -u --ophost --ops=fused_dense_gelu --soc=ascend910b --noexec -j8 验证结果: text [ PASSED ] 7 tests. 覆盖场景包括: * FP16 bias tanh tiling; * BF16 bias tanh tiling; * FP16 no-bias tanh tiling; * weight K 维度不匹配; * bias shape 非法; * output shape 非法; * approximate 属性非法。 ### op_kernel numeric UT 执行命令: bash bash build.sh -u --opkernel --ops=fused_dense_gelu --soc=ascend910b --noexec -j8 覆盖场景包括: * FP16 tanh with bias; * FP16 tanh no-bias; * BF16 tanh zero-weight no-bias; * BF16 tanh zero-weight bias-only; * BF16 tanh with bias。 说明:op_kernel numeric UT 通过环境变量 FUSED_DENSE_GELU_RUNTIME_TEST_DIR 指定 runtime 测试二进制目录;未设置该变量时,本地 runtime 数值测试用例会自动跳过,不影响普通 UT 编译执行。 ### Runtime 数值测试 完成 .run 包安装后,执行 runtime 数值测试,验证结果如下: text PASSED: aclnnFusedDenseGelu FP16 tanh with bias numeric test. PASSED: aclnnFusedDenseGelu FP16 tanh no-bias numeric test. PASSED: aclnnFusedDenseGelu BF16 tanh zero-weight no-bias numeric test. PASSED: aclnnFusedDenseGelu BF16 tanh zero-weight bias-only numeric test. PASSED: aclnnFusedDenseGelu BF16 tanh with bias numeric test. ## 文档更新 本 PR 新增并更新以下文档: * experimental/matmul/fused_dense_gelu/README.md * experimental/matmul/fused_dense_gelu/docs/aclnnFusedDenseGelu.md ## 类型标签 * [ ] Bug修复 * [x] 新特性 * [x] 性能优化 * [x] 文档更新 * [ ] 其他,请描述: See merge request: cann/ops-nn!6696 | 1 个月前 | |
【社区任务】SyncBatchNormGatherStats算子 Co-authored-by: xchen<13260020301@163.com> # message auto-generated for no-merge-commit merge: !6149 merge master into master 【社区任务】SyncBatchNormGatherStats算子 Created-by: xchencehn Commit-by: xchen Merged-by: cann-robot Description: 关联 Issue: https://gitcode.com/cann/ops-nn/issues/4254 【社区任务】SyncBatchNormGatherStats算子 的开发: 基于已有数据,当前实现已经完成以下自验证: - 910B full18 泛化精度:18 case / 36 输出 PASS。 - 910B full18 性能:18/18 custom 快于 builtin/TBE,满足不低于 TBE 95% 的要求。 - 910B public aclnn 写回 example:I01-I04 PASS, totalFails=0。 - 310P int32 graph 精度:真实 310P physical device 1 上 15/15 PASS。 - 310P public aclnn FLOAT16/FLOAT sampleCount:已确认无需单独追加复测。 - 310P 大 C 漏写缺陷:已修复并通过 G09 单点与 int32 graph 矩阵复验。 - YOLO-World 训练 910b 310p loss diff < 0.1。 See merge request: cann/ops-nn!6149 | 1 个月前 | |
feat(ApplyGradientDescent): ApplyGradientDescent算子补齐ascend910b原生AscendC实现 Co-authored-by: zhaohujie<zhaohujie@huawei.com> # message auto-generated for no-merge-commit merge: !7422 merge worktree-apply-gradient-descent into master feat(ApplyGradientDescent): ApplyGradientDescent算子补齐ascend910b原生AscendC实现 Created-by: zhaohujie Commit-by: zhaohujie Merged-by: cann-robot Description: ## 描述 新增 experimental 算子 experimental/optim/apply_gradient_descent/,为 **Ascend 910B(Atlas A2,ascend910b)** 提供 ApplyGradientDescent 的原生实现 —— 梯度下降单步参数原地(inplace)更新: var = var - alpha * delta **改动原因**:仓库中已有的 optim/apply_gradient_descent 仅支持 Ascend 950 —— 其 kernel / tiling / binary config 均只存在于 arch35 下,AddConfig 也只声明了 ascend950,在 ascend910b 上没有原生实现;当前 CANN 部署包在 ascend910b 上同样没有可直调的同语义内置算子(aic-ascend910b-ops-info-*.json 中无该 OpType,也无对应 aclnn 头文件)。因此该算子在 ascend910b 上存在实现空缺。 本 PR 按仓库既有约定,把 ascend910b 实现放在 experimental/ 下同名目录、复用同一 OpType ApplyGradientDescent (与 experimental/activation/gelu、experimental/activation/mish 完全一致的模式 —— 二者同样是顶层仅支持 Ascend 950、而 ascend910b 实现落在 experimental 同名目录)。--experimental 构建时 CMake 会将整个 category 目录切换到 experimental/,两份实现不会同时参与编译,因此复用 OpType 不产生冲突。 **采取的方法**: - **op_kernel**:经典(classic)AscendC 逐元素 kernel —— 多核按 512B(256 元素)对齐均分数据,单核内 TQue 双缓冲 按 UB tile 搬入 var/delta,读取标量 alpha 后计算并原地写回。中间计算统一在 fp32 完成(fp16/bf16 先 Cast 到 fp32、算完再 Cast 回原类型)。dtype 经 TilingKey 分派(fp16=1 / fp32=2 / bf16=3)。 - **op_host**:算子 def(AddConfig("ascend910b"))、elementwise infershape、tiling(多核切分 + UB tile 切分 + 尾块处理 + TilingKey 下发),以及 config/ascend910b/ binary config。 - **op_api**:手写两段式 aclnn 调用路径 aclnnApplyGradientDescentGetWorkspaceSize + aclnnApplyGradientDescent (含 L0 接口),使算子可经 aclnn 直调。 - **op_graph**:proto + graph_infer,支持 GE 图模式(GEIR)调用。 - **性能**:在精度完全不变的前提下引入 2 项优化 —— 每核 512B 对齐读突发、fp16/bf16 用一次 Axpy 融合 Muls+Sub(数据见「测试」)。 **改动范围**:**纯新增,35 个文件、+5569 行,不修改仓库中任何既有文件** —— 顶层 optim/apply_gradient_descent/ 未做任何改动(逐字节一致),scripts/kernel/binary_config/ascendc_config.json 亦无需改动(该文件对 OpType 的查找 为软匹配,未命中时回落到默认值,与本算子所需配置一致)。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/3429 ## 测试 以下验证均在 **Ascend 910B3(ascend910b)** 实机环境完成。 ### UT | 套件 | 结果 | |---|---| | tests/ut/op_host(tiling + infershape) | **6/6 PASS** | | tests/ut/op_api(aclnn,含空指针 / dtype / shape / 标量 alpha 等异常分支) | **12/12 PASS** | | tests/ut/op_kernel(CPU 孪生 ICPU_RUN_KF,跑真实 kernel) | **3/3 PASS**,fp16 / fp32 / bf16 均 max_abs_err=0 | ### ST(ATK 上板精度,vs CPU/torch golden) - 判据:single_bm(high_precision,逐 dtype 相对误差阈值 fp16=2^-10 / bf16=2^-7 / fp32=2^-13) - 结果:**30/30 PASS(100%)** - 覆盖:fp16 / fp32 / bf16 × 1D(16 / 17 / 128)、2D(4x8 / 1x1)、3D(2x3x4 / 30x4x2 / 8x8x4)、4D(2x3x4x5)、标量 [1]; alpha ∈ {-1, -0.5, 0, 0.01, 0.1, 0.5, 1, 2}(含 [1] 与 rank-0 两种标量 shape) - 最差相对误差:fp16 4.78e-04(阈值 9.77e-04)、bf16 3.89e-03(阈值 7.81e-03)、fp32 5.95e-08(阈值 1.22e-04) - 用例集随算子一并交付、可复现: tests/st/aclnnApplyGradientDescent/{atk_aclnnApplyGradientDescent.json, executor_aclnnApplyGradientDescent.py} ### 回归 顶层 optim/apply_gradient_descent/(Ascend 950)非 experimental 构建 **仍然通过**,且目录逐字节未改动。 ### 性能(msprof op,warm-up 10 / launch-count 5) 本算子为 MTE2(GM 读)带宽受限型:每元素读 var + delta、写 var,读带宽约为写的 2 倍。上述 2 项优化在 **精度完全不变**(每一步 kernel UT max_abs_err=0,优化后 ATK 上板仍 30/30 PASS)的前提下取得: | dtype | 规模 | 优化前 device(us) | 优化后 device(us) | 加速比 | |---|---|---|---|---| | bf16 | 1M | 7.43 | 6.82 | **1.09×** | | bf16 | 16M | 50.66 | 48.30 | 1.05× | | fp16 | 1M | 7.43 | 7.15 | 1.04× | | fp16 | 16M | 49.06 | 47.80 | 1.03× | | fp32 | 4M | 26.08 | 25.45 | 1.02× | | fp32 | 16M | 92.30 | 92.37 | 1.00× | | fp32 | 4096(极小) | 4.53 | 3.06 | **1.48×** | 大 shape float32 已达 HBM 读带宽上限(MTE2 占比 ≈0.98、聚合读带宽 ~1.4 TB/s),读流量(var+delta)不可 约减,故基本持平;收益集中在 fp16/bf16 与中小 shape。 ## 文档更新 - 新增 experimental/optim/apply_gradient_descent/README.md(支持型号 / 功能描述 / 实现原理 / 性能说明 / 算子接口 / 约束说明 / 调用示例)。 - 新增 experimental/optim/apply_gradient_descent/docs/aclnnApplyGradientDescent.md(aclnn 接口说明)。 - 新增调用示例:examples/test_aclnn_apply_gradient_descent.cpp(aclnn 单算子直调)与 examples/test_geir_apply_gradient_descent.cpp(GE 图模式)。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 ## 附ApplyGradientDescent实现与测试报告 ## 摘要(当前实现) ApplyGradientDescent 的 **Ascend 910B(Atlas A2,ascend910b)** 实现:经典(classic)AscendC 逐元素 kernel, 对参数做原地(inplace)单步梯度下降更新: var = var - alpha * delta 中间计算统一在 fp32 精度下完成(fp16/bf16 先 Cast 到 fp32 计算、算完再 Cast 回原类型)。对外入口为两段式 aclnn 接口 aclnnApplyGradientDescentGetWorkspaceSize + aclnnApplyGradientDescent,另提供 GE 图模式(GEIR) 调用路径。支持 dtype float16 / float32 / bfloat16,格式 ND,var 维度 1~8;alpha 为 1 元素标量 Tensor, var.shape == delta.shape,三者同 dtype。实现要点:多核按 512B(256 元素)对齐均分数据、单核内 TQue 双缓冲按 UB tile 分批搬运,dtype 经 TilingKey 分派(fp16=1 / fp32=2 / bf16=3);fp16/bf16 计算链用一次 Axpy 融合 var - alpha*delta。本算子为 MTE2(GM 读)带宽受限型 —— 每元素读 var+delta、写 var,读带宽约为写的 2 倍。 ## 1. 精度测试(vs CPU/torch golden) - 判据:single_bm(high_precision,逐 dtype 相对误差阈值 fp16=2^-10 / bf16=2^-7 / fp32=2^-13) - 结果:**30/30 PASS**(100%) | 用例组 | dtype | shape 覆盖 | alpha | 最差相对误差 (阈值) | 结果 | |---|---|---|---|---|---| | aclnnApplyGradientDescent | float16 | 1D(16/17/128)、2D(4x8 / 1x1)、3D(2x3x4 / 30x4x2 / 8x8x4)、4D(2x3x4x5)、标量[1] | {-1, -0.5, 0, 0.01, 0.1, 0.5, 1, 2} | 4.78e-04 (9.77e-04) | 10/10 ✅ | | aclnnApplyGradientDescent | float32 | 同上 | 同上 | 5.95e-08 (1.22e-04) | 10/10 ✅ | | aclnnApplyGradientDescent | bfloat16 | 同上 | 同上 | 3.89e-03 (7.81e-03) | 10/10 ✅ | - 覆盖 1D~4D 与标量 shape、含负 / 零 / 小数 alpha 及两种标量 alpha shape([1] 与 rank-0)。fp32 因 fp32 累加 近乎位精确;fp16/bf16 均在阈值内(bf16 最差约用满 50% 误差预算)。 - 另有 UT:op_host(tiling + infershape)6/6、op_api(aclnn,含异常分支)12/12、op_kernel(CPU 孪生 ICPU_RUN_KF 跑真实 kernel)3/3,fp16/fp32/bf16 均 max_abs_err=0。 ## 2. 对比测试(vs 默认基线) - **基线**:无可运行的默认基线。当前 CANN 部署包在 ascend910b 上没有该算子可直调的同语义内置实现 (aic-ascend910b-ops-info-*.json 中无该 OpType,也无对应 aclnn 头文件),无法构造净测对照。 - **精度等价**:N/A(无基线可对照)。 - **性能**:**N/A** —— 无可运行的默认基线,故不虚构加速比;本算子的绝对性能与优化收益见 §3。 ## 3. 性能优化(加速比 progression) - **状态**:做了 3 轮优化迭代(保留 2 项、回退 1 项)。主导瓶颈始终为 MTE2(GM 读)。数字为 ascend910b (910B3)实测绝对 kernel 时延(msprof op,warm-up 10 / launch-count 5,均值),重复性约 ±3%,sub-3% 视为 噪声。加速比 = 基线时延 / 优化后时延(>1 为更快)。 | 迭代 | 主导 bound | 优化项 | 加速比(代表值) | 精度保持 | |---|---|---|---|---| | 1 | MTE2 | 增大 UB tile(MAX_TILE 8192→16256) | ≈1.00×(净零,证实为带宽受限而非开销受限) | max_abs_err=0,**回退** | | 2 | MTE2 | 每核 512B 对齐读突发(分块粒度 32→256 元素) | 大/中 shape 1.01–1.04×,极小 shape ≈1.48× | max_abs_err=0,**保留** | | 3 | MTE2 / VEC | fp16/bf16 用一次 Axpy 融合 Muls+Sub | bf16 至 ~1.09×、fp16 ~1.03–1.04×,fp32 不变 | max_abs_err=0,**保留** | 累计(iter2 + iter3)代表性加速比与绝对时延: | dtype | 规模 | 基线 device(us) | 优化后 device(us) | 加速比 | |---|---|---|---|---| | bf16 | 1M | 7.43 | 6.82 | **1.09×** | | bf16 | 16M | 50.66 | 48.30 | 1.05× | | fp16 | 1M | 7.43 | 7.15 | 1.04× | | fp16 | 16M | 49.06 | 47.80 | 1.03× | | fp32 | 4M | 26.08 | 25.45 | 1.02× | | fp32 | 16M | 92.30 | 92.37 | 1.00× | | fp32 | 4096(极小) | 4.53 | 3.06 | **1.48×** | > 大 shape float32 已达 HBM 读带宽上限(MTE2 占比 ≈0.98、聚合读带宽 ~1.4 TB/s),读流量(var+delta)不可 > 约减,因此大 shape 热点路径无安全的进一步空间;收益集中在 fp16/bf16(去除计算暴露)与中小 shape(读突发 > 对齐 + 极小 shape 少启核)。精度在每一步均保持不变(kernel UT max_abs_err=0;上板精度 30/30 PASS)。 ## 4. 交付物 - op_host/(def + infershape + tiling + config/ascend910b/ binary config)+ op_kernel/(classic 逐元素 kernel + tiling_data)+ op_api/(aclnnApplyGradientDescent 两段式 L2 接口 + L0)+ op_graph/(proto + graph_infer)+ tests/ut/(op_host / op_api / op_kernel 三类)+ tests/st/aclnnApplyGradientDescent/ (ATK 用例对 json + executor)+ examples/(aclnn 与 GEIR 调用示例)+ README.md + docs/aclnnApplyGradientDescent.md。共 35 个文件,为纯新增,不改动仓库中任何既有文件。 - 已知限制 / 后续项:大 shape float32 已达 HBM 读带宽上限、逐元素读流量不可约减;kernel 结构层面已无安全空间, 进一步提升需从访存 / 硬件带宽层面着手。 See merge request: cann/ops-nn!7422 | 1 个月前 | |
docs目录基本概念md中文名改为英文名 Co-authored-by: chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !7857 merge master into master docs目录基本概念md中文名改为英文名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao;chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> docs目录基本概念md文件名改为英文: 避免link中的中文字符引发的跳转异常,例如两段式接口.md变成%E4%B8%A4%E6%AE%B5%E5%BC%8F%E6%8E%A5%E5%8F%A3.md,不易于维护,可能导致其他平台跳转有问题。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> [#4260](https://gitcode.com/cann/ops-nn/issues/4260) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> docs/zh/context所有md和对应的link ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7857 | 2 个月前 | |
【社区任务】AscendC实现AscendAntiQuantV2算子贡献 Co-authored-by: weixin_54022960<yaoqz80@126.com> # message auto-generated for no-merge-commit merge: !6332 merge master into master 【社区任务】AscendC实现AscendAntiQuantV2算子贡献 Created-by: weixin_54022960 Commit-by: weixin_54022960 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3480 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!6332 | 1 个月前 | |
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 | 9 个月前 | |
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 | 9 个月前 |