mcpField
H
huawei-cloud-ascendc-operator-performance-optim

huawei-cloud-ascendc-operator-performance-optim

github.com/huaweicloud开发59212 次安装2 天前更新
代码仓库

关于 huawei-cloud-ascendc-operator-performance-optim

为 AscendC 自定义算子开发与性能优化提供指导,面向使用 Ascend NPU 的开发者。涵盖性能分析、瓶颈定位、算子实现、优化和验证,重点针对 Ascend 910B。

主要功能

  1. 01使用性能分析定位瓶颈
  2. 02开发 AscendC 自定义算子
  3. 03优化内存、计算与数据布局
  4. 04验证算子正确性和性能
  5. 05提供 Ascend NPU 优化实践

适用场景

  1. 01优化 Ascend NPU 上的关键算子
  2. 02为特定工作负载开发自定义算子
  3. 03解决性能分析发现的算子瓶颈
  4. 04为 NPU 部署实现缺失算子

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-ascendc-operator-performance-optim

安装后在 Claude Code 中输入/huawei-cloud-ascendc-operator-performance-optim确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceptance-criteria.md
api-usage-prof.md
data-copy-prof.md
memory-prof.md
pipeline-prof.md
scalar-prof.md
tiling-prof.md
troubleshooting.md
verification-method.md
references/ascendc-api/
basic-data-structures-api.md
data-copy-api.md
GUIDE.md
kernel-constraints.md
resource-management-api.md
sync-control-api.md
vector-compute-api.md
scripts/
e2e_compare.sh
e2e_compile_run.sh
e2e_profile_onboard.sh
e2e_profile_simulator.sh

详细介绍

Huawei Cloud AscendC 算子性能优化

概述

此技能为使用 AscendC 编程语言开发和优化自定义算子提供指导。

架构:性能分析 → 瓶颈识别 → 算子开发 → 优化 → 验证

相关技能:

  • huawei-cloud-ascend-profiler-db-explorer - 性能数据分析和瓶颈识别
  • huawei-cloud-ascend-small-model-migrate - 可能需要算子优化的迁移工作流

架构组件

此技能涉及以下云服务和组件:

  • AscendC:用于开发自定义算子的编程语言
  • CANN:Huawei Cloud 的 NPU AI 计算平台
  • Ascend 910B:用于部署算子的目标 NPU 硬件
  • Ascend Profiler:用于验证的性能分析工具

架构图:

┌─────────────────────────────────────────────────────────────┐
│            AscendC Operator Optimization Skill             │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐ │
│  │  Performance │───▶│  Bottleneck  │───▶│  Operator    │ │
│  │  Analysis    │    │  Identification│   │  Development │ │
│  └──────────────┘    └──────────────┘    └──────────────┘ │
│         │                   │                   │          │
│         ▼                   ▼                   ▼          │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐ │
│  │  Profiling   │    │  Optimization│    │  Validation │ │
│  │  Data        │    │  Techniques  │    │  & Testing  │ │
│  └──────────────┘    └──────────────┘    └──────────────┘ │
└─────────────────────────────────────────────────────────────┘

使用场景

典型问题场景:

  • 优化 Ascend NPU 上对性能要求较高的算子
  • 为特定工作负载开发自定义算子
  • 通过算子优化提升模型推理性能
  • 修复分析过程中发现的算子瓶颈
  • 为 NPU 部署实现缺失的算子

典型用户表述:

  • “优化我的 Ascend 自定义算子”
  • “为 GEMM 开发 AscendC 算子”
  • “提升 NPU 上的推理性能”
  • “修复瓶颈算子”
  • “使用 AscendC 实现自定义算子”
  • “AscendCOperator”
  • “OptimizationAscendOperatorPerformance”
  • “OperatorPerformance”

范围

支持:

  • 使用 AscendC 开发自定义算子
  • 优化现有算子的性能
  • 算子验证和测试

不支持:

  • 非 AscendC 算子开发
  • 框架级优化

核心工作流

1. 性能分析
  • 使用性能分析工具识别性能瓶颈
  • 分析算子执行时间和资源利用率
