性能分析#

Profiling 采集#

使用 torch_npu.profiler 采集 NPU 算子级性能数据:

import torch_npu

with torch_npu.profiler.profile(
    activities=[torch_npu.profiler.ProfilerActivity.NPU],
    with_stack=False,
    record_shapes=True,
    profile_memory=True,
) as prof:
    model(input_data)
    torch_npu.synchronize()

prof.export_chrome_trace("trace_view.json")

CANN 环境要求:

source /usr/local/Ascend/ascend-toolkit/set_env.sh

Warmup 配置要点:

  • Profiler 开启前先执行 2 步 warmup(含 torch.npu.synchronize()),排除 JIT 编译开销

  • Profiler 仅在 warmup 之后开启,采集 5 步以上 timed steps

采集输出文件:

文件

格式

说明

kernel_details.csv

CANN Profiler CSV

每算子耗时 (Name, Duration, Wait Time)

trace_view.json

Chrome Trace JSON

Host + Device 事件时间线

step_trace_time.csv

CANN Profiler CSV

Step 级汇总

communication.json

JSON

通信算子详情(多卡场景)

Profiling 数据分析#

对采集到的 profiling 数据,按以下方法分析瓶颈。

阶段分离:将算子按推理阶段归类。

阶段

识别特征

典型算子

DiT (Transformer)

attention_forward, MatMul, LayerNorm, RoPE

FlashAttention, Linear, RMSNorm

VAE

Conv2D, GroupNorm, Upsample

Conv2D, ResBlock

算子分类:对每个阶段的算子按四类汇总。

分类

包含算子

FA

FlashAttention, SDPA, attention_forward, fused_attn_score

MatMul

Linear, MatMul, GEMM, DequantGEMM

Vector

激活函数 (GELU/SiLU/ReLU), Norm (LayerNorm/RMSNorm), element-wise (Mul/Add/Div)

Comm

HCCL: all_gather, all_reduce, reduce_scatter, broadcast

瓶颈判定:结合以下维度定位优化方向。

发现

阈值

优化方向

DiT MatMul 占比高

>50%

MatMul 量化

DiT FA 占比高

>30%

Attention 优化(量化+稀疏)

DiT Vector 占比高

>20%

编译融合

DiT Comm exposed

>30%

通信掩盖优化

特性性能说明#

各加速特性的技术原理和使用方式详见 docs/zh/features/