当前位置: 首页 > news >正文

CANN-Profiler-昇腾NPU上推理慢到底慢在哪

推理服务上线前最重要的一步是性能 Profiling。ATB 的推理速度不达标,可能有十几个原因——不拿数据说话就是瞎猜。CANN Profiler 给你精确到每个 kernel 的执行时间。

开启 Profiling

importtorch_npu# 方法 1:Python APIwithtorch_npu.profiler.profile(activities=[torch_npu.profiler.ProfilerActivity.CPU,torch_npu.profiler.ProfilerActivity.NPU],record_shapes=True,profile_memory=True)asprof:model.generate("Hello",max_new_tokens=50)print(prof.key_averages().table(sort_by="npu_time_total",row_limit=20))
# 方法 2:环境变量(更底层)exportPROFILING_MODE=1exportPROFILING_OPTIONS='{"output":"./profiling_data","task_trace":"on"}'python infer.py

方法 2 生成原始 profiling 数据,需要用 CANN 的分析工具处理。

看 Profiling 报告

关键的几列:

列名含义关注点
Name算子名称有没有FusedKernel(融合了)
NPU TimeNPU 执行时间哪个算子最慢
CPU TimeCPU 调度时间CPU 有没有成为瓶颈
Calls调用次数有没有异常频繁的调用
CPU Mem / NPU Mem内存占用有没有显存泄漏

典型分析流程:

  1. 按 NPU Time 排序,找 Top 10 最慢的算子
  2. 检查这些算子有没有融合版本可用
  3. 检查 CPU Time 是否异常高(调度瓶颈)
  4. 检查 Calls 是否有异常(重复计算)

常见性能问题诊断

问题 1:Softmax 没走融合

Profiler 报告: Softmax 0.08ms × 32 层 = 2.56ms ← 太慢 期望: FusedKernel (FlashAttention 内部 Softmax) 0.03ms

原因:输入 tensor 不连续或 dtype 不对。检查x.is_contiguous()x.dtype

问题 2:CPU 调度瓶颈

Profiler 报告: NPU Time: 3.1ms CPU Time: 4.8ms ← CPU 比 NPU 还慢 原因:eager mode 下每个算子都有 Python→C++ 的调度开销 解决:torch.compile(model, backend="npu")

问题 3:HBM 读写过多

Profiler 报告: MatMul 0.5ms CopyH2D 0.3ms ← 数据在 HBM 进出太多 原因:算子没融合,中间结果频繁写回 HBM 解决:确认 graph-autofusion 是否生效

对比分析

最有效的 Profiling 方法是做 A/B 对比:

# 版本 A:标准 PyTorchmodel_a=AutoModel.from_pretrained("model_id",torch_dtype=torch.float16).to("npu:0")# 版本 B:ATB 加速model_b=LLM("model_id",device="npu:0")# 分别 profile,对比 kernel 列表

对比两个版本的 profiler 输出,看哪些 kernel 被替换了、哪些 kernel 消失了。这是验证优化是否生效的最直接方式。

NPU 利用率

Profiler 会输出 NPU 的整体利用率:

NPU Compute Utilization: 42% NPU Memory Utilization: 78% NPU DMA Utilization: 35%
  • Compute < 30%:计算不够密集,可能是 batch 太小或融合不够
  • Memory > 90%:显存压力大,需要减少 batch 或开启 KV Cache 优化
  • DMA < 50%:数据搬运没跟计算重叠,需要 double buffer

decode 阶段的 Compute 利用率低(5-10%)是正常的——M=1 的 GEMM 打不满 Cube 单元。prefill 阶段应该 > 70%。

线上持续 Profiling

推理服务上线后可以用采样 Profiling,每隔 N 个请求采集一次:

importrandomclassSamplingProfiler:def__init__(self,sample_rate=0.01):self.sample_rate=sample_ratedefshould_profile(self):returnrandom.random()<self.sample_ratedefrecord(self,request):ifself.should_profile():withtorch_npu.profiler.profile(...)asprof:result=model.generate(request.prompt)self.save_profile(prof)returnresultelse:returnmodel.generate(request.prompt)

1% 的采样率对性能影响 < 1%,但能持续监控线上服务的算子执行时间。


不 Profile 就优化是盲人摸象。CANN Profiler 给你精确到微秒的算子执行数据,用 A/B 对比验证优化效果,用线上采样持续监控。推理性能问题 90% 可以靠 Profiling 定位。仓库在这里:

https://atomgit.com/cann/ATB

http://www.jsqmd.com/news/873199/

相关文章:

  • 协同过滤算法的python大学生科技竞赛推荐系统_oy4h20w1
  • STM32MP1 M4内核定时器中断配置与调试实战
  • 自定义中间件限流limit
  • 几类结构矩阵的参数化符号分析与高精度计算方法【附程序】
  • 游戏NPC不再脚本化!Unity+LangChain Agent实时剧情生成技术,上线72小时用户时长↑43%
  • 这份榜单够用!降AI率工具深度测评与推荐
  • C++修炼之构造函数与析构函数
  • ClassIn 在 Linux 下无法播放音频
  • 直播预告 - 周日晚 7 点半-AI 驱动 UI 自动化
  • AI智能体应用工程师报名流程拆解:学习、考试、证书查询一次说清 - 精选教育培训热点
  • CANN ops-transformer:MC2 通信融合算子怎么加速 MoE 的 All-to-All
  • 模块化多电平变流器快速排序与降低开关频率的方法与应用【附案例】
  • 西恩士液冷板清洁度检测设备方案提供:不只是卖设备,更是交付能力 - 工业设备研究社
  • 一文带你学习C++析构函数
  • 2026适合小白的高还原度PDF转长图工具推荐合集 - 时讯资讯
  • 宝塔域名已经添加了,但ssl里面没有
  • 如何在Windows 11上快速安装安卓子系统:3步开启跨平台应用新时代
  • 安顺外贸网站建设 B2B 建站定制,WaiMaoYa 外贸鸭专业跨境建站机构 - 外贸营销工具
  • CANN-昇腾NPU-多机多卡-怎么把16卡用出32卡的效果
  • 2026年5月诚信的阻燃电缆沟盖板厂家,免费样品测试助力客户精准选型适配项目 - 品牌鉴赏师
  • P4777 【模板】扩展中国剩余定理(EXCRT)题解
  • 基于Java的外卖点餐配送系统_43lq510m
  • agent memory论文解析一:解析项目(a-mem)
  • DDrawCompat终极指南:简单三步让老游戏在Win10/11完美运行
  • Topit终极指南:如何在Mac上实现高效窗口置顶,提升300%工作效率
  • 西恩士液冷板清洁度分析仪装置 - 工业设备研究社
  • 基站正在成为 AI 计算节点:NVIDIA Aerial 推动 RAN 架构重构
  • MPC5604B/C 信号与引脚全解|硬件 / 底层必看
  • 写给新手的 asnumpy:昇腾原生 NumPy 到底是啥?
  • 题解:luogu P8996([CEOI 2022] Abracadabra)