华为昇腾 NPU 服务器新手常用命令
华为昇腾 NPU 服务器新手常用命令
前言:
第一次接触华为昇腾 NPU 服务器时,接下来该看什么、怎么初步检查,又该执行什么呢?
本文默认环境为:
- 华为昇腾 Ascend / Atlas NPU
- Linux 服务器
- 已安装 NPU 驱动
- 可能安装了 CANN 和
torch_npu
不同 Atlas 型号和驱动版本支持的子命令可能略有区别,以本机执行 npu-smi -h 的结果为准。
新手常用命令:
初步流程:
登录一台陌生的昇腾服务器后,新手可以按下面的顺序执行命令来初步检查:
# 1. 看所有卡是否在位、是否健康
npu-smi info
# 2. 看一共有多少张卡
npu-smi info -l
# 3. 看设备编号映射关系
npu-smi info -m
# 4. 动态观察资源
watch -n 1 npu-smi info
# 5. 加载CANN环境
source /usr/local/Ascend/cann/set_env.sh
# 6. 验证PyTorch是否识别NPU
python3 -c "import torch; import torch_npu; print(torch_npu.npu.is_available(), torch_npu.npu.device_count())"
也就是这三个核心阶段:
第一层:看卡:
npu-smi info
第二层:找卡和查卡*:
npu-smi info -l
npu-smi info -m
npu-smi info -t board -i 0
npu-smi info -t health -i 0 -c 0
第三层:验证开发环境
source /usr/local/Ascend/cann/set_env.sh
python3 -c "import torch; import torch_npu; print(torch_npu.npu.is_available(), torch_npu.npu.device_count())"
这些基本命令已经足以解决大部分的“NPU 在不在、忙不忙、健不健康、程序能不能跑”的问题。
如果这些都正常,说明这台服务器的基础 NPU 环境大概率可以开始使用。
初步流程后记:
source /usr/local/Ascend/cann/set_env.sh主要是给当前 Shell 设置PATH、LD_LIBRARY_PATH、PYTHONPATH等环境变量;不会重启服务、复位 NPU,也不会影响其他已经登录的终端。关闭当前终端后,这些环境变量通常就失效。华为官方明确说明该配置只在当前窗口生效。(昇腾社区)
不过如果我们当前使用的是 root,需要注意两点:
source会直接以 root 权限执行脚本内容,因此前提是它确实是华为安装包生成的可信脚本。- 它可能改变当前终端后续使用的 Python 和动态库版本,所以暂时不要写进
/root/.bashrc。
可以先确认文件:
readlink -f /usr/local/Ascend/cann/set_env.sh
ls -l /usr/local/Ascend/cann/set_env.sh
如果最终任务是在docker容器里运行
建议流程是:
# 宿主机:只检查硬件和驱动
npu-smi info
# 进入容器
docker exec -it <容器名> bash
# 容器内加载容器自己的 CANN 环境
source /usr/local/Ascend/cann/set_env.sh
宿主机执行 source,不会自动替容器配置好环境。 容器场景通常是宿主机提供驱动和设备,容器内提供或挂载 CANN 运行环境,因此程序在哪个环境运行,就应在哪个环境中加载对应的 set_env.sh。华为的容器部署文档也区分了宿主机驱动与容器内 CANN 软件环境。([昇腾社区][2])
如果容器中找不到脚本:
find /usr/local/Ascend -name set_env.sh 2>/dev/null
路径也可能是:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
最安全的临时测试方法
不想污染当前 root 终端,可以让它只在一个子 Shell 中生效:
bash -c '
source /usr/local/Ascend/cann/set_env.sh &&
echo "ASCEND_HOME_PATH=$ASCEND_HOME_PATH" &&
python3 -c "import torch; import torch_npu; print(torch_npu.npu.is_available())"
'
子 Shell 执行结束,当前 root 终端的环境变量不会改变。
危险命令:
新手阶段,建议主要使用只读的 info 命令:
npu-smi info
npu-smi info -l
npu-smi info -m
npu-smi info -t board ...
npu-smi info -t health ...
看到下面这些操作时要谨慎:
npu-smi set
npu-smi clear
npu-smi upgrade
reset
reboot
kill -9
pkill -9
msnpureport config --set
npu-smi 的帮助信息显示,set 会修改设备配置,clear 会清除设备信息,upgrade 会进行固件相关操作;部分 set 子命令还包含设备复位。
msnpureport config --set 主要用于疑难故障定位,部分配置会影响任务执行和性能,不应作为日常巡检命令随意运行。
在生产环境或多人服务器上,涉及修改配置、复位、升级、杀进程的操作,应先联系管理员。
常用命令解释:
一、最重要的命令:查看 NPU 整体状态
npu-smi info
第一次登录服务器,先执行它。
重点看这几个字段:
Health:健康状态,正常应为OKTemp:NPU 温度Power:功耗AICore(%):计算核心利用率Memory-Usage或HBM-Usage:NPU 显存占用NPU:设备编号Name:芯片型号
华为官方文档也将 npu-smi info 作为查询设备基本信息和判断驱动是否正常加载的基础命令。不同产品的输出格式可能不同,但通常都会包含健康状态、温度、功耗、AI Core 利用率和内存使用情况。
简单判断:
能看到所有卡 + Health 为 OK
说明硬件和驱动至少处于基本可用状态。
如果出现下面这些情况,就需要进一步排查:
Health: Warning
Health: Alarm
Health: Critical
Health: UNKNOWN
找不到任何 NPU
执行命令直接报错
二、实时观察 NPU 使用率
watch -n 1 npu-smi info
这个命令会每秒刷新一次。
常见用途:
- 判断训练或推理程序有没有真正使用 NPU
- 观察显存是否持续增长
- 查看 AICore 利用率是否长期为 0
- 判断某张卡是否处于空闲状态
- 观察程序退出后显存有没有释放
退出实时监控:
Ctrl + C
也可以降低刷新频率:
watch -n 5 npu-smi info
三、查看服务器有多少张 NPU 卡
npu-smi info -l
这个命令主要用于查看:
- NPU 卡数量
- 每张卡的
NPU ID - 产品名称
- 芯片数量
- 部分环境下的序列号
示例:
Card Count : 8
NPU ID : 0
Chip Count : 1
后面很多命令里的 -i 0,就是在指定 NPU ID 为 0 的设备。
四、搞清楚 NPU ID、Chip ID 和逻辑 ID
npu-smi info -m
这个命令用于查询芯片映射关系,通常会看到:
NPU ID Chip ID Chip Logic ID Chip Name
0 0 0 Ascend xxx
1 0 1 Ascend xxx
新手最容易混淆的是三种编号:
NPU ID:物理设备或板卡编号,常用于-iChip ID:一张板卡内部的芯片编号,常用于-cChip Logic ID:程序运行时看到的逻辑设备编号
执行涉及具体设备的命令前,可以先用 info -l 和 info -m 确认编号,避免查错卡。
五、查看板卡、驱动和固件详细信息
查询 0 号 NPU:
npu-smi info -t board -i 0
部分多芯片或 A3 型号可能需要同时指定芯片:
npu-smi info -t board -i 0 -c 0
通常可以看到:
- 产品名称
- 产品型号
- 序列号
- 驱动或软件版本
- 固件版本
- 芯片数量
- 故障芯片数量
- 部分产品的驱动、固件兼容状态
这个命令非常适合在提交问题时收集服务器环境信息。不过,不同产品和用户权限下,部分字段可能显示为 NA。
还可以查看 npu-smi 工具版本:
npu-smi -v
六、进一步查看某张卡的健康状态
npu-smi info -t health -i 0 -c 0
其中:
-i 0:NPU ID 为 0
-c 0:Chip ID 为 0
正常情况下会看到类似结果:
Health Status : OK
Error Code : NA
Error Information : NA
如果 npu-smi info 里发现某张卡不是 OK,就可以用这个命令进一步查看错误码和错误信息。
部分型号也支持不指定芯片:
npu-smi info -t health -i 0
具体以本机帮助信息为准:
npu-smi info -h
七、查看是谁占用了 NPU 显存
部分型号和驱动版本支持:
npu-smi info -t proc-mem -i 0
它可以查询指定 NPU 上各进程的内存占用。
拿到 PID 后,再到 Linux 系统中查询进程:
ps -fp <PID>
例如:
ps -fp 123456
查看更完整的启动命令:
ps -p 123456 -o user,pid,ppid,lstart,cmd
也可以直接搜索常见训练进程:
ps -ef | grep -E 'python|torchrun|deepspeed|mindspore' | grep -v grep
需要注意:并不是所有 Atlas 产品都支持 proc-mem。如果出现下面的提示,不一定是服务器故障:
This device does not support querying proc-mem.
华为官方不同产品文档中也明确标注了该命令可能不受支持。
不要看到陌生进程就直接执行:
kill -9 <PID>
多人共用的服务器上,这很可能是其他人的训练任务。应先确认进程所有者和任务用途。
八、加载 CANN 环境变量
很多时候,npu-smi info 正常,但运行 Python 程序仍然提示找不到 Ascend 库。这通常需要先加载 CANN 环境变量。
默认安装路径一般可以执行:
source /usr/local/Ascend/cann/set_env.sh
华为 CANN 8.5 官方文档使用的默认路径也是:
source /usr/local/Ascend/cann/set_env.sh
该命令设置的环境变量默认只对当前终端窗口生效。
如果提示文件不存在,可以搜索实际路径:
find /usr/local/Ascend -name set_env.sh 2>/dev/null
某些较早的安装结构可能是:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
检查 Ascend 相关环境变量:
env | grep -E 'ASCEND|CANN|LD_LIBRARY_PATH|PYTHONPATH'
九、验证 PyTorch 能不能识别 NPU
先做最简单的检查:
python3 -c "import torch; import torch_npu; print('available:', torch_npu.npu.is_available()); print('device_count:', torch_npu.npu.device_count())"
理想输出类似:
available: True
device_count: 8
华为官方将 torch_npu.npu.is_available() 用于判断当前环境中的 NPU 是否可用,将 torch_npu.npu.device_count() 用于获取设备数量。
需要注意:
npu-smi info 正常
只说明驱动和设备基本可见,并不代表当前 Python、PyTorch、torch_npu、CANN 版本一定完全匹配。
十、执行一次真正的 NPU 计算
仅返回 True 还不够。最好真正创建一个 NPU Tensor 并执行计算:
python3 - <<'PY'
import torch
import torch_npu
print("NPU available:", torch_npu.npu.is_available())
print("NPU count:", torch_npu.npu.device_count())
device = torch.device("npu:0")
x = torch.arange(8, dtype=torch.float32).to(device)
y = x * 2
print("device:", y.device)
print("result:", y.cpu())
PY
成功时应看到类似结果:
NPU available: True
NPU count: 8
device: npu:0
result: tensor([ 0., 2., 4., 6., 8., 10., 12., 14.])
这一步可以同时验证:
- Python 环境正常
- PyTorch 可以导入
torch_npu可以导入- CANN 动态库可以加载
- NPU 设备可以初始化
- 数据可以传输到 NPU
- NPU 可以真正执行计算
官方迁移文档也支持使用 torch.device("npu:0") 和 .to("npu") 将数据放到昇腾设备上。
十一、报错时快速查看系统日志
查看最近的内核相关错误:
dmesg -T | grep -Ei 'npu|ascend|davinci|aicore|hisi|pcie|error|fail' | tail -n 100
使用 systemd 的系统也可以执行:
journalctl -k --since "30 minutes ago" |
grep -Ei 'npu|ascend|davinci|aicore|hisi|pcie|error|fail'
检查 NPU 设备文件:
ls -l /dev/davinci* 2>/dev/null
检查驱动模块:
lsmod | grep -Ei 'ascend|drv'
这些命令主要用于收集线索。不要仅凭一行带有 error 的历史日志,就直接判断 NPU 已经损坏,还要结合错误发生时间和 npu-smi info 当前状态。
更多推荐



所有评论(0)