| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 | 4 天前 | |
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 | 4 天前 | |
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 | 4 天前 | |
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 | 4 天前 | |
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 | 4 天前 | |
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 | 4 天前 | |
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 | 4 天前 | |
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 | 4 天前 |
FusedPatchMlp
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
功能说明
-
接口功能:
将 ChatTS-14B 中
TimeSeriesEmbedding的多层 Patch Embedding MLP(多个Linear+GELU重复,最后一层无激活)融合为单个算子。时间序列切分为 patch 后,每个 patch 行经过一个num_layers层的 MLP 映射到hidden_size,融合后一次下发即可完成,减少多次 kernel 启动开销,对长序列、多 patch 场景收益明显。 -
计算公式:
给定输入
x(形状[..., patch_size],支持 2D~8D,前置维度展平为N行),权重weights、偏置biases按层展平,层数为num_layers:h0=xh_0 = x h0=x
对第
l层(l = 0, 1, ..., num\_layers-1):zl=hl⋅Wl⊤+blz_l = h_l \cdot W_l^\top + b_l zl=hl⋅Wl⊤+bl
除最后一层外应用 GELU(tanh 近似)激活:
hl+1=GELU(zl)=0.5⋅zl⋅(1+tanh(2π⋅(zl+0.044715zl3)))h_{l+1} = \text{GELU}(z_l) = 0.5 \cdot z_l \cdot \left( 1 + \tanh\left( \sqrt{\frac{2}{\pi}} \cdot \left( z_l + 0.044715 z_l^3 \right) \right) \right) hl+1=GELU(zl)=0.5⋅zl⋅(1+tanh(π2⋅(zl+0.044715zl3)))
最后一层不做激活,直接输出:
y=znum_layers−1y = z_{num\_layers-1} y=znum_layers−1
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 公式中的输入 x,形状 [..., patch_size],支持 2D~8D,最后一维为 patch_size,其余前置维度展平为 patch 行数 N。 | FLOAT16 / FLOAT / BF16 | ND |
| weights | 输入 | 各层权重(转置后)展平拼接,公式中的 W。 | FLOAT16 / FLOAT / BF16 | ND |
| biases | 输入 | 各层偏置展平拼接,形状 [num_layers * hidden_size],公式中的 b。当 x 为 BF16 时 biases 需为 FLOAT。 | FLOAT16 / FLOAT / FLOAT | ND |
| num_layers | 必选属性 | MLP 的 Linear 层数。 | INT | - |
| y | 输出 | 公式中的 y,前置维度与 x 一致,最后一维由 patch_size 变为 hidden_size。 | FLOAT16 / FLOAT / BF16 | ND |
约束说明
- 支持 FLOAT16 / FLOAT(fp32) / BF16 三种数据类型(
x/weights/y同 dtype)。当x为 BF16 时biases需为 FLOAT(bf16 matmul 的 bias 表为 fp32,硬件不支持 bf16→float 的 bias 搬运)。 hidden_size需使 bias 张量 ≥ 64 字节(FLOAT16/BF16 下 ≥ 32,FLOAT 下 ≥ 16)。patch_size需 ≥ 16(满足 Cube 单元 K 方向的分形基本块C0=16)。weights按层顺序展平:首层为[hidden_size, patch_size]的转置,其余层为[hidden_size, hidden_size]的转置。biases长度为num_layers * hidden_size,hidden_size = biases_length / num_layers。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_fused_patch_mlp | 通过aclnnFusedPatchMlp接口方式调用FusedPatchMlp算子。 |
| 图模式调用 | - | 通过算子IR构图方式调用FusedPatchMlp算子。 |