已合并
feat: 支持ATT analysis tool #1855
feat: 支持ATT analysis tool #1855
已合并
zhang_shengjie创建于 8月27日
zhang_shengjie成员
8月27日

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. 代码目录结构

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. 代码修改流程图

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. 核对清单

8. 其他信息

工具验证使用本仓 Python 环境和已有 ATT fixture;远端场景由用户提供运行环境和命令后再执行,标准远端通道为 ssh,不默认使用 devssh。PR 1856/1857 保留各自 skill 内容,并已同步本 PR 的工具版本。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhang_shengjie 的贡献)
Zzhang_shengjie成员
8月27日 创建了 pull request,commit 8bd2d9d4
atomgit-bot
atomgit-bot
8月27日 评论:

🤖 正在生成合并请求摘要,请稍候…

likedislike
不准确?
atomgit-bot
atomgit-bot
8月27日 评论:

🤖 AI 代码检视正在进行中,请稍候…

likedislike
不准确?
CANN-robotCANN-robot成员
8月27日 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
8月27日 添加了label:cann-cla/yes
此处折叠了136条消息 查看更多
liyuewei
liyuewei成员
28 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
28 天前 添加了label:lgtm
张德鹏成员
28 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
28 天前 添加了label:approved
CANN-robotCANN-robot成员
28 天前 合入了pull request