2. 瓶颈识别
  • 识别执行时间较长的算子
  • 确定优化机会
3. 算子开发
  • 使用 AscendC 实现自定义算子
  • 遵循 AscendC 最佳实践
4. 优化技术
  • 内存优化
  • 计算优化
  • 数据布局优化
5. 验证
  • 验证功能正确性
  • 验证性能提升

参考文档

文档描述
验收标准功能验收标准
验证方法验证方法
故障排除常见问题及解决方案

前提条件

  • 已安装 CANN >= 7.0.0
  • 已安装 AscendC >= 1.0.0
  • 已安装 Ascend NPU 驱动,且运行正常
  • 待优化的算子代码或性能数据

核心命令

# Analyze operator performance bottlenecks
msprof --output=/path/to/output ./my_operator

# Optimize operator using AscendC
# Refer to CANN development guide for operator development

参数确认

参数描述必填
算子代码路径待优化的算子源代码是
输出目录性能分析结果的输出路径是
优化策略性能优化方案选择否

输出格式

性能分析结果保存在指定的输出目录中:

output/
├── summary.json           # Performance summary
├── operator_stats.csv     # Operator execution statistics
├── timeline.json          # Execution timeline data
└── recommendations.md     # Optimization recommendations

摘要 JSON 结构:

{
  "total_time_ms": 1234.56,
  "operator_count": 42,
  "top_operators": [
    {"name": "CustomGEMM", "time_ms": 456.78, "percentage": 37.0},
    {"name": "VectorAdd", "time_ms": 123.45, "percentage": 10.0}
  ],
  "optimization_candidates": ["CustomGEMM", "DataTransfer"]
}

验证方法

功能验证
  1. 使用测试输入运行算子
  2. 将输出与参考实现进行比较
  3. 验证数值精度(FP32 容差:1e-5,FP16 容差:1e-3)
性能验证
  1. 测量优化前算子的基准性能
  2. 应用优化改动
  3. 测量优化后算子的基准性能
  4. 计算加速比:speedup = time_before / time_after
验收标准
  • 功能正确性:输出与参考结果的差异在容差范围内
  • 性能提升:Speedup >= 1.2x(提升 20%)
  • 无回归:其他算子不受影响

最佳实践

内存优化
  • 大型张量使用 GM(全局内存)
  • 矩阵运算的中间结果使用 L1/L0A/L0B
  • 将内存访问对齐到 32 字节边界
  • 尽可能复用内存缓冲区
计算优化
  • 使用 AscendC 内建函数向量化运算
  • 矩阵运算使用 MMA(矩阵乘加)
  • 并行执行相互独立的运算
  • 尽量减少同步点
数据布局优化
  • 矩阵运算使用 NZ 格式
  • 向量运算使用 ND 格式
  • 避免不必要的格式转换
  • 考虑数据访问时的内存合并
代码结构
  • 将计算逻辑与内存操作分离
  • 使用模板元编程提高灵活性
  • 记录优化所依据的假设
  • 每次优化前后都进行性能分析

注意事项

常见陷阱
  • 内存 bank 冲突:确保数据分布在不同内存 bank 中
  • 未对齐访问:检查所有缓冲区是否按 32 字节对齐
  • 过度同步:尽量减少内核间的屏障使用
  • 数据格式错误:根据运算类型匹配格式(矩阵乘法使用 NZ,向量运算使用 ND)
性能提示
  1. 先进行性能分析,找出真正的瓶颈
  2. 优先关注热点路径(总耗时超过 10% 的运算符)
  3. 与微优化相比,优先考虑算法层面的改进
  4. 使用符合实际情况的输入规模进行测试
  5. 每次优化后都验证正确性
调试提示
  • 使用 ASCENDC_DEBUG=1 输出详细日志
  • 查看 /var/log/npu/ 中的 CANN 日志文件
  • 与 CPU 参考实现进行比较
  • 使用 msprof 进行详细的性能分解
限制
  • AscendC 运算符特定于硬件(910B)
  • 并非所有 PyTorch 运算符都有对应的 AscendC 实现
  • 自定义运算符需要重新编译 CANN 才能部署

评论

支持 Markdown