| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
hadamard 算子的实现,单算子+融合量化算子 Co-authored-by: TX<tianxiang.xia1@huawei.com> # message auto-generated for no-merge-commit merge: !6248 merge fht-opsnn into master hadamard 算子的实现,单算子+融合量化算子 Created-by: egrr Commit-by: TX Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增 3 个融合快速哈达玛变换(FHT)算子,位于 experimental/matmul/ 下,用于 W4A4 量化中的哈达玛旋转: - fast_hadamard:FHT(fp16,非原地)。 - fast_hadamard_quant:FHT + 静态 int4 量化(packed int4,支持分组 scale/offset)。 - fast_hadamard_dynamic_quant:FHT + 每行动态 int4 量化(packed int4 + fp32 行 scale)。 实现方式:采用「生态最简算子」交付,单一 .cpp 含 device kernel + <<<>>> 启动 + TORCH_LIBRARY 注册,经 add_sources() 编入 ascend_ops_nn PyTorch 扩展,通过 torch.ops.ascend_ops_nn.* 调用。kernel 计算体取自经验证的 pto-ISA 参考实现,pto 头文件随 CANN 工具包发布(${ASCEND_TOOLKIT_HOME}/include/pto),无新增第三方依赖。动态量化算子将 reduce/expand tile 按编译期 kFullN 模板化,修复大 batch 下的 UB 越界。 附带一处共用构建修复:scripts/torch_extension/CMakeLists.txt 原 include 了仓库中缺失的 cmake/third_party/nlohmann_json.cmake,导致 PyTorch 扩展构建在 configure 阶段失败;该依赖无任何目标实际使用,改为 OPTIONAL。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue #3415 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> bash build.sh --pkg --experimental --soc=ascend910b --ops=fast_hadamard,fast_hadamard_quant,fast_hadamard_dynamic_quant pip install --no-deps --force-reinstall build_out/ascend_ops_nn-*.whl - 用例位于各算子 tests/test_*.py. python3 experimental/matmul/fast_hadamard/examples/benchmark.py 与 rotate_quant (rotq_us) 对比: batch N copy_us fht_us dyn_us rotq_us ------------------------------------------------- 8192 128 6.09 15.16 18.42 34.84 8192 256 6.12 15.45 20.50 34.58 8192 512 15.80 28.81 36.98 44.71 8192 1024 30.62 58.24 76.48 111.63 8192 2048 57.90 121.95 164.53 - rotate_quant 仅支持旋转维度 K ≤ 1024(matmul/rotate_quant/op_host/arch22/rotate_quant_tiling.cpp:39,207,tiling 校验 K must be between 16 and 1024,否则 GRAPH_FAILED);对比中旋转矩阵为 n×n(K=n),故 N=2048 超出其支持范围,无法参与对比,而本算子的向量蝶形实现支持到 n ≤ 16384。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 3 个算子的 README.mdq ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!6248 | 1 个月前 | |
fix TorchNPU Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !7243 merge master into master fix TorchNPU Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 ① torch_npu名称合一TorchNPU ②《acl API》手册更名修改 ③ link修改commerical为community ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3951 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7243 | 24 天前 | |
C++ Clean Code 编译告警、构建规范 Co-authored-by: doufloat<baijinxiang@huawei.com> # message auto-generated for no-merge-commit merge: !6687 merge feature/bjx into master C++ Clean Code 编译告警、构建规范 Created-by: doufloat Commit-by: doufloat Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 构建规范: G.SCRIPT.09 每个文件开头包含一个注释,简要概述文件源代码的功能、版权声明。 G.PY.01 Python构建文件中必须使用UTF-8编码 编译告警: unused variable 'socVersion' [-Wunused-variable] variable 'selfShape' set but not used [-Wunused-but-set-variable] suggest parentheses around '&&' within '||' [-Wparentheses] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'const size_t' {aka 'const long unsigned int'} [-Wsign-compare] unused variable 'sourceStorageFormat' [-Wunused-variable] unused variable 'version' [-Wunused-variable] unused variable 'AVG_BYTES_PER_ELEMENT' [-Wunused-variable] unused variable 'CAST_MAX_NUM' [-Wunused-variable] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'long unsigned int' [-Wsign-compare] unused parameter 'values' [-Wunused-parameter] unused variable 'MIN_INDEX_NUM' [-Wunused-variable] unused parameter 'dim' [-Wunused-parameter] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'const size_t' {aka 'const long unsigned int'} [-Wsign-compare] unused variable 'indexAxisNums' [-Wunused-variable] comparison of integer expressions of different signedness: 'op::internal::SmallVector<long int, 8, op::internal::PoolAllocator<long int> >::size_type' {aka 'long unsigned int'} and 'int64_t' {aka 'long int'} [-Wsign-compare] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'const size_t' {aka 'const long unsigned int'} [-Wsign-compare] unused variable 'socVersion' [-Wunused-variable] unused variable 'dedyDataType' [-Wunused-variable] narrowing conversion of '(((long unsigned int)numLayers) * dScale)' from 'long unsigned int' to 'long int' [-Wnarrowing] narrowing conversion of '(dScale * ((long unsigned int)hiddenSize))' from 'long unsigned int' to 'long int' [-Wnarrowing] narrowing conversion of '(dScale * ((long unsigned int)hiddenSize))' from 'long unsigned int' to 'long int' [-Wnarrowing] narrowing conversion of '(((long unsigned int)numLayers) * dScale)' from 'long unsigned int' to 'long int' [-Wnarrowing] ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/3643 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!6687 | 1 个月前 | |
C++ Clean Code 编译告警、构建规范 Co-authored-by: doufloat<baijinxiang@huawei.com> # message auto-generated for no-merge-commit merge: !6687 merge feature/bjx into master C++ Clean Code 编译告警、构建规范 Created-by: doufloat Commit-by: doufloat Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 构建规范: G.SCRIPT.09 每个文件开头包含一个注释,简要概述文件源代码的功能、版权声明。 G.PY.01 Python构建文件中必须使用UTF-8编码 编译告警: unused variable 'socVersion' [-Wunused-variable] variable 'selfShape' set but not used [-Wunused-but-set-variable] suggest parentheses around '&&' within '||' [-Wparentheses] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'const size_t' {aka 'const long unsigned int'} [-Wsign-compare] unused variable 'sourceStorageFormat' [-Wunused-variable] unused variable 'version' [-Wunused-variable] unused variable 'AVG_BYTES_PER_ELEMENT' [-Wunused-variable] unused variable 'CAST_MAX_NUM' [-Wunused-variable] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'long unsigned int' [-Wsign-compare] unused parameter 'values' [-Wunused-parameter] unused variable 'MIN_INDEX_NUM' [-Wunused-variable] unused parameter 'dim' [-Wunused-parameter] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'const size_t' {aka 'const long unsigned int'} [-Wsign-compare] unused variable 'indexAxisNums' [-Wunused-variable] comparison of integer expressions of different signedness: 'op::internal::SmallVector<long int, 8, op::internal::PoolAllocator<long int> >::size_type' {aka 'long unsigned int'} and 'int64_t' {aka 'long int'} [-Wsign-compare] comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'const size_t' {aka 'const long unsigned int'} [-Wsign-compare] unused variable 'socVersion' [-Wunused-variable] unused variable 'dedyDataType' [-Wunused-variable] narrowing conversion of '(((long unsigned int)numLayers) * dScale)' from 'long unsigned int' to 'long int' [-Wnarrowing] narrowing conversion of '(dScale * ((long unsigned int)hiddenSize))' from 'long unsigned int' to 'long int' [-Wnarrowing] narrowing conversion of '(dScale * ((long unsigned int)hiddenSize))' from 'long unsigned int' to 'long int' [-Wnarrowing] narrowing conversion of '(((long unsigned int)numLayers) * dScale)' from 'long unsigned int' to 'long int' [-Wnarrowing] ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/3643 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!6687 | 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 | 7 天前 | |
FusedPatchMlp 算子AscendC实现贡献 Co-authored-by: wuxs68<wuxs68@chinaunicom.cn> # message auto-generated for no-merge-commit merge: !7672 merge master into master FusedPatchMlp 算子AscendC实现贡献 Created-by: wuxs68 Commit-by: wuxs68 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> FusedPatchMlp 算子AscendC实现贡献 来自移动终端方向国家人工智能应用中试基地 Co-authored-by: 联通(广东)产业互联网有限公司 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#4142](https://gitcode.com/cann/ops-nn/issues/4142) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ### 1. Ops-NN UT 构建 测试指令: bash build.sh -u --ops=fused_patch_mlp --experimental 测试结果:  ### 2. Ops-NN op_host UT 测试指令: bash build.sh -u --ops=fused_patch_mlp --experimental --ophost 测试结果:  ### 3. Ops-NN op_kernel UT 测试指令: bash build.sh -u --ops=fused_patch_mlp --experimental --opkernel 测试结果:  ### 4. Ops-NN op_api UT 测试指令: bash build.sh -u --ops=fused_patch_mlp --experimental --opapi 测试结果:  ## 算子级性能对比 对 ChatTS 中的 TimeSeriesEmbedding.mlp 进行融合替换测试,比较对象包括: 1. **原始 PyTorch 实现**:nn.Sequential 包含 Linear + GELU + Linear + GELU + Linear 的逐层调用 2. **本 PR 融合算子**:aclnn_fused_patch_mlp,将多层 Linear+GELU 合并为单次 API 调用 测试在 NPU 上进行,覆盖多种实际运行 shape,使用相同的权重、偏置、dtype、预热次数和迭代次数。测试前校验输出误差,然后统计同步后的端到端前向延迟。 | Shape | 参数规模 | 原始 MLP Median | 融合算子 Median | 加速比 | 时延下降 | | ---: | ---: | ---: | ---: | ---: | ---: | | [1, 4096, 16] | hidden=256, 3层 | 0.3236 ms | 0.0931 ms | 3.48× | 71.23% | | [1, 4096, 64] | hidden=256, 3层 | 0.4591 ms | 0.0942 ms | 4.87× | 79.47% | | [1, 4096, 16] | hidden=256, 5层 | 0.5349 ms | 0.1210 ms | 4.42× | 77.39% | | [2, 4096, 16] | hidden=256, 3层 | 0.3094 ms | 0.1120 ms | 2.76× | 63.80% | ## 正确性结果 性能测试同时校验了融合算子的输出正确性: - fused_vs_original_allclose:✅ 通过(所有测试 case) - 最大绝对误差:< 6.11e-5 ~ 3.05e-4(远小于 1e-3 阈值) - 所有性能测试 case 均为 **0 allclose failures** ## 整模型端到端收益 将 ChatTS-14B 中的 TimeSeriesEmbedding.mlp 替换为 FusedPatchMlp 后,整模型 forward 端到端性能对比: | 模型 | 序列长度 | Patch 数 | 原始模型 Median | 融合模型 Median | 加速比 | 时延下降 | | :--- | ---: | ---: | ---: | ---: | ---: | ---: | | ChatTS-14B | 1024 | 128 | 338.657 ms | 314.316 ms | **1.077×** | **7.2%** | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-nn!7672 | 3 天前 | |
fix doc tools Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !7147 merge master into master fix doc tools Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 修改master分支里面doctool扫描的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3911 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [.] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7147 | 30 天前 | |
fix doc tools Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !7147 merge master into master fix doc tools Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 修改master分支里面doctool扫描的问题 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/3911 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [.] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!7147 | 30 天前 | |
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 | 7 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 24 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 7 天前 | ||
| 3 天前 | ||
| 30 天前 | ||
| 30 天前 | ||
| 7 个月前 |