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

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

推理服务上线前最重要的一步是性能 Profiling。ATB 的推理速度不达标可能有十几个原因——不拿数据说话就是瞎猜。CANN Profiler 给你精确到每个 kernel 的执行时间。开启 Profilingimporttorch_npu# 方法 1Python APIwithtorch_npu.profiler.profile(activities[torch_npu.profiler.ProfilerActivity.CPU,torch_npu.profiler.ProfilerActivity.NPU],record_shapesTrue,profile_memoryTrue)asprof:model.generate(Hello,max_new_tokens50)print(prof.key_averages().table(sort_bynpu_time_total,row_limit20))# 方法 2环境变量更底层exportPROFILING_MODE1exportPROFILING_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内存占用有没有显存泄漏典型分析流程按 NPU Time 排序找 Top 10 最慢的算子检查这些算子有没有融合版本可用检查 CPU Time 是否异常高调度瓶颈检查 Calls 是否有异常重复计算常见性能问题诊断问题 1Softmax 没走融合Profiler 报告 Softmax 0.08ms × 32 层 2.56ms ← 太慢 期望 FusedKernel (FlashAttention 内部 Softmax) 0.03ms原因输入 tensor 不连续或 dtype 不对。检查x.is_contiguous()和x.dtype。问题 2CPU 调度瓶颈Profiler 报告 NPU Time: 3.1ms CPU Time: 4.8ms ← CPU 比 NPU 还慢 原因eager mode 下每个算子都有 Python→C 的调度开销 解决torch.compile(model, backendnpu)问题 3HBM 读写过多Profiler 报告 MatMul 0.5ms CopyH2D 0.3ms ← 数据在 HBM 进出太多 原因算子没融合中间结果频繁写回 HBM 解决确认 graph-autofusion 是否生效对比分析最有效的 Profiling 方法是做 A/B 对比# 版本 A标准 PyTorchmodel_aAutoModel.from_pretrained(model_id,torch_dtypetorch.float16).to(npu:0)# 版本 BATB 加速model_bLLM(model_id,devicenpu: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 bufferdecode 阶段的 Compute 利用率低5-10%是正常的——M1 的 GEMM 打不满 Cube 单元。prefill 阶段应该 70%。线上持续 Profiling推理服务上线后可以用采样 Profiling每隔 N 个请求采集一次importrandomclassSamplingProfiler:def__init__(self,sample_rate0.01):self.sample_ratesample_ratedefshould_profile(self):returnrandom.random()self.sample_ratedefrecord(self,request):ifself.should_profile():withtorch_npu.profiler.profile(...)asprof:resultmodel.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.gsyq.cn/news/1360007.html

相关文章:

  • 投影仪的分辨率不高,仅为1024*768的分辨率,而笔记本电脑2560×1600(2.5K)分辨率。‌‌——如果采用扩展屏复制笔记本电脑分辨率,发现那个投影仪投影出的字很小,且看不清。 将笔记本电脑的
  • CANN ops-transformer:MC2 通信融合算子怎么加速 MoE 的 All-to-All
  • 分布式系统平台选型与核心开发实践:从微服务到云原生演进
  • Vue2进阶 - Ref
  • Linux Systemd服务配置实战:从核心概念到生产环境部署
  • 大数据技术之SparkSQL
  • VL53L8CX运动指示器:嵌入式动态感知的硬件级解决方案
  • BepInEx终极指南:5分钟学会游戏模组框架安装与使用
  • C++跨平台线程池组件设计:从核心原理到工程实践
  • 给机器人一个值得信赖的“判断力”
  • 鸿蒙意图框架快速入门:5 分钟实现你的第一个意图
  • libwebsockets跨平台移植实战:从交叉编译到嵌入式部署
  • 跨平台macOS组件获取:系统部署专家的高效解决方案
  • NBK_RD8x3x MCU开发实战:从GPIO到定时器中断实现LED精准闪烁
  • C++学习之线程详解
  • 车载音响升级指南:AE1-L方案核心解析与DSP调音实战
  • iMLite AI Map 2.1:嵌入式离线地图如何赋能智能穿戴独立导航
  • 深入解析Linux fork系统调用:从写时复制到多线程陷阱与实战指南
  • 零基础 AI 项目,AI 短剧带货系统,全程落地扶持
  • 帕金森病脑内aSyn,竟搭着免疫细胞快车直抵肠道
  • STM32MP1 M4核心定时器中断实战:从原理到1ms精准时基实现
  • CANN-昇腾NPU长序列训练-128K上下文怎么不OOM
  • 因果分析法
  • RK3399嵌入式3D人脸识别系统:双目视觉与轻量化算法实战
  • 嵌入式开发实战:从GPIO中断到按键消抖的完整实现
  • Verilog中wire与reg的本质区别:从硬件思维到可综合代码实践
  • S-Video端口ESD防护方案:TVS阵列选型与PCB布局实战指南
  • 【Claude SQL优化黄金法则】:20年DBA亲授3大查询加速秘技,90%性能瓶颈一招破
  • Midjourney企业版 vs Adobe Firefly商业授权对比(附2024Q2最新合同条款红点标注版)
  • 芯片设计后期DFT友好ECO:原理、实践与工具选型