| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: 支持ATT analysis tool Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1855 merge att-analysis-pr-vendor into develop feat: 支持ATT analysis tool Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 ATT 模板和 tiling 的问题定位通常需要对比默认 Autofuse、开启 PGO、强制模板等场景,再结合 [PROF]/[DFX] 日志、profiling、kernel meta 和 dump 图判断差异原因。原有分析工具位于外部目录,使用时依赖固定文件名和目录结构,难以直接分析用户执行 PyTorch/Inductor 或 TensorFlow 脚本后产生的实际产物。 ## 2. 修改方案 - 在 autofuse/tools/att_analyze/src/att.py 提供统一 CLI 入口。 - 兼容日志文件、日志目录和递归产物目录,不假设用户一定使用仓内 sample 脚本。 - summary、compare、split-slog、perf-formula、verify-tiling、evidence 六个工具分别负责汇总、对比、拆分、公式分析、ABI 验证和证据导出。 - verify-tiling 支持 TensorFlow/Inductor ABI;preset_B.json 的 aiv_num 默认改为 56,并支持 --aiv-num 覆盖。执行前打印实际核数、来源、UB 大小和动态维度,方便用户核对硬件配置。 - output_code.py 只提取字面量 artifact,不执行用户 Python 文件;Inductor PGO 的分段 host 源码可被拆分后参与验证。 - 日志缺失时保留 parse_status,不把缺失值当作有效 0;evidence JSONL 包含来源路径和行号,便于后续 skill 或人工复核。 - 删除重复的 NOTICE、readme.md 和 docs/CSV_COMPARISON.md,工具目录的职责统一由 autofuse/tools/README.md 和 ATT README 说明;新增/整理的工具文件使用 2026 License。 ## 3. 代码目录结构 text autofuse/tools/att_analyze/ ├── src/att.py # 统一命令行入口 ├── src/commands/ │ ├── summary.py # ATT 日志汇总 │ ├── compare.py # 两次结果对比 │ ├── evidence.py # 机器可读证据导出 │ ├── split_slog.py # DFX/PROF 日志拆分 │ ├── perf_formula.py # pipe 公式和 SVG 分析 │ └── verify_tiling.py # TF/Inductor tiling ABI 验证 ├── src/core/ │ ├── log_parser.py # 日志解析和状态标记 │ ├── evidence_schema.py # evidence 记录结构 │ ├── file_utils.py # 输入发现和输出目录处理 │ └── tiling_func_reader.py # tiling 源码读取 ├── examples/examples.py # Python API 和 CLI 命令示例 ├── tests/{unit,functional,integration}/# 回归测试 ├── tests/data/ # 脱敏固定日志 fixture ├── README.md / README_en.md # 使用说明 └── .gitignore # 工具临时输出忽略规则 ## 4. 工具职责、使用方法和效果 | 工具 | 职责与输入 | 示例命令 | 实际效果 | | --- | --- | --- | --- | | summary | 从 ATT [PROF] 日志或目录提取算子、模板、graph/result/group/case、tiling 和性能字段 | python3 autofuse/tools/att_analyze/src/att.py summary run.log -f csv -o summary.csv | 输出 console/CSV/Excel 汇总;不完整记录带 parse_status | | compare | 对比默认、PGO、强制模板或其他候选的两个 summary CSV | python3 autofuse/tools/att_analyze/src/att.py compare default.csv candidate.csv -f text -o compare.txt | 按 Operator/Graph/Result/Group/Case 匹配,显示模板、case、tiling 和性能差异 | | evidence | 将日志转换为机器可读证据 | python3 autofuse/tools/att_analyze/src/att.py evidence run.log -o evidence/ | 生成 att-evidence.jsonl 和 manifest,记录来源路径、行号和解析状态 | | split-slog | 按算子及 graph/result/group/case 拆分 DFX 编译日志和 PROF 运行日志 | python3 autofuse/tools/att_analyze/src/att.py split-slog slog/ --op FlashAttentionScore -o split/ | 生成 compiler/、runtime/ 下的 case 日志,便于逐 case 定位 | | perf-formula | 解析 tiling 源码和 [PERF] pipe 公式 | python3 autofuse/tools/att_analyze/src/att.py perf-formula generated/ run.log --case r=0,g=0,c=1 -o perf/ | 生成 perf_formula.svg,标出最大 pipe 和跨 case 敏感参数;缺少 [PERF] 时明确提示证据不足 | | verify-tiling | 编译并执行用户提供的 TF/Inductor tiling 函数 | python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56 -o verify/ | 控制台打印有效配置和编译/执行结果,verify/result.json 保存 block_dim、workspace 或失败原因 | examples/examples.py 的第一个示例只打印以上 CLI 命令,不会自动编译、profiling 或执行 tiling 验证;其余示例展示 Python API 调用。 ## 5. 代码修改流程图 mermaid flowchart LR A[用户执行默认/PGO/强制模板场景] --> B[日志、profiling、kernel_meta、dump] B --> C{att CLI} C --> D[summary 汇总] D --> E[compare 对比选择和性能] B --> F[split-slog 拆分 DFX/PROF] B --> G[evidence 导出来源证据] B --> H[perf-formula 生成 pipe SVG] B --> I[verify-tiling 编译并执行 ABI] E --> J[报告模板/tiling 差异] F --> J G --> J H --> J I --> J 采集 [PROF]/[DFX] 时,用户通常需要在自己的执行命令中设置 ASCEND_SLOG_PRINT_TO_STDOUT=1 和 ASCEND_GLOBAL_LOG_LEVEL=1。本工具默认只读已有产物,不猜测 case,也不代替用户重新运行模型。 ## 6. 测试用例说明 | 检查项 | 结果 | | --- | --- | | ATT unit/integration/functional tests | 94 passed | | git diff --check | 通过 | | ruff、ruff-format、codespell | 通过 | | pre-commit(含 OAT、冲突标记、禁止 docs/superpowers) | 通过 | | CLI 合约测试 | 覆盖六个子命令和 CLI 示例顺序 | 固定 tests/data/ 仅用于回归;真实 CANN、TensorFlow 或 Inductor 日志格式变化时,应脱敏新增 fixture 并同步期望结果,不覆盖旧样例。上述测试验证工具解析和产物生成能力,不代表任何模型的性能或精度结论。 ## 7. 核对清单 - [x] 工具源码、测试和文档均在当前仓维护 - [x] 六个工具均有职责、输入、命令和效果说明 - [x] verify-tiling 打印有效 aiv_num 并支持命令行覆盖 - [x] 日志证据缺失时显式标记,不静默填充 0 - [x] 已删除重复文档和 NOTICE - [x] 顶层 docs/ 未修改 - [x] 顶层 autofuse/README*.md 未纳入最终 PR 差异 - [ ] 未执行设备侧 tiling 验证 ## 8. 其他信息 工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。 See merge request: cann/graph-autofusion!1855 | 2 天前 | |
feat: 支持ATT analysis tool Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1855 merge att-analysis-pr-vendor into develop feat: 支持ATT analysis tool Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 ATT 模板和 tiling 的问题定位通常需要对比默认 Autofuse、开启 PGO、强制模板等场景,再结合 [PROF]/[DFX] 日志、profiling、kernel meta 和 dump 图判断差异原因。原有分析工具位于外部目录,使用时依赖固定文件名和目录结构,难以直接分析用户执行 PyTorch/Inductor 或 TensorFlow 脚本后产生的实际产物。 ## 2. 修改方案 - 在 autofuse/tools/att_analyze/src/att.py 提供统一 CLI 入口。 - 兼容日志文件、日志目录和递归产物目录,不假设用户一定使用仓内 sample 脚本。 - summary、compare、split-slog、perf-formula、verify-tiling、evidence 六个工具分别负责汇总、对比、拆分、公式分析、ABI 验证和证据导出。 - verify-tiling 支持 TensorFlow/Inductor ABI;preset_B.json 的 aiv_num 默认改为 56,并支持 --aiv-num 覆盖。执行前打印实际核数、来源、UB 大小和动态维度,方便用户核对硬件配置。 - output_code.py 只提取字面量 artifact,不执行用户 Python 文件;Inductor PGO 的分段 host 源码可被拆分后参与验证。 - 日志缺失时保留 parse_status,不把缺失值当作有效 0;evidence JSONL 包含来源路径和行号,便于后续 skill 或人工复核。 - 删除重复的 NOTICE、readme.md 和 docs/CSV_COMPARISON.md,工具目录的职责统一由 autofuse/tools/README.md 和 ATT README 说明;新增/整理的工具文件使用 2026 License。 ## 3. 代码目录结构 text autofuse/tools/att_analyze/ ├── src/att.py # 统一命令行入口 ├── src/commands/ │ ├── summary.py # ATT 日志汇总 │ ├── compare.py # 两次结果对比 │ ├── evidence.py # 机器可读证据导出 │ ├── split_slog.py # DFX/PROF 日志拆分 │ ├── perf_formula.py # pipe 公式和 SVG 分析 │ └── verify_tiling.py # TF/Inductor tiling ABI 验证 ├── src/core/ │ ├── log_parser.py # 日志解析和状态标记 │ ├── evidence_schema.py # evidence 记录结构 │ ├── file_utils.py # 输入发现和输出目录处理 │ └── tiling_func_reader.py # tiling 源码读取 ├── examples/examples.py # Python API 和 CLI 命令示例 ├── tests/{unit,functional,integration}/# 回归测试 ├── tests/data/ # 脱敏固定日志 fixture ├── README.md / README_en.md # 使用说明 └── .gitignore # 工具临时输出忽略规则 ## 4. 工具职责、使用方法和效果 | 工具 | 职责与输入 | 示例命令 | 实际效果 | | --- | --- | --- | --- | | summary | 从 ATT [PROF] 日志或目录提取算子、模板、graph/result/group/case、tiling 和性能字段 | python3 autofuse/tools/att_analyze/src/att.py summary run.log -f csv -o summary.csv | 输出 console/CSV/Excel 汇总;不完整记录带 parse_status | | compare | 对比默认、PGO、强制模板或其他候选的两个 summary CSV | python3 autofuse/tools/att_analyze/src/att.py compare default.csv candidate.csv -f text -o compare.txt | 按 Operator/Graph/Result/Group/Case 匹配,显示模板、case、tiling 和性能差异 | | evidence | 将日志转换为机器可读证据 | python3 autofuse/tools/att_analyze/src/att.py evidence run.log -o evidence/ | 生成 att-evidence.jsonl 和 manifest,记录来源路径、行号和解析状态 | | split-slog | 按算子及 graph/result/group/case 拆分 DFX 编译日志和 PROF 运行日志 | python3 autofuse/tools/att_analyze/src/att.py split-slog slog/ --op FlashAttentionScore -o split/ | 生成 compiler/、runtime/ 下的 case 日志,便于逐 case 定位 | | perf-formula | 解析 tiling 源码和 [PERF] pipe 公式 | python3 autofuse/tools/att_analyze/src/att.py perf-formula generated/ run.log --case r=0,g=0,c=1 -o perf/ | 生成 perf_formula.svg,标出最大 pipe 和跨 case 敏感参数;缺少 [PERF] 时明确提示证据不足 | | verify-tiling | 编译并执行用户提供的 TF/Inductor tiling 函数 | python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56 -o verify/ | 控制台打印有效配置和编译/执行结果,verify/result.json 保存 block_dim、workspace 或失败原因 | examples/examples.py 的第一个示例只打印以上 CLI 命令,不会自动编译、profiling 或执行 tiling 验证;其余示例展示 Python API 调用。 ## 5. 代码修改流程图 mermaid flowchart LR A[用户执行默认/PGO/强制模板场景] --> B[日志、profiling、kernel_meta、dump] B --> C{att CLI} C --> D[summary 汇总] D --> E[compare 对比选择和性能] B --> F[split-slog 拆分 DFX/PROF] B --> G[evidence 导出来源证据] B --> H[perf-formula 生成 pipe SVG] B --> I[verify-tiling 编译并执行 ABI] E --> J[报告模板/tiling 差异] F --> J G --> J H --> J I --> J 采集 [PROF]/[DFX] 时,用户通常需要在自己的执行命令中设置 ASCEND_SLOG_PRINT_TO_STDOUT=1 和 ASCEND_GLOBAL_LOG_LEVEL=1。本工具默认只读已有产物,不猜测 case,也不代替用户重新运行模型。 ## 6. 测试用例说明 | 检查项 | 结果 | | --- | --- | | ATT unit/integration/functional tests | 94 passed | | git diff --check | 通过 | | ruff、ruff-format、codespell | 通过 | | pre-commit(含 OAT、冲突标记、禁止 docs/superpowers) | 通过 | | CLI 合约测试 | 覆盖六个子命令和 CLI 示例顺序 | 固定 tests/data/ 仅用于回归;真实 CANN、TensorFlow 或 Inductor 日志格式变化时,应脱敏新增 fixture 并同步期望结果,不覆盖旧样例。上述测试验证工具解析和产物生成能力,不代表任何模型的性能或精度结论。 ## 7. 核对清单 - [x] 工具源码、测试和文档均在当前仓维护 - [x] 六个工具均有职责、输入、命令和效果说明 - [x] verify-tiling 打印有效 aiv_num 并支持命令行覆盖 - [x] 日志证据缺失时显式标记,不静默填充 0 - [x] 已删除重复文档和 NOTICE - [x] 顶层 docs/ 未修改 - [x] 顶层 autofuse/README*.md 未纳入最终 PR 差异 - [ ] 未执行设备侧 tiling 验证 ## 8. 其他信息 工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。 See merge request: cann/graph-autofusion!1855 | 2 天前 | |
feat: 支持ATT analysis tool Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1855 merge att-analysis-pr-vendor into develop feat: 支持ATT analysis tool Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 ATT 模板和 tiling 的问题定位通常需要对比默认 Autofuse、开启 PGO、强制模板等场景,再结合 [PROF]/[DFX] 日志、profiling、kernel meta 和 dump 图判断差异原因。原有分析工具位于外部目录,使用时依赖固定文件名和目录结构,难以直接分析用户执行 PyTorch/Inductor 或 TensorFlow 脚本后产生的实际产物。 ## 2. 修改方案 - 在 autofuse/tools/att_analyze/src/att.py 提供统一 CLI 入口。 - 兼容日志文件、日志目录和递归产物目录,不假设用户一定使用仓内 sample 脚本。 - summary、compare、split-slog、perf-formula、verify-tiling、evidence 六个工具分别负责汇总、对比、拆分、公式分析、ABI 验证和证据导出。 - verify-tiling 支持 TensorFlow/Inductor ABI;preset_B.json 的 aiv_num 默认改为 56,并支持 --aiv-num 覆盖。执行前打印实际核数、来源、UB 大小和动态维度,方便用户核对硬件配置。 - output_code.py 只提取字面量 artifact,不执行用户 Python 文件;Inductor PGO 的分段 host 源码可被拆分后参与验证。 - 日志缺失时保留 parse_status,不把缺失值当作有效 0;evidence JSONL 包含来源路径和行号,便于后续 skill 或人工复核。 - 删除重复的 NOTICE、readme.md 和 docs/CSV_COMPARISON.md,工具目录的职责统一由 autofuse/tools/README.md 和 ATT README 说明;新增/整理的工具文件使用 2026 License。 ## 3. 代码目录结构 text autofuse/tools/att_analyze/ ├── src/att.py # 统一命令行入口 ├── src/commands/ │ ├── summary.py # ATT 日志汇总 │ ├── compare.py # 两次结果对比 │ ├── evidence.py # 机器可读证据导出 │ ├── split_slog.py # DFX/PROF 日志拆分 │ ├── perf_formula.py # pipe 公式和 SVG 分析 │ └── verify_tiling.py # TF/Inductor tiling ABI 验证 ├── src/core/ │ ├── log_parser.py # 日志解析和状态标记 │ ├── evidence_schema.py # evidence 记录结构 │ ├── file_utils.py # 输入发现和输出目录处理 │ └── tiling_func_reader.py # tiling 源码读取 ├── examples/examples.py # Python API 和 CLI 命令示例 ├── tests/{unit,functional,integration}/# 回归测试 ├── tests/data/ # 脱敏固定日志 fixture ├── README.md / README_en.md # 使用说明 └── .gitignore # 工具临时输出忽略规则 ## 4. 工具职责、使用方法和效果 | 工具 | 职责与输入 | 示例命令 | 实际效果 | | --- | --- | --- | --- | | summary | 从 ATT [PROF] 日志或目录提取算子、模板、graph/result/group/case、tiling 和性能字段 | python3 autofuse/tools/att_analyze/src/att.py summary run.log -f csv -o summary.csv | 输出 console/CSV/Excel 汇总;不完整记录带 parse_status | | compare | 对比默认、PGO、强制模板或其他候选的两个 summary CSV | python3 autofuse/tools/att_analyze/src/att.py compare default.csv candidate.csv -f text -o compare.txt | 按 Operator/Graph/Result/Group/Case 匹配,显示模板、case、tiling 和性能差异 | | evidence | 将日志转换为机器可读证据 | python3 autofuse/tools/att_analyze/src/att.py evidence run.log -o evidence/ | 生成 att-evidence.jsonl 和 manifest,记录来源路径、行号和解析状态 | | split-slog | 按算子及 graph/result/group/case 拆分 DFX 编译日志和 PROF 运行日志 | python3 autofuse/tools/att_analyze/src/att.py split-slog slog/ --op FlashAttentionScore -o split/ | 生成 compiler/、runtime/ 下的 case 日志,便于逐 case 定位 | | perf-formula | 解析 tiling 源码和 [PERF] pipe 公式 | python3 autofuse/tools/att_analyze/src/att.py perf-formula generated/ run.log --case r=0,g=0,c=1 -o perf/ | 生成 perf_formula.svg,标出最大 pipe 和跨 case 敏感参数;缺少 [PERF] 时明确提示证据不足 | | verify-tiling | 编译并执行用户提供的 TF/Inductor tiling 函数 | python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56 -o verify/ | 控制台打印有效配置和编译/执行结果,verify/result.json 保存 block_dim、workspace 或失败原因 | examples/examples.py 的第一个示例只打印以上 CLI 命令,不会自动编译、profiling 或执行 tiling 验证;其余示例展示 Python API 调用。 ## 5. 代码修改流程图 mermaid flowchart LR A[用户执行默认/PGO/强制模板场景] --> B[日志、profiling、kernel_meta、dump] B --> C{att CLI} C --> D[summary 汇总] D --> E[compare 对比选择和性能] B --> F[split-slog 拆分 DFX/PROF] B --> G[evidence 导出来源证据] B --> H[perf-formula 生成 pipe SVG] B --> I[verify-tiling 编译并执行 ABI] E --> J[报告模板/tiling 差异] F --> J G --> J H --> J I --> J 采集 [PROF]/[DFX] 时,用户通常需要在自己的执行命令中设置 ASCEND_SLOG_PRINT_TO_STDOUT=1 和 ASCEND_GLOBAL_LOG_LEVEL=1。本工具默认只读已有产物,不猜测 case,也不代替用户重新运行模型。 ## 6. 测试用例说明 | 检查项 | 结果 | | --- | --- | | ATT unit/integration/functional tests | 94 passed | | git diff --check | 通过 | | ruff、ruff-format、codespell | 通过 | | pre-commit(含 OAT、冲突标记、禁止 docs/superpowers) | 通过 | | CLI 合约测试 | 覆盖六个子命令和 CLI 示例顺序 | 固定 tests/data/ 仅用于回归;真实 CANN、TensorFlow 或 Inductor 日志格式变化时,应脱敏新增 fixture 并同步期望结果,不覆盖旧样例。上述测试验证工具解析和产物生成能力,不代表任何模型的性能或精度结论。 ## 7. 核对清单 - [x] 工具源码、测试和文档均在当前仓维护 - [x] 六个工具均有职责、输入、命令和效果说明 - [x] verify-tiling 打印有效 aiv_num 并支持命令行覆盖 - [x] 日志证据缺失时显式标记,不静默填充 0 - [x] 已删除重复文档和 NOTICE - [x] 顶层 docs/ 未修改 - [x] 顶层 autofuse/README*.md 未纳入最终 PR 差异 - [ ] 未执行设备侧 tiling 验证 ## 8. 其他信息 工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。 See merge request: cann/graph-autofusion!1855 | 2 天前 | |
feat: 支持ATT analysis tool Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1855 merge att-analysis-pr-vendor into develop feat: 支持ATT analysis tool Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 ATT 模板和 tiling 的问题定位通常需要对比默认 Autofuse、开启 PGO、强制模板等场景,再结合 [PROF]/[DFX] 日志、profiling、kernel meta 和 dump 图判断差异原因。原有分析工具位于外部目录,使用时依赖固定文件名和目录结构,难以直接分析用户执行 PyTorch/Inductor 或 TensorFlow 脚本后产生的实际产物。 ## 2. 修改方案 - 在 autofuse/tools/att_analyze/src/att.py 提供统一 CLI 入口。 - 兼容日志文件、日志目录和递归产物目录,不假设用户一定使用仓内 sample 脚本。 - summary、compare、split-slog、perf-formula、verify-tiling、evidence 六个工具分别负责汇总、对比、拆分、公式分析、ABI 验证和证据导出。 - verify-tiling 支持 TensorFlow/Inductor ABI;preset_B.json 的 aiv_num 默认改为 56,并支持 --aiv-num 覆盖。执行前打印实际核数、来源、UB 大小和动态维度,方便用户核对硬件配置。 - output_code.py 只提取字面量 artifact,不执行用户 Python 文件;Inductor PGO 的分段 host 源码可被拆分后参与验证。 - 日志缺失时保留 parse_status,不把缺失值当作有效 0;evidence JSONL 包含来源路径和行号,便于后续 skill 或人工复核。 - 删除重复的 NOTICE、readme.md 和 docs/CSV_COMPARISON.md,工具目录的职责统一由 autofuse/tools/README.md 和 ATT README 说明;新增/整理的工具文件使用 2026 License。 ## 3. 代码目录结构 text autofuse/tools/att_analyze/ ├── src/att.py # 统一命令行入口 ├── src/commands/ │ ├── summary.py # ATT 日志汇总 │ ├── compare.py # 两次结果对比 │ ├── evidence.py # 机器可读证据导出 │ ├── split_slog.py # DFX/PROF 日志拆分 │ ├── perf_formula.py # pipe 公式和 SVG 分析 │ └── verify_tiling.py # TF/Inductor tiling ABI 验证 ├── src/core/ │ ├── log_parser.py # 日志解析和状态标记 │ ├── evidence_schema.py # evidence 记录结构 │ ├── file_utils.py # 输入发现和输出目录处理 │ └── tiling_func_reader.py # tiling 源码读取 ├── examples/examples.py # Python API 和 CLI 命令示例 ├── tests/{unit,functional,integration}/# 回归测试 ├── tests/data/ # 脱敏固定日志 fixture ├── README.md / README_en.md # 使用说明 └── .gitignore # 工具临时输出忽略规则 ## 4. 工具职责、使用方法和效果 | 工具 | 职责与输入 | 示例命令 | 实际效果 | | --- | --- | --- | --- | | summary | 从 ATT [PROF] 日志或目录提取算子、模板、graph/result/group/case、tiling 和性能字段 | python3 autofuse/tools/att_analyze/src/att.py summary run.log -f csv -o summary.csv | 输出 console/CSV/Excel 汇总;不完整记录带 parse_status | | compare | 对比默认、PGO、强制模板或其他候选的两个 summary CSV | python3 autofuse/tools/att_analyze/src/att.py compare default.csv candidate.csv -f text -o compare.txt | 按 Operator/Graph/Result/Group/Case 匹配,显示模板、case、tiling 和性能差异 | | evidence | 将日志转换为机器可读证据 | python3 autofuse/tools/att_analyze/src/att.py evidence run.log -o evidence/ | 生成 att-evidence.jsonl 和 manifest,记录来源路径、行号和解析状态 | | split-slog | 按算子及 graph/result/group/case 拆分 DFX 编译日志和 PROF 运行日志 | python3 autofuse/tools/att_analyze/src/att.py split-slog slog/ --op FlashAttentionScore -o split/ | 生成 compiler/、runtime/ 下的 case 日志,便于逐 case 定位 | | perf-formula | 解析 tiling 源码和 [PERF] pipe 公式 | python3 autofuse/tools/att_analyze/src/att.py perf-formula generated/ run.log --case r=0,g=0,c=1 -o perf/ | 生成 perf_formula.svg,标出最大 pipe 和跨 case 敏感参数;缺少 [PERF] 时明确提示证据不足 | | verify-tiling | 编译并执行用户提供的 TF/Inductor tiling 函数 | python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56 -o verify/ | 控制台打印有效配置和编译/执行结果,verify/result.json 保存 block_dim、workspace 或失败原因 | examples/examples.py 的第一个示例只打印以上 CLI 命令,不会自动编译、profiling 或执行 tiling 验证;其余示例展示 Python API 调用。 ## 5. 代码修改流程图 mermaid flowchart LR A[用户执行默认/PGO/强制模板场景] --> B[日志、profiling、kernel_meta、dump] B --> C{att CLI} C --> D[summary 汇总] D --> E[compare 对比选择和性能] B --> F[split-slog 拆分 DFX/PROF] B --> G[evidence 导出来源证据] B --> H[perf-formula 生成 pipe SVG] B --> I[verify-tiling 编译并执行 ABI] E --> J[报告模板/tiling 差异] F --> J G --> J H --> J I --> J 采集 [PROF]/[DFX] 时,用户通常需要在自己的执行命令中设置 ASCEND_SLOG_PRINT_TO_STDOUT=1 和 ASCEND_GLOBAL_LOG_LEVEL=1。本工具默认只读已有产物,不猜测 case,也不代替用户重新运行模型。 ## 6. 测试用例说明 | 检查项 | 结果 | | --- | --- | | ATT unit/integration/functional tests | 94 passed | | git diff --check | 通过 | | ruff、ruff-format、codespell | 通过 | | pre-commit(含 OAT、冲突标记、禁止 docs/superpowers) | 通过 | | CLI 合约测试 | 覆盖六个子命令和 CLI 示例顺序 | 固定 tests/data/ 仅用于回归;真实 CANN、TensorFlow 或 Inductor 日志格式变化时,应脱敏新增 fixture 并同步期望结果,不覆盖旧样例。上述测试验证工具解析和产物生成能力,不代表任何模型的性能或精度结论。 ## 7. 核对清单 - [x] 工具源码、测试和文档均在当前仓维护 - [x] 六个工具均有职责、输入、命令和效果说明 - [x] verify-tiling 打印有效 aiv_num 并支持命令行覆盖 - [x] 日志证据缺失时显式标记,不静默填充 0 - [x] 已删除重复文档和 NOTICE - [x] 顶层 docs/ 未修改 - [x] 顶层 autofuse/README*.md 未纳入最终 PR 差异 - [ ] 未执行设备侧 tiling 验证 ## 8. 其他信息 工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。 See merge request: cann/graph-autofusion!1855 | 2 天前 | |
feat: 支持ATT analysis tool Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1855 merge att-analysis-pr-vendor into develop feat: 支持ATT analysis tool Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 ATT 模板和 tiling 的问题定位通常需要对比默认 Autofuse、开启 PGO、强制模板等场景,再结合 [PROF]/[DFX] 日志、profiling、kernel meta 和 dump 图判断差异原因。原有分析工具位于外部目录,使用时依赖固定文件名和目录结构,难以直接分析用户执行 PyTorch/Inductor 或 TensorFlow 脚本后产生的实际产物。 ## 2. 修改方案 - 在 autofuse/tools/att_analyze/src/att.py 提供统一 CLI 入口。 - 兼容日志文件、日志目录和递归产物目录,不假设用户一定使用仓内 sample 脚本。 - summary、compare、split-slog、perf-formula、verify-tiling、evidence 六个工具分别负责汇总、对比、拆分、公式分析、ABI 验证和证据导出。 - verify-tiling 支持 TensorFlow/Inductor ABI;preset_B.json 的 aiv_num 默认改为 56,并支持 --aiv-num 覆盖。执行前打印实际核数、来源、UB 大小和动态维度,方便用户核对硬件配置。 - output_code.py 只提取字面量 artifact,不执行用户 Python 文件;Inductor PGO 的分段 host 源码可被拆分后参与验证。 - 日志缺失时保留 parse_status,不把缺失值当作有效 0;evidence JSONL 包含来源路径和行号,便于后续 skill 或人工复核。 - 删除重复的 NOTICE、readme.md 和 docs/CSV_COMPARISON.md,工具目录的职责统一由 autofuse/tools/README.md 和 ATT README 说明;新增/整理的工具文件使用 2026 License。 ## 3. 代码目录结构 text autofuse/tools/att_analyze/ ├── src/att.py # 统一命令行入口 ├── src/commands/ │ ├── summary.py # ATT 日志汇总 │ ├── compare.py # 两次结果对比 │ ├── evidence.py # 机器可读证据导出 │ ├── split_slog.py # DFX/PROF 日志拆分 │ ├── perf_formula.py # pipe 公式和 SVG 分析 │ └── verify_tiling.py # TF/Inductor tiling ABI 验证 ├── src/core/ │ ├── log_parser.py # 日志解析和状态标记 │ ├── evidence_schema.py # evidence 记录结构 │ ├── file_utils.py # 输入发现和输出目录处理 │ └── tiling_func_reader.py # tiling 源码读取 ├── examples/examples.py # Python API 和 CLI 命令示例 ├── tests/{unit,functional,integration}/# 回归测试 ├── tests/data/ # 脱敏固定日志 fixture ├── README.md / README_en.md # 使用说明 └── .gitignore # 工具临时输出忽略规则 ## 4. 工具职责、使用方法和效果 | 工具 | 职责与输入 | 示例命令 | 实际效果 | | --- | --- | --- | --- | | summary | 从 ATT [PROF] 日志或目录提取算子、模板、graph/result/group/case、tiling 和性能字段 | python3 autofuse/tools/att_analyze/src/att.py summary run.log -f csv -o summary.csv | 输出 console/CSV/Excel 汇总;不完整记录带 parse_status | | compare | 对比默认、PGO、强制模板或其他候选的两个 summary CSV | python3 autofuse/tools/att_analyze/src/att.py compare default.csv candidate.csv -f text -o compare.txt | 按 Operator/Graph/Result/Group/Case 匹配,显示模板、case、tiling 和性能差异 | | evidence | 将日志转换为机器可读证据 | python3 autofuse/tools/att_analyze/src/att.py evidence run.log -o evidence/ | 生成 att-evidence.jsonl 和 manifest,记录来源路径、行号和解析状态 | | split-slog | 按算子及 graph/result/group/case 拆分 DFX 编译日志和 PROF 运行日志 | python3 autofuse/tools/att_analyze/src/att.py split-slog slog/ --op FlashAttentionScore -o split/ | 生成 compiler/、runtime/ 下的 case 日志,便于逐 case 定位 | | perf-formula | 解析 tiling 源码和 [PERF] pipe 公式 | python3 autofuse/tools/att_analyze/src/att.py perf-formula generated/ run.log --case r=0,g=0,c=1 -o perf/ | 生成 perf_formula.svg,标出最大 pipe 和跨 case 敏感参数;缺少 [PERF] 时明确提示证据不足 | | verify-tiling | 编译并执行用户提供的 TF/Inductor tiling 函数 | python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56 -o verify/ | 控制台打印有效配置和编译/执行结果,verify/result.json 保存 block_dim、workspace 或失败原因 | examples/examples.py 的第一个示例只打印以上 CLI 命令,不会自动编译、profiling 或执行 tiling 验证;其余示例展示 Python API 调用。 ## 5. 代码修改流程图 mermaid flowchart LR A[用户执行默认/PGO/强制模板场景] --> B[日志、profiling、kernel_meta、dump] B --> C{att CLI} C --> D[summary 汇总] D --> E[compare 对比选择和性能] B --> F[split-slog 拆分 DFX/PROF] B --> G[evidence 导出来源证据] B --> H[perf-formula 生成 pipe SVG] B --> I[verify-tiling 编译并执行 ABI] E --> J[报告模板/tiling 差异] F --> J G --> J H --> J I --> J 采集 [PROF]/[DFX] 时,用户通常需要在自己的执行命令中设置 ASCEND_SLOG_PRINT_TO_STDOUT=1 和 ASCEND_GLOBAL_LOG_LEVEL=1。本工具默认只读已有产物,不猜测 case,也不代替用户重新运行模型。 ## 6. 测试用例说明 | 检查项 | 结果 | | --- | --- | | ATT unit/integration/functional tests | 94 passed | | git diff --check | 通过 | | ruff、ruff-format、codespell | 通过 | | pre-commit(含 OAT、冲突标记、禁止 docs/superpowers) | 通过 | | CLI 合约测试 | 覆盖六个子命令和 CLI 示例顺序 | 固定 tests/data/ 仅用于回归;真实 CANN、TensorFlow 或 Inductor 日志格式变化时,应脱敏新增 fixture 并同步期望结果,不覆盖旧样例。上述测试验证工具解析和产物生成能力,不代表任何模型的性能或精度结论。 ## 7. 核对清单 - [x] 工具源码、测试和文档均在当前仓维护 - [x] 六个工具均有职责、输入、命令和效果说明 - [x] verify-tiling 打印有效 aiv_num 并支持命令行覆盖 - [x] 日志证据缺失时显式标记,不静默填充 0 - [x] 已删除重复文档和 NOTICE - [x] 顶层 docs/ 未修改 - [x] 顶层 autofuse/README*.md 未纳入最终 PR 差异 - [ ] 未执行设备侧 tiling 验证 ## 8. 其他信息 工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。 See merge request: cann/graph-autofusion!1855 | 2 天前 | |
feat: 支持ATT analysis tool Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1855 merge att-analysis-pr-vendor into develop feat: 支持ATT analysis tool Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 ATT 模板和 tiling 的问题定位通常需要对比默认 Autofuse、开启 PGO、强制模板等场景,再结合 [PROF]/[DFX] 日志、profiling、kernel meta 和 dump 图判断差异原因。原有分析工具位于外部目录,使用时依赖固定文件名和目录结构,难以直接分析用户执行 PyTorch/Inductor 或 TensorFlow 脚本后产生的实际产物。 ## 2. 修改方案 - 在 autofuse/tools/att_analyze/src/att.py 提供统一 CLI 入口。 - 兼容日志文件、日志目录和递归产物目录,不假设用户一定使用仓内 sample 脚本。 - summary、compare、split-slog、perf-formula、verify-tiling、evidence 六个工具分别负责汇总、对比、拆分、公式分析、ABI 验证和证据导出。 - verify-tiling 支持 TensorFlow/Inductor ABI;preset_B.json 的 aiv_num 默认改为 56,并支持 --aiv-num 覆盖。执行前打印实际核数、来源、UB 大小和动态维度,方便用户核对硬件配置。 - output_code.py 只提取字面量 artifact,不执行用户 Python 文件;Inductor PGO 的分段 host 源码可被拆分后参与验证。 - 日志缺失时保留 parse_status,不把缺失值当作有效 0;evidence JSONL 包含来源路径和行号,便于后续 skill 或人工复核。 - 删除重复的 NOTICE、readme.md 和 docs/CSV_COMPARISON.md,工具目录的职责统一由 autofuse/tools/README.md 和 ATT README 说明;新增/整理的工具文件使用 2026 License。 ## 3. 代码目录结构 text autofuse/tools/att_analyze/ ├── src/att.py # 统一命令行入口 ├── src/commands/ │ ├── summary.py # ATT 日志汇总 │ ├── compare.py # 两次结果对比 │ ├── evidence.py # 机器可读证据导出 │ ├── split_slog.py # DFX/PROF 日志拆分 │ ├── perf_formula.py # pipe 公式和 SVG 分析 │ └── verify_tiling.py # TF/Inductor tiling ABI 验证 ├── src/core/ │ ├── log_parser.py # 日志解析和状态标记 │ ├── evidence_schema.py # evidence 记录结构 │ ├── file_utils.py # 输入发现和输出目录处理 │ └── tiling_func_reader.py # tiling 源码读取 ├── examples/examples.py # Python API 和 CLI 命令示例 ├── tests/{unit,functional,integration}/# 回归测试 ├── tests/data/ # 脱敏固定日志 fixture ├── README.md / README_en.md # 使用说明 └── .gitignore # 工具临时输出忽略规则 ## 4. 工具职责、使用方法和效果 | 工具 | 职责与输入 | 示例命令 | 实际效果 | | --- | --- | --- | --- | | summary | 从 ATT [PROF] 日志或目录提取算子、模板、graph/result/group/case、tiling 和性能字段 | python3 autofuse/tools/att_analyze/src/att.py summary run.log -f csv -o summary.csv | 输出 console/CSV/Excel 汇总;不完整记录带 parse_status | | compare | 对比默认、PGO、强制模板或其他候选的两个 summary CSV | python3 autofuse/tools/att_analyze/src/att.py compare default.csv candidate.csv -f text -o compare.txt | 按 Operator/Graph/Result/Group/Case 匹配,显示模板、case、tiling 和性能差异 | | evidence | 将日志转换为机器可读证据 | python3 autofuse/tools/att_analyze/src/att.py evidence run.log -o evidence/ | 生成 att-evidence.jsonl 和 manifest,记录来源路径、行号和解析状态 | | split-slog | 按算子及 graph/result/group/case 拆分 DFX 编译日志和 PROF 运行日志 | python3 autofuse/tools/att_analyze/src/att.py split-slog slog/ --op FlashAttentionScore -o split/ | 生成 compiler/、runtime/ 下的 case 日志,便于逐 case 定位 | | perf-formula | 解析 tiling 源码和 [PERF] pipe 公式 | python3 autofuse/tools/att_analyze/src/att.py perf-formula generated/ run.log --case r=0,g=0,c=1 -o perf/ | 生成 perf_formula.svg,标出最大 pipe 和跨 case 敏感参数;缺少 [PERF] 时明确提示证据不足 | | verify-tiling | 编译并执行用户提供的 TF/Inductor tiling 函数 | python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56 -o verify/ | 控制台打印有效配置和编译/执行结果,verify/result.json 保存 block_dim、workspace 或失败原因 | examples/examples.py 的第一个示例只打印以上 CLI 命令,不会自动编译、profiling 或执行 tiling 验证;其余示例展示 Python API 调用。 ## 5. 代码修改流程图 mermaid flowchart LR A[用户执行默认/PGO/强制模板场景] --> B[日志、profiling、kernel_meta、dump] B --> C{att CLI} C --> D[summary 汇总] D --> E[compare 对比选择和性能] B --> F[split-slog 拆分 DFX/PROF] B --> G[evidence 导出来源证据] B --> H[perf-formula 生成 pipe SVG] B --> I[verify-tiling 编译并执行 ABI] E --> J[报告模板/tiling 差异] F --> J G --> J H --> J I --> J 采集 [PROF]/[DFX] 时,用户通常需要在自己的执行命令中设置 ASCEND_SLOG_PRINT_TO_STDOUT=1 和 ASCEND_GLOBAL_LOG_LEVEL=1。本工具默认只读已有产物,不猜测 case,也不代替用户重新运行模型。 ## 6. 测试用例说明 | 检查项 | 结果 | | --- | --- | | ATT unit/integration/functional tests | 94 passed | | git diff --check | 通过 | | ruff、ruff-format、codespell | 通过 | | pre-commit(含 OAT、冲突标记、禁止 docs/superpowers) | 通过 | | CLI 合约测试 | 覆盖六个子命令和 CLI 示例顺序 | 固定 tests/data/ 仅用于回归;真实 CANN、TensorFlow 或 Inductor 日志格式变化时,应脱敏新增 fixture 并同步期望结果,不覆盖旧样例。上述测试验证工具解析和产物生成能力,不代表任何模型的性能或精度结论。 ## 7. 核对清单 - [x] 工具源码、测试和文档均在当前仓维护 - [x] 六个工具均有职责、输入、命令和效果说明 - [x] verify-tiling 打印有效 aiv_num 并支持命令行覆盖 - [x] 日志证据缺失时显式标记,不静默填充 0 - [x] 已删除重复文档和 NOTICE - [x] 顶层 docs/ 未修改 - [x] 顶层 autofuse/README*.md 未纳入最终 PR 差异 - [ ] 未执行设备侧 tiling 验证 ## 8. 其他信息 工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。 See merge request: cann/graph-autofusion!1855 | 2 天前 |
ATT Analyze
仓内 ATT 日志分析工具,入口为:
python3 autofuse/tools/att_analyze/src/att.py --help
支持 summary、compare、split-slog、perf-formula、verify-tiling 和 evidence 六个命令。summary 默认只读解析日志;verify-tiling 会编译并执行代码,使用前请确认输入目录和授权。
LogParser 的 OperatorSummary.parse_status 用于标明证据是否完整:ok 表示日志包含完整选择信息,inferred_graph_result 表示仅从模板行推断 graph/result,missing_group_case、missing_result_performance 和 missing_graph_result 表示相应日志缺失。CSV 列保持历史含义不变。
python3 autofuse/tools/att_analyze/src/att.py summary path/to/att.log -f csv -o /tmp/summary.csv
python3 autofuse/tools/att_analyze/src/att.py compare baseline.csv candidate.csv
python3 autofuse/tools/att_analyze/src/att.py evidence path/to/att.log -o /tmp/evidence
python3 autofuse/tools/att_analyze/src/att.py verify-tiling generated/ --scene tf --preset B --aiv-num 56
工具不会把缺失值当作有效的 0;请在后续分析中根据 parse_status 决定是否需要补充日志。
与 ATT 模板/tiling 分析 Skill 配合
att_analyze 由本仓维护,Skill 调用的固定入口是
autofuse/tools/att_analyze/src/att.py,不需要安装或访问其他仓库。对已经采集的
数据做离线分析时,在仓库根目录执行:
python3 .claude/skills/att-template-tiling-analysis/scripts/att_analysis.py \
analyze --run-root <run-root> --output <report-dir>
run-root/default 和 run-root/pgo(也支持 base)放入用户已执行得到的日志;
目录名称不固定时可显式传 --default-root 和 --candidate-root,脚本也会递归发现
logs/、profiling/、kernel_meta/ 和 dump/。脚本只读取这些数据,不会自行
选择 case、编造执行命令或重新运行任务。Python 3.9+ 可运行基础分析,安装
openpyxl 后会额外生成 summary.xlsx。
如果需要现场执行,用户需先提供完整 case 范围和命令。本地执行需要可用的
python3;远端执行使用标准 ssh,并要求远端 checkout 能访问相同的工具脚本。
devssh 只能作为用户明确提供的 wrapper。编译、profiling、PGO 和
verify-tiling 均需用户单独确认。
原始证据与分析结论分开保存,建议布局如下:
run-root/ # 原始运行目录
default/ pgo/
att.log profile/ kernel_meta/ dump/
evidence-archive/<run-name>/ # 原始文件归档
report-archive/<run-name>/ # report.md、summary.csv、root-cause.jsonl 等
归档脚本会为同名运行自动创建递增目录并写入 archive-manifest.json,不会覆盖
已有归档。详细交互契约和归档规则见 Skill 的
references/execution-contract.md 与 references/archive-layout.md。
preset 和真实日志维护
preset_B.json 是 TensorFlow 动态 ABI 的示例输入,默认 aiv_num=56、
ub_size=262144,不代表所有芯片的硬件规格。执行 verify-tiling 时会打印
实际传入的 aiv_num、参数来源和动态维度;请根据目标设备核对,必要时使用
--aiv-num 或 --input-json 修改。aiv_num 是传给 TensorFlow tiling 的配置值,
Inductor ABI 不使用该字段。
tests/data/ 中的日志是固定回归样例,不会自动同步现场日志。遇到新的 CANN、
TensorFlow 或 Inductor 日志格式时,请对真实日志脱敏后新增样例,并同步增加
summary/evidence 的期望结果;保留旧样例以防止已有格式回归。