1. 昇腾NPU基础操作与权限配置
1.1 用户组权限管理
在昇腾NPU环境中,权限管理是第一个需要解决的问题。默认情况下,只有root用户和HwHiAiUser组的成员才能直接执行npu-smi相关命令。对于普通用户,我们需要将其加入HwHiAiUser组:
bash复制sudo usermod -aG HwHiAiUser $USER
这个命令的作用是将当前用户($USER)追加(-a)到HwHiAiUser组(-G)中。执行后必须注意:
- 需要完全注销当前会话并重新登录,或者直接重启服务器
- 新建的终端会话才会继承新的组权限
- 可以通过
groups命令验证是否已加入HwHiAiUser组
重要提示:很多用户遇到"command not found"或权限错误,就是因为忽略了重新登录这一步。我在实际运维中见过至少5次这种情况。
1.2 sudo与非sudo执行差异
昇腾NPU命令在加sudo和不加sudo时,行为有微妙差异:
| 执行方式 | card id显示 | chip id显示 | 适用场景 |
|---|---|---|---|
| 无sudo | 逻辑编号 | 逻辑编号 | 日常监控 |
| 有sudo | 物理编号 | 物理编号 | 配置管理 |
这种差异源于Linux的权限隔离机制。建议统一使用sudo执行NPU命令,特别是在多卡环境下,可以避免编号混乱的问题。
2. NPU硬件信息查询
2.1 基础信息查询
npu-smi info是最核心的查询命令,输出包含:
- NPU卡数量
- 每张卡的芯片类型
- 固件版本
- 温度状态
- 电源状态
典型输出示例:
code复制+-----------------------------------------------------------------------------+
| npu-smi 21.0.4 Version: 21.0.4 |
+----------------------+-----------------------------------------------------+
| NPU Name | Ascend 910 |
| Chip | BM1684 |
| Version | V100R001C01 |
+----------------------+-----------------------------------------------------+
2.2 详细设备列表
要获取所有NPU卡的ID列表,使用:
bash复制sudo npu-smi info -l
这个命令特别有用:
- 在多卡服务器上快速确认可用设备
- 在容器环境中验证设备映射是否正确
- 排查设备未识别问题时作为第一步诊断
2.3 特定设备查询
查询指定NPU卡的详细信息:
bash复制sudo npu-smi info -t product -i 1
其中-i 1指定card id为1的设备。在实际使用中,我通常会结合这个命令和lspci输出交叉验证硬件信息。
3. 系统级信息查询
虽然不属于npu-smi工具集,但这些命令在部署昇腾环境时非常实用:
bash复制# 查看主机型号
cat /sys/devices/virtual/dmi/id/product_name
# 查看主机厂商
cat /sys/devices/virtual/dmi/id/sys_vendor
这些信息在以下场景特别重要:
- 向华为技术支持提交问题时需要提供
- 验证服务器是否在昇腾兼容列表中
- 排查硬件兼容性问题
4. 资源监控与性能分析
4.1 实时资源监控
最常用的监控命令:
bash复制sudo watch npu-smi info -t usages -i 0 -c 0
参数解析:
watch:每2秒刷新一次输出-i 0:监控card id为0的设备-c 0:监控chip id为0的芯片
输出包含的关键指标:
- Memory Usage:NPU显存使用率
- AICPU Usage:AI计算核心利用率
- CtrlCPU Usage:控制CPU利用率
- Temperature:芯片温度
实战技巧:在模型训练时,如果AICPU使用率长期低于70%,通常说明存在数据供给瓶颈。
4.2 监控参数调优
watch命令默认2秒刷新,但可以通过-n参数调整:
bash复制sudo watch -n 5 npu-smi info -t usages -i 0 -c 0
这里-n 5表示每5秒刷新一次。在性能分析时,建议:
- 高频刷新(1-2秒):捕捉瞬时峰值
- 低频刷新(5-10秒):长期趋势观察
5. CPU核心配置管理
5.1 查看当前配置
bash复制sudo npu-smi info -t cpu-num-cfg -i 1 -c 0
输出示例:
code复制AICPU Core Number : 6
CtrlCPU Core Number : 2
Reserved Core Number : 0
这些参数的含义:
- AICPU:实际执行AI计算的CPU核心
- CtrlCPU:负责调度和控制的CPU核心
- Reserved:保留的核心(通常为0)
5.2 修改核心配置
配置命令格式:
bash复制sudo npu-smi set -t cpu-num-cfg -i 1 -c 0 -v 6:2:0
其中-v 6:2:0表示:
- 6个AICPU核心
- 2个CtrlCPU核心
- 0个保留核心
配置后必须执行:
bash复制sudo npu-smi reset -t card -i 1
或者直接重启服务器使配置生效。
5.3 配置策略建议
根据我的经验,不同场景下的推荐配置:
| 工作负载类型 | AICPU核心数 | CtrlCPU核心数 | 说明 |
|---|---|---|---|
| 计算密集型模型训练 | 6-8 | 2 | 最大化计算吞吐量 |
| 推理服务 | 4-6 | 2-4 | 需要更多控制资源 |
| 多任务并行 | 4 | 4 | 平衡计算和控制需求 |
6. 常见问题排查指南
6.1 命令未找到错误
症状:
code复制npu-smi: command not found
解决方案:
- 检查驱动是否安装:
ls /usr/local/Ascend/driver - 检查PATH设置:
echo $PATH是否包含/usr/local/Ascend/driver/tools - 尝试绝对路径执行:
/usr/local/Ascend/driver/tools/npu-smi info
6.2 设备未识别问题
排查步骤:
- 检查PCIe设备:
lspci | grep Ascend - 验证内核模块:
lsmod | grep npu - 查看dmesg日志:
dmesg | grep npu
6.3 性能低于预期
诊断方法:
- 监控AICPU利用率:持续低于50%可能是数据瓶颈
- 检查温度是否过高:可能导致降频
- 验证核心配置:
npu-smi info -t cpu-num-cfg
7. 高级使用技巧
7.1 批量执行命令
在多卡环境下,可以使用循环批量执行命令:
bash复制for card in $(sudo npu-smi info -l | grep Card | awk '{print $2}'); do
sudo npu-smi info -i $card
done
7.2 日志收集
华为官方推荐的日志收集命令:
bash复制sudo npu-smi -i 0 -c 0 -t log-dump -m 0 -p /tmp/npu_log
参数说明:
-m 0:收集所有日志-p:指定输出目录
7.3 固件升级
升级步骤:
- 下载固件包
- 停止相关服务
- 执行升级命令
- 重启设备
具体命令需参考华为官方文档,不同型号NPU流程可能不同。
在实际工作中,我发现昇腾NPU的命令行工具虽然功能强大,但有些参数和用法需要反复实践才能掌握。建议建立一个自己的命令备忘库,记录常用命令和特殊用例。对于团队协作环境,可以编写一些封装脚本,统一命令执行方式,避免因个人使用习惯差异导致的问题。