news 2026/2/12 6:14:55

资源监控体系:利用npu-smi实现硬件状态实时可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
资源监控体系:利用npu-smi实现硬件状态实时可视化

在高性能计算领域,盲目运行模型无异于蒙眼狂奔。无论是排查 DeepSeek 的性能瓶颈,还是保障生产环境的稳定性,掌握 NPU 的实时状态是必修课。npu-smi是昇腾系统自带的命令行工具,对标 NVIDIA 的nvidia-smi,但其功能覆盖了从芯片状态、显存带宽到互联拓扑的全维度监控。

本篇不谈虚的,直接拆解如何利用npu-smi及其周边工具,建立一套可视化的硬件监控体系。

1. 命令行实战:从入门到精通

1.1 全局概览:读懂 Dashboard

最常用的命令是npu-smi info。它展示了当前服务器上所有 NPU 的核心指标。

$ npu-smi info +------------------------------------------------------------------------------------------------+|NPU Name Health Power(W)Temp(C)Hugepages-Usage(page)||Chip Device Bus-Id AICore(%)Memory-Usage(MB)|+================================================================================================+|0910B OK300.5450/0||000000:C110032768/65536|+================================================================================================+

关键指标解读

  • HealthOK是唯一可接受的状态。出现WarningError(如 ECC 错误、温度过高)时,推理服务通常会不可预测地崩溃。
  • Power(W):910B 单卡满载功耗约 350W-400W。如果你的 DeepSeek-67B 推理时功耗只有 100W,说明计算单元在空转,瓶颈卡在了数据搬运或 CPU 调度上。
  • AICore(%)核心算力利用率
    • 理想状态:Prefill 阶段瞬间飙升至 90%-100%,Decode 阶段维持在 60%-80%。
    • 异常状态:长期维持在 10%-20%。这通常意味着 Python 层的 Overhead 太大,或者 Kernel Launch 速度太慢,NPU 大部分时间在“等米下锅”。
  • Memory-Usage显存占用量。注意,这里显示的是申请量(Reserved),而非实际使用量(Allocated)。PyTorch 的缓存分配机制会让这个数值通常较高。

1.2 进阶诊断:查带宽、查频率、查拓扑

静态信息不够用,我们需要深入肌理。npu-smi info -t <type>参数是解剖 NPU 的手术刀。

场景一:模型推理慢,怀疑显存带宽瓶颈
DeepSeek 的 Decode 阶段是典型的 Memory-Bound。查看显存带宽利用率:

# 查询设备 0 的显存统计信息npu-smi info -t memory -i0

重点关注HBM Read/Write Bandwidth。如果带宽利用率长期打满(接近 1.2TB/s),说明算力再强也没用,必须上量化(W8A8)或优化 KV Cache。

场景二:多卡并行训练/推理卡顿
8 卡部署 DeepSeek-67B 时,卡间通信(HCCS)是生命线。

# 查询网络健康状态npu-smi info -t network -i0

检查Link Status是否全为UP。任何一个 Link Down 都会导致集合通信(AllReduce)超时。

场景三:怀疑过热降频
如果机房散热不佳,NPU 温度超过阈值(通常 75℃+)会触发热保护降频。

# 查询功率和频率信息npu-smi info -t pm -i0

对比当前的AI Core Frequency和额定频率。如果频率大幅跳水,请立即检查风扇转速和散热风道。


2. 实时监控模式:捕捉瞬态异常

npu-smi默认只是快照。要观察推理过程中的脉冲波动,需要高频采样。

2.1 简易看板:Watch

Linux 的watch命令是穷人的仪表盘。

# 每 0.5 秒刷新一次,高亮变化部分watch-n0.5-d npu-smi info

技巧:在压测 DeepSeek 时,盯着 AICore 利用率。

  • 锯齿状波动:正常。对应 Token 生成的计算脉冲。
  • 长直线:异常。说明程序卡死(Hang)或在进行极慢的 CPU 处理(如 Tokenizer 慢、磁盘 IO 慢)。

2.2 抓取 ECC 错误

硬件故障往往是静默的。如果你发现模型输出乱码或 Loss 不收敛,检查一下是否有不可纠正的 ECC 错误。

npu-smi info -t error -i0

关注Double Bit Error计数。如果不为 0,这块卡可能物理损坏了,建议尽快下线报修。


3. 生产级监控方案:Prometheus + Grafana

在几十上百张卡的集群中,靠 SSH 盯着命令行是不现实的。我们需要将 NPU 状态接入标准的云原生监控体系。

3.1 架构设计

  • Data Source:npu-smi(底层数据源)。
  • Collector:ascend_exporter(运行在每台服务器上的 Daemon)。
  • Storage: Prometheus(时序数据库)。
  • UI: Grafana(可视化面板)。

3.2 编写轻量级 Exporter

虽然华为提供了官方的 exporter,但为了轻量化部署,我们可以写一个 Python 脚本,解析npu-smi info -j(JSON 格式输出,CANN 7.0+ 支持)并暴露 Metrics。

