当前位置: 首页 > news >正文

CANN/cannbot-skills: CANNBot A5基线采集工作流

CANN-Bench A5 基线采集与跑分工作流

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

本文档说明 CANN-Bench 在Ascend A5(Ascend950DT_9582)上如何采集官方性能基线、如何跑分对比。


1. 基线是什么

概念说明
Baseline(基线)CANN 生态在该硬件上的参考实现性能,用于算加速比和 SOL 分
Golden(精度参考)tasks/levelN/<op>/golden.py,CPU/NPU 数值对比,与 baseline 无关
t_hw_us硬件理论下界(带宽/算力模型),用于 SOL% 计算
baseline_perf_us参考实现在 A5 上实测的 device kernel 耗时(μs)

基线不是用户自研 kernel 的性能,而是「CANN 官方路径跑同一套 case 有多快」。


2. 采集方案总览

tasks/levelN/<op>/cases.yaml ↓ scripts/baseline/inputs.py ← 按 case 生成输入(与评测一致) ↓ scripts/baseline/refs/level{N}.py ← NPU 参考实现(ref_fn) ↓ PerfEvaluator + msprof ← 复用评测框架采 kernel 耗时 ↓ tasks/metadata/Ascend950DT_9582.json

核心脚本cann-bench_A5/scripts/collect_baseline.py

设计原则

  • 复用评测体系的PerfEvaluator+KernelDetailsStrategy(与正式跑分同一套计时逻辑)
  • 复用refs/下的 NPU 参考算子,保证 baseline 代表 CANN 生态路径
  • 每个 case独立子进程采集,避免 profiler session 状态污染
  • 强制ASCEND_LAUNCH_MODE=ACL,确保 msprof 产出完整kernel_details.csv

3. 环境准备

source /path/to/cann-9.0.0/bin/setenv.bash conda activate xxx # 需 torch + torch_npu;Exp 等算子还需 torchair 依赖, 这块用户提供python环境 cd /path/to/cann-bench_A5 export PYTHONPATH=src

** 算子如果使用 torchair + torch.compile,需要额外依赖**:

pip install protobuf decorator scipy psutil absl-py # torchair 由 torch_npu 内嵌,collect_baseline.py 会自动 alias 到 sys.modules

4. 采集命令

4.1 单算子

python scripts/collect_baseline.py \ --op level1/exp \ --device-id 0 \ --warmup 5 \ --repeat 20

4.2 按级别 / 全量

python scripts/collect_baseline.py --level 1 python scripts/collect_baseline.py --all

4.3 常用参数

参数默认说明
--op算子路径,如level1/explevel2/softmax
--device-id0NPU 卡号
--warmup5预热次数
--repeat20采集 repeat 次数
--cases全部逗号分隔 case id,如1,2,5
--skip-existingoff跳过 metadata 中已有数据的 case
--force-recollectoff强制重采
--output自动输出 JSON 路径
--bench-roottasks/评测集根目录

5. 参考实现(refs)策略

refs 注册在scripts/baseline/ref_registry.py,按 level 分文件:

算子类型参考路径典型 kernel 形态
Exprefs/level1.pyexp_reftorchair + torch.compile,GE 融合为AutomaticBufferFusionOp×1(Mul/Add/Exp 合一)
Softmaxrefs/level2.pysoftmax_reftorch.nn.functional.softmax(eager,SoftmaxV2 单 kernel)
Level2+ 融合算子各 level 文件优先 CANN fused API / torch_npu 专用算子

6. 单 case 采集流程(内部)

对每个 case,BaselineCollector.collect_one_case()执行:

  1. cases.yaml读取 shape / dtype / attrs
  2. inputs.py生成 CPU 输入 → 搬至 NPU
  3. 调用ref_fn(inputs, attrs)包装为 profiling 函数
  4. PerfEvaluator.run_profiled()+ msprof 采集
  5. kernel_details.csv汇总device kernel 总耗时baseline_perf_us
  6. 从已有 metadata 读取或保留t_hw_us

计时口径:只统计 device kernel 时间(与候选算子跑分一致),不用 wall clock 替代。


7. 产出物

7.1 文件路径

文件用途
scripts/baseline/output/Ascend950DT_9582_<op>.json单算子采集中间结果
tasks/metadata/Ascend950DT_9582.json正式基线库(BaselineStore 加载)
reports/profiler 归档(调试用)

7.2 metadata JSON 结构

{ "_metadata": { "hardware": "Ascend950DT_9582", "source": "collect_baseline.py (PerfEvaluator + KernelDetailsStrategy + refs)", "warmup": 5, "repeat": 20 }, "level1": { "exp": { "1": { "baseline_perf_us": 11.54, "t_hw_us": 1.09 }, "2": { "baseline_perf_us": 25.62, "t_hw_us": 8.74 } } } }

硬件型号由DeviceManager.get_device_name()自动映射(如Ascend950DT_9582)。


8. 跑分:候选算子 vs A5 基线

8.1 CANN-Bench 评测命令

