训练营简介
2025年昇腾CANN训练营第二季,基于CANN开源开放全场景,推出0基础入门系列、码力全开特辑、开发者案例等专题课程,助力不同阶段开发者快速提升算子开发技能。获得Ascend C算子中级认证,即可领取精美证书,完成社区任务更有机会赢取华为手机,平板、开发板等大奖。

报名链接:https://www.hiascend.com/developer/activities/cann20252#cann-camp-2502-intro

前言

在算子优化达到一定瓶颈后,我们往往会发现代码改无可改。这时候,视线必须从“代码逻辑”转向“硬件物理”。

  • 算力墙 (Compute Wall):AI Core 频率是否跑满?

  • 内存墙 (Memory Wall):HBM 带宽是否饱和?

  • 功耗墙 (Power Wall):芯片是否因为过热而触发了热保护(Throttling)?

普通的 MSProf Timeline 只能告诉你“什么时间在跑什么算子”,但无法告诉你“跑的时候硬件状态如何”。System Profiling 就是为了回答这个问题而生的。它像一个心电图机,实时记录 NPU 的脉搏。

本期文章将教你如何采集和解读这些波形,找出系统级的性能瓶颈。

一、 核心图解:给 NPU 做“心电图”

代码 Profiling 关注的是逻辑流,System Profiling 关注的是物理流

二、 采集实战:开启全知之眼

System Profiling 依然使用 msprof 工具,但参数完全不同。它不需要插桩代码,而是基于硬件计数器(PMU)进行采样。

2.1 采集命令

我们需要使用 --sys-hardware-mem (内存带宽) 和 --sys-cpu-profiling (CPU利用率) 等开关。

# 启动系统级采集
# -d: 指定设备 ID
# --sys-hardware-mem=on: 采集存储系统带宽 (HBM/DDR)
# --sys-cpu-profiling=on: 采集 Host/Device CPU 利用率
# --sys-io-profiling=on: 采集 NIC/RoCE 网络带宽 (多卡训练必备)
msprof --output=./sys_prof_data \
       --sys-hardware-mem=on \
       --sys-cpu-profiling=on \
       --application="./my_inference_app"

采集完成后,会生成一系列 CSV 文件,建议导入 MindStudio 或使用 Excel/Python 进行可视化。

三、 波形解读:读懂硬件的“求救信号”

拿着生成的波形图,我们该看什么?

3.1 HBM 带宽利用率 (Memory Bandwidth)

这是最关键的指标。

  • 现象:波形一直顶在 100%(或接近理论峰值,如 910B 的 1.x TB/s)。

  • 诊断Memory Bound

    • 此时优化 Vector/Cube 指令基本无效。

    • 对策:必须减少 IO。使用算子融合(Fusion),或者启用 FlashAttention 这种 IO-Aware 算法。

  • 现象:带宽利用率很低,但算子耗时很长。

  • 诊断Latency Bound(延迟瓶颈)或 Random Access(随机访存)。

    • 说明数据搬运极其细碎(Gather/Scatter),没有形成突发传输(Burst)。

    • 对策:参考第二十四期,进行数据重排或 Padding。

3.2 频率与功耗 (Frequency & Power)

  • 现象:AI Core 频率波形突然出现“断崖式”下跌,几秒后恢复。

  • 诊断Thermal Throttling (热节流)

    • 算子功耗太高,或者散热环境不好,导致芯片过热保护。

    • 对策:检查机房散热,或者优化算子逻辑,避免长时间高密度的无效计算。

3.3 AI CPU vs AI Core 抢占

  • 现象:AI Core 利用率波形出现规律性的“凹槽”,而此时 AI CPU 利用率波形升高。

  • 诊断调度阻塞

    • 说明模型中混入了 AI CPU 算子(如 NMS),阻塞了 AI Core 的流水线。

    • 对策:参考第三十期,尝试将 AI CPU 算子迁移到 AI Core,或实现异步流水线。

四、 进阶:Roofline Model (屋顶线模型) 分析

将 System Profiling 的带宽数据 ($BW$) 和算子 Profiling 的计算量 ($FLOPs$) 结合,我们可以绘制 Roofline Model

$$ \text{Arithmetic Intensity (AI)} = \frac{\text{FLOPs}}{\text{Bytes}} $$ $$ \text{Performance} = \min(\text{Peak GFLOPS}, \text{Peak BW} \times \text{AI}) $$

  • 如果你的算子落在屋顶的斜坡部分:受限于带宽,请优化访存。

  • 如果你的算子落在屋顶的平顶部分:受限于算力,请优化指令并行或 Tiling。

Ascend C 的工具链通常会自动生成这个图,帮助你一目了然地定位瓶颈。

五、 总结

System Profiling 是从“软件工程师”进阶到“系统架构师”的必修课。

  1. 宏观视野:不要只盯着代码行,要盯着总线和电压。

  2. 瓶颈转移:优化往往是按下的葫芦浮起瓢。解决了算力瓶颈,带宽就成了瓶颈;解决了带宽,散热可能成问题。

  3. 数据说话:波形不会撒谎。

掌握了这一招,你就拥有了对 AI 系统的“全知视角”。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