性能分析

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/

特性 文档
稀疏 ../features/sparse.md
量化 ../features/quantization.md
以存代算 ../features/cache.md
CPU 卸载 ../features/cpu_offload.md
显存共享 ../features/share_memory.md
多卡并行 ../features/parallelism.md
编译加速 ../features/compilation.md
核心加速 API ../features/core_layers.md
动态专家负载均衡 ../features/DyEPLB.md