cd /path/to/cann-bench_A5 source /path/to/cann-9.0.0/bin/setenv.bash conda activate xxx # 用户安装好依赖的环境 PYTHONPATH=src python -m kernel_eval.cli eval \ --source-dir /path/to/candidate/exp \ --task-dir tasks/level1/exp \ --operator Exp \ --device-id 0 \ --processes-per-card 1 \ --warmup 3 \ --repeat 5 \ --output reports/baseline_exp_a5_eval

source-dir 要求

  • build.sh→ 编译libexp_ops.so+ 打包cann_benchwheel
  • cann_bench/__init__.py→ 暴露exp(x, base, scale, shift)接口

8.2 评分公式

加速比 speedup = baseline_perf_us / candidate_kernel_us SOL% perf_score = t_hw_us / candidate_kernel_us × 100% 综合得分 = 编译分(20) + 功能分(30) + 性能分(≤50)

8.3 报告字段

评测 JSON 报告(reports/<op>_eval_*.json)每个 case 含:

字段含义
baseline_perf_usA5 基线耗时
elapsed_us候选 kernel 耗时
speedup加速比
t_hw_us硬件理论下界
perf_score归一化性能分(0~1)

9. 常见问题

Q1: Exp 基线采集 0/20 失败

原因:缺少 torchair 运行时依赖(protobuf、decorator、scipy 等)。
对比:Softmax 用 eager API,无 torchair 依赖,通常一次成功。

Q2: baseline 与 cases.csv 中 baseline_kernels 标注不一致

cases.csv 的baseline_kernels设计预期(如AutomaticBufferFusionOp×1);实际采集以 msprof 抓到的 kernel 为准。Exp 在部分 case 上可能仍是Muls + Add + Exp多 kernel(attrs 导致无法融合)。

Q3: 直调 wall_time 与 CANN-Bench 分数对不上

直调run_all_cases.py的 wall_time 含 ACL 初始化(~5–7s/case),不能baseline_perf_us比加速比。加速比必须以 CANN-Bench eval 报告的elapsed_us为准。

Q4: 如何更新 A5 基线

python scripts/collect_baseline.py --op level1/exp --force-recollect # 合并写入 tasks/metadata/Ascend950DT_9582.json

Q5: 无 A5 metadata 时的 fallback

BaselineStore 会 fallback 到默认平台(如910b2)的数据并打印 warning;正式 A5 跑分前应确保tasks/metadata/Ascend950DT_9582.json已采集。


10. 关键路径速查

用途路径(cann-bench_A5 仓库内)
基线采集脚本scripts/collect_baseline.py
参考实现scripts/baseline/refs/level{1-4}.py
输入生成scripts/baseline/inputs.py
正式基线库tasks/metadata/Ascend950DT_9582.json
评测用例tasks/levelN/<op>/cases.yaml
性能评测核心src/kernel_eval/eval/perf_eval.py
基线加载src/kernel_eval/utils/baseline_store.py

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1192415/

相关文章:

  • 从SRAM到eMMC:嵌入式系统存储技术选型全解析
  • 单片机实战:从零编写IIC驱动点亮OLED屏幕
  • 系统集成项目管理实战:从成本进度控制到十大管理落地
  • LittleD嵌入式数据库核心架构解析:从SQL解析到查询执行
  • Xilinx IDELAYE2实战指南:从原理到高速接口时序校准
  • DRA71x引脚复用实战:从硬件设计到设备树配置的嵌入式开发指南
  • TuringCourses社区贡献指南:如何为浙江大学图灵班学习资源添砖加瓦
  • 风筝冲浪全链路服务哪家专业? - 中媒介
  • 小微创业者低门槛创业项目 - 中媒介
  • Unity视频开发实战:AVPro Video插件核心架构、跨平台优化与疑难排查
  • ETF双因子轮动策略:动量与质量因子的Python量化实战
  • STM32实战:PID算法与PWM协同实现高精度温度闭环控制
  • 逐点比较法圆弧插补:从原理到STM32实战实现
  • 3秒获取百度网盘提取码:智能破解工具完全使用指南
  • 【嵌入式烧录/刷写文件】-S19文件校验和计算与数据完整性验证
  • 阵列信号处理(信源传播模型:从远场平面波到近场球面波)
  • 【接口技术】实战:8253/8254定时器工作模式深度解析与编程指南
  • 深圳选优质专业的直播外设哪家好 - 中媒介
  • GPT-5.6在SOL、TERRA、LUNA领域的实测部署与优化指南
  • 数码产品电池哪家专业? - 中媒介
  • TUSB4041I-Q1车规级USB集线器芯片:设计、配置与调试全解析
  • 龙岩秘制小菜粉哪家效果好? - 中媒介
  • usrsctp故障排除:10个常见问题与终极解决方案大全
  • convoC2开发者指南:从零开始构建基于Go的C2服务器和Agent客户端
  • 哈雷大滑翔头罩修复技术:从损伤评估到恢复原厂标准的完整指南
  • 高通9008模式深度解析:从救砖到系统修复的完整指南
  • Fixie测试并行执行:如何配置和优化测试运行性能的终极指南
  • Nanocube高级应用:如何处理TB级时空数据并保持毫秒级响应
  • 江苏毛绒玩具交付哪家好? - 中媒介
  • google-drive-upload多账户管理技巧:轻松切换不同Google Drive账号