Hexagon 推理时 CPU 占用很高,正常吗?——(QCS6490)Radxa Dragon Q6A 实测

azouyana 2026-11-12 14:47:22

📚 QCS6490 NPU 系列
① 部署 QAIRT SDK | ② ResNet50 NPU 实战 | ③ Qualcomm AI Hub 指南 | ④ Hexagon CPU 占用实测(本篇)

平台:Radxa Dragon Q6A · Qualcomm QCS6490(Hexagon NPU = HTP v68,8 核 A78/A55)
系统:Ubuntu 24.04.4 LTS aarch64
环境:QAIRT SDK 2.42.0.251225
实测日期:2026-11-12


一句话回答

正常。 Hexagon 只是把「计算」放到 NPU,但数据搬运、量化、通信全在 CPU 上,
所以 NPU 推理时 CPU 不可能是 0。

真正要看的不是「CPU 高不高」,而是——

CPU 花的时间,是不是比 NPU 该有的水平高了一个数量级?

下面用三组对照实验把这个判断标准量化出来。


一、为什么 CPU 不可能为 0

一次 NPU 推理,CPU 要做这些事:

img

绿色那一格(④)才是 NPU,其余 6 个环节全部跑在 CPU 上。

而且注意:推理越快,这些固定开销占比就越高。一个 6 ms 的推理,CPU 忙 4 ms 是完全合理的。


二、实测:三组对照

测量方式见第四章。三个口径分别是:

  • 每帧墙钟:用户感知的延迟
  • 每帧 CPU 时间:子进程真实的 utime + stime(不是 top 的采样值)
  • 占用核数 = CPU 时间 ÷ 墙钟时间
场景每帧墙钟每帧 CPU 时间占用核数占 8 核比例CPU/墙钟
ResNet50 INT8 @ NPU6.72 ms3.99 ms0.59 核7.4%59%
MobileNetV2 INT8 @ NPU10.96 ms8.13 ms0.74 核9.3%74%
MobileNetV2 float @ CPU 回退132.80 ms205.17 ms1.54 核19.3%155%

ResNet50 统计 500 帧、MobileNetV2 统计 100 帧,均已平摊上下文加载开销。

NPU 推理时的 CPU 开销:三组对照

怎么读这张表

① 从「整机」看,CPU 占用很低:0.59 和 0.74 核,只占 8 核的 7%~9%。
所以如果你在 top 里看总 CPU 使用率,会觉得「一点不高」。

② 从「单核」看,推理期间 CPU 几乎是满的:CPU/墙钟 = 59%~74%,
意味着在推理那几毫秒里,一直有半个到三分之四个核在忙。
如果你盯着某个核(top -1 或 pidstat -t),会看到明显的尖峰。

③ 两个口径都对,只是问的问题不同。


三、怎么判断「不正常」

关键对比:同一个模型,跑 NPU 和跑 CPU,CPU 时间差多少。

MobileNetV2 INT8  @ NPU :  8.13 ms CPU / 帧
MobileNetV2 float @ CPU : 205.17 ms CPU / 帧
                          ─────────────────
                                 约 25 倍
现象判断
每帧 CPU 时间在 几毫秒量级,占用 < 1 核✅ 正常,确实在 NPU 上
每帧 CPU 时间 上百毫秒,占用 1.5+ 核❌ 算子回退到 CPU 了
单核 100% 打满、其余全闲、时延远超官方指标⚠️ 疑似 RPC 轮询 / 单线程瓶颈

回退的典型日志

本例的 float 版模型被 HTP 拒绝,日志里出现 69 次:

ERROR: [Qnn] <E> The SocModel doesn't support FP16
WARNING: [Qnn Delegate] Qnn Backend op validation failed with error: 3110

换成 INT8 量化模型后,同样命令:

# 0 条 FP16 报错 → 全程 NPU

时延从 132.8 ms 降到 10.96 ms,CPU 时间从 205 ms 降到 8.13 ms。

💡 这就是最实用的排查手法:先看日志有没有 op validation failed / doesn't support,
再看 CPU 时间量级。
两者都对上,再决定要不要优化。


四、怎么量的(可复现)

不要用 top

top 是按固定间隔采样再平均,会抹平几毫秒级的尖峰——而 NPU 推理恰好就是尖峰型负载。

