前言:

第一次接触华为昇腾 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 环境大概率可以开始使用。


初步流程后记:

  1. source /usr/local/Ascend/cann/set_env.sh 主要是给当前 Shell 设置 PATHLD_LIBRARY_PATHPYTHONPATH 等环境变量;不会重启服务、复位 NPU,也不会影响其他已经登录的终端。关闭当前终端后,这些环境变量通常就失效。华为官方明确说明该配置只在当前窗口生效。(昇腾社区)

不过如果我们当前使用的是 root,需要注意两点:

  1. source 会直接以 root 权限执行脚本内容,因此前提是它确实是华为安装包生成的可信脚本。
  2. 它可能改变当前终端后续使用的 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:健康状态,正常应为 OK
  • Temp:NPU 温度
  • Power:功耗
  • AICore(%):计算核心利用率
  • Memory-UsageHBM-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:物理设备或板卡编号,常用于 -i
  • Chip ID:一张板卡内部的芯片编号,常用于 -c
  • Chip Logic ID:程序运行时看到的逻辑设备编号

执行涉及具体设备的命令前,可以先用 info -linfo -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 当前状态。


Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