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

📅 2026/7/15 7:57:52
CANN/cannbot-skills: CANNBot A5基线采集工作流
CANN-Bench A5 基线采集与跑分工作流【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills本文档说明 CANN-Bench 在Ascend A5Ascend950DT_9582上如何采集官方性能基线、如何跑分对比。1. 基线是什么概念说明Baseline基线CANN 生态在该硬件上的参考实现性能用于算加速比和 SOL 分Golden精度参考tasks/levelN/op/golden.pyCPU/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设计原则复用评测体系的PerfEvaluatorKernelDetailsStrategy与正式跑分同一套计时逻辑复用refs/下的 NPU 参考算子保证 baseline 代表 CANN 生态路径每个 case独立子进程采集避免 profiler session 状态污染强制ASCEND_LAUNCH_MODEACL确保 msprof 产出完整kernel_details.csv3. 环境准备source /path/to/cann-9.0.0/bin/setenv.bash conda activate xxx # 需 torch torch_npuExp 等算子还需 torchair 依赖, 这块用户提供python环境 cd /path/to/cann-bench_A5 export PYTHONPATHsrc** 算子如果使用 torchair torch.compile需要额外依赖**pip install protobuf decorator scipy psutil absl-py # torchair 由 torch_npu 内嵌collect_baseline.py 会自动 alias 到 sys.modules4. 采集命令4.1 单算子python scripts/collect_baseline.py \ --op level1/exp \ --device-id 0 \ --warmup 5 \ --repeat 204.2 按级别 / 全量python scripts/collect_baseline.py --level 1 python scripts/collect_baseline.py --all4.3 常用参数参数默认说明--op—算子路径如level1/exp、level2/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.py→exp_reftorchair torch.compileGE 融合为AutomaticBufferFusionOp×1Mul/Add/Exp 合一Softmaxrefs/level2.py→softmax_reftorch.nn.functional.softmaxeagerSoftmaxV2 单 kernelLevel2 融合算子各 level 文件优先 CANN fused API / torch_npu 专用算子6. 单 case 采集流程内部对每个 caseBaselineCollector.collect_one_case()执行从cases.yaml读取 shape / dtype / attrsinputs.py生成 CPU 输入 → 搬至 NPU调用ref_fn(inputs, attrs)包装为 profiling 函数PerfEvaluator.run_profiled() msprof 采集从kernel_details.csv汇总device kernel 总耗时→baseline_perf_us从已有 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 # 用户安装好依赖的环境 PYTHONPATHsrc 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_evalsource-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~19. 常见问题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多 kernelattrs 导致无法融合。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.jsonQ5: 无 A5 metadata 时的 fallbackBaselineStore 会 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),仅供参考