用 getrusage 取子进程真实 CPU 时间

import resource, subprocess, time, os

def measure(cmd, env, n_infer):
    before = resource.getrusage(resource.RUSAGE_CHILDREN)
    t0 = time.monotonic()
    subprocess.run(cmd, env=env)          # 跑推理
    wall = time.monotonic() - t0
    after = resource.getrusage(resource.RUSAGE_CHILDREN)

    cpu   = (after.ru_utime - before.ru_utime) + (after.ru_stime - before.ru_stime)
    cores = cpu / wall                     # 占用了几个核
    print(f"墙钟 {wall*1000/n_infer:.2f} ms/帧 | "
          f"CPU {cpu*1000/n_infer:.2f} ms/帧 | "
          f"占用 {cores:.2f} 核 ({cores/os.cpu_count()*100:.1f}%)")

完整脚本:~/QAIRT/demo/bench_cpu_usage.py

测量时的三个注意点

注意点说明
样本要够多单帧测不准,至少 100 帧,把上下文加载(~0.2 s)摊掉
区分 user / sysuser 高 = 量化/反量化/内存拷贝;sys 高 = 文件 I/O、驱动调用
输入路径要绝对本例第一次测量就因为相对路径失败(Graph Execution failure),白白浪费一轮

本例 ResNet50 的 500 帧总 CPU 是 user 1.52 s + sys 0.48 s —— **user 占 76%**,
说明主要开销在用户态的数据处理,而不是系统调用。


五、如果还是嫌高,这样降

手段原理预期效果
加大 batch / 多帧一次 execute摊薄每帧的固定开销(RPC、量化)帧数越多,每帧 CPU 越低
C++ + shared buffer(zero-copy)省掉 memcpy 和重复量化显著
--use_native_output_files跳过输出反量化中等
用 context binary 而非 TFLite delegatedelegate 每帧有额外解释开销本例 3.99 vs 8.13 ms
--htp_performance_mode 2(Burst)减少 DVFS 抖动,缩短墙钟减少墙钟,CPU 时间基本不变

注意表中的 3.99 ms 还包含读 raw 文件的 I/O。
真实部署用 C++ + 内存张量时,每帧 CPU 时间还能更低。


六、四个常见误判

误判纠正
「总 CPU 才 7%,说明没用到 NPU」反过来才对:CPU 占比低、时延也低,才是 NPU 在工作
「某个核 100%,肯定出问题了」NPU 推理期间单核忙是正常的,看的是量级
「用 top 看平均值就够」会掩盖尖峰,必须用 getrusage 或高频采样
「读文件的时间也算推理耗时」那部分算 I/O,压测时要单独剔除或摊薄

七、小结

  1. NPU 推理时 CPU 有占用是必然的——量化、RPC、反量化、I/O 都在 CPU 上;
  2. 本平台实测:ResNet50 INT8 每帧 6.72 ms 墙钟 / 3.99 ms CPU(0.59 核);
  3. 判据是量级:同模型 CPU 回退时是 205 ms/帧,差 25 倍;
  4. 排查顺序:先看日志有没有算子回退,再看 CPU 时间量级,最后才谈优化;
  5. 想看单核视角就用 pidstat -t / top -1,看整机就用总 CPU%,两个口径都要报。

参考

  • 本文实测数据来源:《QAIRT 实战:在 Radxa Dragon Q6A(QCS6490)用 NPU 跑通 ResNet50》
  • Qualcomm QNN 文档(离线):qairt/2.42.0.251225/docs/QAIRT-Docs/QNN/
  • FastRPC 相关资料:Hexagon SDK libcdsprpc
  • 复现脚本:~/QAIRT/demo/bench_cpu_usage.py

bench_cpu_usage.py 4.91K