importtimeimportjsonimportsubprocessfromprometheus_clientimportstart_http_server,Gauge# 定义核心指标NPU_TEMP=Gauge('npu_chip_temperature','NPU Temperature',['device_id'])NPU_POWER=Gauge('npu_chip_power','NPU Power Consumption',['device_id'])NPU_AICORE=Gauge('npu_aicore_utilization','NPU AICore Utilization',['device_id'])NPU_MEM_USED=Gauge('npu_memory_used_mb','NPU Memory Used',['device_id'])NPU_MEM_TOTAL=Gauge('npu_memory_total_mb','NPU Memory Total',['device_id'])defcollect_metrics():try:# 获取 JSON 格式的详细信息(需 CANN 版本支持,否则需正则解析文本)# 实际命令可能因版本差异需调整,此处演示逻辑cmd=["npu-smi","info","-j"]# 注意:部分旧版本不支持 -j,需 fallback 到文本解析result=subprocess.check_output(cmd,stderr=subprocess.STDOUT)data=json.loads(result)fordeviceindata['devices']:dev_id=str(device['id'])# 提取指标NPU_TEMP.labels(dev_id).set(device['temperature'])NPU_POWER.labels(dev_id).set(device['power'])NPU_AICORE.labels(dev_id).set(device['aicore_utilization'])# 显存单位转换mem_info=device['memory']NPU_MEM_USED.labels(dev_id).set(mem_info['memory_usage'])NPU_MEM_TOTAL.labels(dev_id).set(mem_info['total_memory'])exceptExceptionase:print(f"Error collecting metrics:{e}")if__name__=='__main__':# 启动 HTTP 服务,端口 9100start_http_server(9100)print("NPU Exporter running on :9100")whileTrue:collect_metrics()time.sleep(5)# 5秒采集一次,避免对 NPU 造成查询压力

3.3 Grafana 面板配置建议

在 Grafana 中,建议配置以下几个 Panel:

  1. Cluster Heatmap:显示整个集群所有卡的 AICore 利用率热力图。一眼识别出哪台机器是“摸鱼”的。
  2. Throttling Alerts:配置告警规则,当npu_chip_temperature > 70持续 1 分钟时,发送钉钉/Slack 告警。
  3. Memory Leak Detection:绘制显存使用率曲线。如果曲线呈现“只升不降”的阶梯状,大概率是代码里有 Tensor 没释放。

4. 总结:数据驱动决策

资源监控不是为了画漂亮的图表,而是为了回答三个核心问题:

  1. 稳定性:硬件健康吗?有没有 ECC 错误或高温降频?
  2. 效率:算力跑满了吗?AICore 是不是在等待 IO?
  3. 容量:还能塞下更大的 Batch Size 吗?显存还有多少余量?

对于 DeepSeek 这样的大模型应用,稳定性 > 性能。建议将npu-smi的健康检查集成到服务启动脚本(Entrypoint)中:启动前自检,不健康直接退出,避免将流量引入故障节点。这才是生产环境的生存之道。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 18:08:52

小程序flask连锁火锅智慧餐饮管理系统 聊天 餐厅 供应商

目录系统架构与功能模块技术实现亮点商业价值体现开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统架构与功能模块 Flask连锁火锅智慧餐饮管理系统采用轻量级Python框架Flask构建后端&am…

作者头像 李华
网站建设 2026/2/7 4:54:53

Agent架构新趋势:从模型能力到系统判断,收藏级深度解析判断工程化

文章指出Agent技术正从关注模型能力转向系统判断工程化。随着系统复杂度增加&#xff0c;将本应结构化的判断交给模型即时完成会导致不可预测性。Claude Skills等方案通过将验证过的能力从prompt中提取为可管理组件&#xff0c;解决这一挑战。未来Agent系统应更关注判断正确性而…

作者头像 李华
网站建设 2026/2/7 17:38:47

加密界懒人福音!OEMexe,无原程序也能解密

试过不少加密工具&#xff0c;要么操作繁琐&#xff0c;要么解密必须依赖原软件&#xff0c;换台电脑就抓瞎&#xff0c;真心折腾。 直到发现OEMexe这款神仙工具&#xff0c;直接刷新我对加密软件的认知&#xff0c;用一次就彻底爱上。它的操作简单到离谱&#xff1a;打开软件…

作者头像 李华
网站建设 2026/2/8 11:04:59

AIGC 算法工程师面试八股文全解析:Diffusion Models 原理、推导与实战要点

文章目录 八股文 1、简述DDPM的算法原理 2、什么是重参数化技巧?Diffusion Models和VAE中的重参数化技巧是如何使用的? VAE中的重参数化技巧 Diffusion Models中的重参数化技巧 3、什么是马尔可夫过程?DDPM中的马尔可夫链是如何定义的? 马尔可夫过程 DDPM马尔可夫链 4、为什…

作者头像 李华