CANN自动融合精度分析工具

发布时间:2026/7/16 21:06:05
CANN自动融合精度分析工具 fusion_precision_analyzer【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾Ascend芯片的轻量级、解耦式组件集合旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion融合算子精度定位工具。当关闭自动融合网络精度正常、开启自动融合精度劣化时通过比较两个场景的 dump 数据定位是哪个融合算子导致了整网精度劣化。功能工具支持两种运行模式模式1默认基于 dump 图 JSON 和 datadump NPY 目录批量比较每个融合算子的输入输出与对应原算子输出的精度差异输出控制台表格模式2直接比较两个 NPY 文件输出余弦相似度、绝对误差最大值、相对误差最大值精度指标指标计算方式余弦相似度dot(a, b) / (norm(a) * norm(b) 1e-8)绝对误差最大值max(|a - b|)相对误差最大值max(|a - b| / (max(|a|, |b|) 1e-8))数据差异处理场景处理方式状态标记NPY 文件未找到跳过FILE_NOT_FOUNDNPY 加载失败跳过NPY_LOAD_ERRORformat 不一致支持转换NC1HWC0→NHWC/ND、NDC1HWC0→NDHWC/NDFORMAT_CONVERTEDformat 不一致不支持转换跳过FORMAT_UNSUPPORTEDdtype 不一致低精度提升为高精度DTYPE_CASTshape 不一致但元素数相同展平后比较SHAPE_FLATTENEDshape 不一致且元素数不同跳过SHAPE_MISMATCH输入源为 Constant/Data跳过SKIPPED_CONST_DATA缺少映射属性跳过NO_MAPPING指标计算失败跳过COMPUTE_ERROR依赖pip install numpy使用方式模式1批量比较融合算子输入输出python3 fusion_precision_analyzer.py \ --af-open-graph 开启融合dump图JSON \ --af-open-data 开启融合datadump NPY目录 \ --af-close-data 关闭融合datadump NPY目录 \ [--compare-input]参数必选说明--mode否运行模式1或2默认1--af-open-graph是开启自动融合的 dump 图 JSON 文件路径--af-close-graph是关闭自动融合的 dump 图 JSON 文件路径--af-open-data是开启自动融合的 datadump NPY 目录--af-close-data是关闭自动融合的 datadump NPY 目录--compare-input否是否比较融合算子输入默认不比较模式2直接比较两个 NPY 文件python3 fusion_precision_analyzer.py \ --mode 2 \ --npy-a NPY文件A \ --npy-b NPY文件B参数必选说明--mode否运行模式设为2--npy-a是第一个 NPY 文件路径--npy-b是第二个 NPY 文件路径使用样例样例1模式1仅比较输出python3 fusion_precision_analyzer.py \ --af-open-graph /home/user/dumpgraph_af_open/Build.json \ --af-close-graph /home/user/dumpgraph_af_close/Build.json \ --af-open-data /home/user/datadump_af_open \ --af-close-data /home/user/datadump_af_close输出示例解析开启融合 dump 图: /home/user/dumpgraph_af_open/Build.json 解析关闭融合 dump 图: /home/user/dumpgraph_af_close/Build.json 找到 8 个融合算子输出映射 类型 | 融合算子名 | 索引 | 原算子名 | 原索引 | 余弦相似度 | 绝对误差最大值 | 相对误差最大值 | 状态 ----------------------------------------------------------------------------------------------------------------------- 输出 | autofuse_28_Pow_RealDiv_Square | 0 | ArithmeticOptimizer_... | 0 | 1.00000000 | 0.0000e00 | 0.0000e00 | OK 输出 | autofuse_38_Pow_Minimum_Reshape_... | 0 | truediv_9 | 0 | 0.99999832 | 1.2000e-05 | 3.4000e-06 | OK 输出 | autofuse_35_Pow_Maximum_Square_... | 0 | Sum_6 | 0 | - | - | - | FILE_NOT_FOUND 输出 | autofuse_33_Square_RealDiv | 0 | truediv_16 | 0 | 1.00000000 | 0.0000e00 | 0.0000e00 | OK样例2模式1同时比较输入和输出python3 fusion_precision_analyzer.py \ --af-open-graph /home/user/dumpgraph_af_open/Build.json \ --af-close-graph /home/user/dumpgraph_af_close/Build.json \ --af-open-data /home/user/datadump_af_open \ --af-close-data /home/user/datadump_af_close \ --compare-input输出示例解析开启融合 dump 图: /home/user/dumpgraph_af_open/Build.json 解析关闭融合 dump 图: /home/user/dumpgraph_af_close/Build.json 找到 8 个融合算子输出映射, 5 个融合算子输入映射 类型 | 融合算子名 | 索引 | 原算子名 | 原索引 | 余弦相似度 | 绝对误差最大值 | 相对误差最大值 | 状态 ----------------------------------------------------------------------------------------------------------------------------------- 输出 | autofuse_28_Pow_RealDiv_Square | 0 | ArithmeticOptimizer_... | 0 | 1.00000000 | 0.0000e00 | 0.0000e00 | OK 输出 | autofuse_33_Square_RealDiv | 0 | truediv_16 | 0 | 1.00000000 | 0.0000e00 | 0.0000e00 | OK 输入 | autofuse_28_Pow_RealDiv_Square | 0 | dynamic_const_2309685_16| 0 | - | - | - | SKIPPED_CONST_DATA 输入 | autofuse_33_Square_RealDiv | 0 | truediv_3 | 0 | 1.00000000 | 0.0000e00 | 0.0000e00 | SHAPE_FLATTENED样例3模式2直接比较两个 NPY 文件python3 fusion_precision_analyzer.py \ --mode 2 \ --npy-a /home/user/datadump_af_open/AscBackend.autofuse_28_Pow_RealDiv_Square.3.44.1783906987170021.output.0.npy \ --npy-b /home/user/datadump_af_close/Square.ArithmeticOptimizer_ReplaceMulWithSquare_Mul_7.9.44.1783906974676130.output.0.npy输出示例文件A: /home/user/datadump_af_open/AscBackend.autofuse_28_Pow_RealDiv_Square.3.44.1783906987170021.output.0.npy 文件B: /home/user/datadump_af_close/Square.ArithmeticOptimizer_ReplaceMulWithSquare_Mul_7.9.44.1783906974676130.output.0.npy 状态: OK 余弦相似度: 1.0000000000 绝对误差最大值: 0.000000e00 相对误差最大值: 0.000000e00工作原理模式1解析开启融合的 dump 图 JSON识别融合算子type为AscBackend或FusedAscBackend从融合算子的output_desc中提取_datadump_origin_name和_datadump_origin_output_index属性建立融合算子输出到原算子输出的映射解析关闭融合的 dump 图 JSON构建原算子节点名到输出 format 的查找表从融合算子的input字段解析node:idx引用若输入源为融合算子则进一步解析为对应原算子根据 op name/替换为_在两个 datadump 目录中匹配 NPY 文件融合侧 format 从 af_open 图获取原算子侧 format 从 af_close 图获取对每对匹配的数据处理 format/dtype/shape 差异后计算精度指标输出控制台表格按图中融合算子遍历顺序排列模式2加载两个 NPY 文件处理 dtype/shape 差异后计算精度指标输出结果前置条件用户需通过 CANN 精度调试工具链获取以下数据dump 图 JSON开启自动融合场景的 GE dump 图通过环境变量DUMP_GE_GRAPH2等方式生成datadump NPY 文件通过 CANN datadump 机制采集二进制数据再通过msaccucmp.py工具转换为 NPY 格式【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾Ascend芯片的轻量级、解耦式组件集合旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考