...全文
40 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文构建了一个包含PWM控制VSC-HVDC链路的IEEE30节点电力传输系统,并基于Simulink平台完成了系统的建模仿真。该模型聚焦于高压直流输电(HVDC)技术在区域电网互联中的应用,采用电压源型换流器(VSC)与脉宽调制(PWM)技术实现高效、灵活的电能传输。研究重点在于分析VSC-HVDC链路在复杂多节点电网中对潮流分布、系统稳定性及电能质量的调控能力,特别关注其在区域电网互联、新能源大规模接入以及跨区域电力交换等场景下的动态响应特性与控制性能,为现代智能电网的发展提供技术支撑与仿真验证手段。; 适合人群:具备电力系统、电气工程或自动化等相关专业背景的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究VSC-HVDC在多节点电网(如IEEE30节点)中的建模与仿真方法;②分析PWM控制策略下HVDC链路对电网潮流分布、电压稳定性和故障穿越能力的影响;③为区域电网互联、新能源并网及智能电网调度等课题提供仿真基础和技术验证。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者在掌握电力电子技术和电力系统分析基础知识的前提下,结合仿真模型深入理解VSC-HVDC的工作原理与控制策略。在学习过程中,应着重关注模型参数设置、控制环路设计及仿真结果的分析,以达到理论与实践相结合的目的。
内容概要:本研究针对不确定综合能源系统中的鲁棒调度优化问题,提出一种基于核密度估计-累积分布函数(KDE-CDF)置信带的建模方法,用以精确刻画风能、光伏及负荷等不确定性因素的非正态概率分布特征。通过构建KDE-CDF模型,能够有效捕捉实际运行中新能源出力与负荷需求的波动性与随机性,并在此基础上设计鲁棒优化调度框架,提升系统在不确定性环境下的运行可靠性与经济性。该方法结合Matlab编程实现,综合考虑系统运行成本、峰谷差、碳排放等多重目标,实现多维度协调优化。研究还探讨了与智能优化算法(如粒子群算法)相结合的应用路径,增强了模型的求解效率与工程实用性,为含多种储能装置、电转气设备及碳捕集系统的复杂综合能源系统提供了科学的调度决策支持。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事综合能源系统规划、运行与调度工作的工程技术人员。; 使用场景及目标:①解决高比例可再生能源接入背景下综合能源系统调度中的不确定性建模难题;②提升调度方案在面对新能源强波动性时的鲁棒性与适应能力;③为融合多类型灵活性资源(如储能、电转气、碳捕集)的综合能源系统提供精细化、可落地的优化运行策略。; 阅读建议:建议读者在掌握概率统计、随机优化与电力系统运行基础知识的前提下,结合文中提供的Matlab代码进行实践操作,重点关注KDE-CDF置信带的构建流程及其在鲁棒优化模型中的嵌入机制,通过调整输入数据分布、参数设置与场景配置开展仿真对比实验,深入理解不确定性建模精度对调度决策质量的影响,进而掌握从数据驱动角度提升系统鲁棒性的关键技术路径。
内容概要:本文系统研究了含分布式电源的配电网可靠性评估方法,基于Matlab代码实现了完整的评估模型与算法框架。研究深入分析了分布式电源接入后对配电网结构与运行特性的影响,重点探讨了其对供电可靠性的作用机制。采用序贯蒙特卡洛模拟法对系统各类状态进行抽样与仿真,综合考虑了分布式电源出力的随机性、负荷波动性以及网络拓扑变化等多种不确定性因素,精确计算了系统及负荷点的多项可靠性指标。通过在标准测试系统上的仿真实验,验证了所提方法的有效性和实用性,为新型电力系统环境下配电网的规划、运行与可靠性提升提供了有力的技术支撑和决策依据。; 适合人群:具备电力系统分析、概率统计及可靠性基础理论知识,熟悉Matlab编程语言,从事电力系统规划、运行、可靠性评估等相关工作的科研人员、高校研究生以及电力行业工程师。; 使用场景及目标:①掌握含分布式电源的现代配电网可靠性评估的核心理论与关键技术;②学习并实践基于序贯蒙特卡洛模拟的电力系统可靠性分析算法的Matlab实现方法;③为实际工程中分布式电源的优化配置、配电网的升级改造以及制定可靠性提升策略提供科学的仿真工具和量化分析依据。; 阅读建议:建议读者结合文中提供的Matlab代码,逐行阅读并运行程序,重点理解系统建模、状态抽样、潮流计算与指标统计等核心模块的实现逻辑。可尝试调整分布式电源的类型、容量、接入位置及负荷水平等参数,观察其对系统可靠性指标的影响趋势,从而深化对系统动态行为与关键影响因素的理解。

8,027

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、IoT、PC 、XR、Auto等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
物联网人工智能开源 企业社区 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