本文记录了华为NPU服务器驱动失效问题的完整排查与解决过程。服务器重启后npu-smi info命令失效,经诊断发现是内核自动升级导致当前运行的5.15.0-153版本缺少Ascend驱动模块。通过对比/lib/modules目录下各内核版本的驱动文件,确认5.15.0-144-generic版本包含完整的24个驱动模块。随后修改GRUB配置回退至该内核版本,并通过锁定内核包和禁用自动升级机制防止问题再次发生。在尝试部署vLLM框架时,遇到了NumPy版本冲突、缺少依赖模块、C++编译环境配置、CANN OPP包缺失等一系列问题,最终发现310P3显卡因硬件过旧无法支持vLLM。切换到Atlas 900服务器后,又发现CANN版本23.0.0不满足24.1以上的要求,需要升级HDK驱动和固件。整个过程涉及Linux内核管理、驱动版本兼容性、Python依赖解决和华为昇腾生态系统配置等多个技术层面,为类似环境下的问题排查提供了详实的参考案例。
文章目录
-
- 问题背景
- 驱动状态诊断
- 解决方案选择
-
- [推荐方案:回退到 5.15.0-144-generic](#推荐方案:回退到 5.15.0-144-generic)
- [备选方案:使用 5.15.0-157-generic](#备选方案:使用 5.15.0-157-generic)
- 驱动回退实施
- 防止内核自动升级
- vLLM框架部署尝试
- 模型加载问题排查
-
- NumPy版本兼容性问题
- 缺少decorator模块
- 量化模型配置问题
- 切换非量化模型测试
- C++编译环境配置
- [CANN OPP包缺失问题](#CANN OPP包缺失问题)
- 更换服务器测试

问题背景
在使用华为NPU服务器的过程中,原本可以正常运行的npu-smi info
命令在服务器重启后突然失效。通过查询相关资料,在Atlas 500 Pro 服务器重启后npu-smi info报错的解决方案这篇博客中找到了问题根源------内核自动升级导致驱动失效。

驱动状态诊断
当前内核版本确认
首先需要确认系统当前运行的内核版本以及已安装的所有内核版本。使用以下命令进行查询:
bash
uname -r
dpkg --list | grep linux-image

查询结果显示:
- 当前运行内核: 5.15.0-153-generic
- 已安装的内核 : 系统中有多个内核版本,其中标记为
ii
的是已安装状态:- 5.15.0-153-generic (当前运行)
- 5.15.0-157-generic (已安装但未使用)
- 标记为
rc
的是已删除但配置文件还在的内核
驱动安装历史追溯
由于无法回忆起最初安装驱动时使用的内核版本,需要通过查询历史记录来确定应该使用的内核版本。
首先查看Ascend驱动的安装目录:
c
ls -la /usr/local/Ascend/
total 56
drwxr-xr-x 6 root root 4096 Sep 24 08:22 .
drwxr-xr-x 16 root root 4096 Sep 24 08:21 ..
drwxr-xr-x 2 root root 4096 Feb 14 2025 add-ons
drwxr-xr-x 3 root root 4096 Sep 24 08:21 develop
drwxr-xr-x 9 root root 4096 Sep 24 08:22 driver
dr-xr-x--- 5 root root 4096 Sep 24 08:22 firmware
-r-xr-x--- 1 root root 3794 Sep 24 08:21 host_servers_remove.sh
-r-xr-x--- 1 root root 6129 Sep 24 08:21 host_servers_setup.sh
-r-xr-x--- 1 root root 89 Sep 24 08:21 host_services_exit.sh
-r-xr-x--- 1 root root 89 Sep 24 08:21 host_services_setup.sh
-r-xr-x--- 1 root root 7523 Sep 24 08:21 host_sys_init.sh
-r--r--r-- 1 root root 17 Sep 24 08:21 version.info

接着查看内核模块目录:
c
ls -la /lib/modules/
total 80
drwxr-xr-x 20 root root 4096 Oct 3 06:50 .
drwxr-xr-x 91 root root 4096 Sep 24 08:21 ..
drwxr-xr-x 3 root root 4096 Jul 19 06:28 5.15.0-119-generic
drwxr-xr-x 2 root root 4096 Feb 26 2025 5.15.0-131-generic
drwxr-xr-x 2 root root 4096 Mar 6 2025 5.15.0-133-generic
drwxr-xr-x 2 root root 4096 Mar 27 2025 5.15.0-134-generic
drwxr-xr-x 2 root root 4096 Apr 1 2025 5.15.0-135-generic
drwxr-xr-x 2 root root 4096 Apr 23 06:04 5.15.0-136-generic
drwxr-xr-x 2 root root 4096 May 7 06:21 5.15.0-138-generic
drwxr-xr-x 2 root root 4096 May 17 06:24 5.15.0-139-generic
drwxr-xr-x 2 root root 4096 Jun 5 06:22 5.15.0-140-generic
drwxr-xr-x 2 root root 4096 Jun 21 06:48 5.15.0-141-generic
drwxr-xr-x 2 root root 4096 Jul 2 06:24 5.15.0-142-generic
drwxr-xr-x 3 root root 4096 Jul 31 06:02 5.15.0-143-generic
drwxr-xr-x 3 root root 4096 Aug 19 06:46 5.15.0-144-generic
drwxr-xr-x 2 root root 4096 Sep 25 06:22 5.15.0-151-generic
drwxr-xr-x 2 root root 4096 Aug 30 06:05 5.15.0-152-generic
drwxr-xr-x 6 root root 4096 Sep 24 08:21 5.15.0-153-generic
drwxr-xr-x 2 root root 4096 Oct 3 06:53 5.15.0-156-generic
drwxr-xr-x 6 root root 4096 Oct 3 06:51 5.15.0-157-generic

观察这些目录,会发现有些目录大小是2,有些是3。进一步查看具体内容会发现,大小较小的目录缺少updates
子目录。

驱动模块定位
从目录创建日期来看,有完整目录结构的内核版本包括:
- 5.15.0-119-generic (Jul 19 06:28) - 有完整的目录结构
- 5.15.0-143-generic (Jul 31 06:02) - 有完整的目录结构
- 5.15.0-144-generic (Aug 19 06:46) - 有完整的目录结构
- 5.15.0-153-generic (Sep 24 08:21) - 有完整的目录结构,且时间与驱动安装时间一致
- 5.15.0-157-generic (Oct 3 06:51) - 有完整的目录结构
为了进一步确认,执行以下命令直接搜索驱动相关的.ko文件:
c
find /lib/modules/ -name "*.ko" | grep -E "drv|ascend|npu|davinci"
/lib/modules/5.15.0-144-generic/updates/drv_devdrv_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_pcie_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_pcie_hdc_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_davinci_intf_host.ko
/lib/modules/5.15.0-144-generic/updates/ascend_dms_smf.ko
/lib/modules/5.15.0-144-generic/updates/drv_seclib_host.ko
/lib/modules/5.15.0-144-generic/updates/ascend_xsmem.ko
/lib/modules/5.15.0-144-generic/updates/ascend_urd.ko
/lib/modules/5.15.0-144-generic/updates/drv_vascend_stub.ko
/lib/modules/5.15.0-144-generic/updates/ascend_logdrv.ko
/lib/modules/5.15.0-144-generic/updates/drv_vpc_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_virtmng_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_devmng_host.ko
/lib/modules/5.15.0-144-generic/updates/ascend_event_sched_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_devmm_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_vascend.ko
/lib/modules/5.15.0-144-generic/updates/drv_dp_proc_mng_host.ko
/lib/modules/5.15.0-144-generic/updates/ascend_dms_dtm.ko
/lib/modules/5.15.0-144-generic/updates/drv_tsdrv_platform_host.ko
/lib/modules/5.15.0-144-generic/updates/ascend_uda.ko
/lib/modules/5.15.0-144-generic/updates/ascend_queue.ko
/lib/modules/5.15.0-144-generic/updates/drv_soft_fault.ko
/lib/modules/5.15.0-144-generic/updates/drv_pcie_vnic_host.ko
/lib/modules/5.15.0-144-generic/updates/ascend_soc_resmng.ko
/lib/modules/5.15.0-153-generic/kernel/sound/soc/ti/snd-soc-davinci-mcasp.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/media/radio/wl128x/fm_drv.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/media/usb/s2255/s2255drv.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/misc/ti-st/st_drv.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/net/ethernet/hisilicon/hns/hns_enet_drv.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/net/hamradio/hdlcdrv.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/virtio/virtio_input.ko
/lib/modules/5.15.0-153-generic/kernel/drivers/input/gameport/gameport.ko
...(省略大量通用驱动)
find: '/lib/modules/5.15.0-153-generic/updates': Permission denied
驱动模块分析
从搜索结果可以看到关键信息:
5.15.0-144 - 有完整的Ascend驱动模块
bash
/lib/modules/5.15.0-144-generic/updates/drv_devdrv_host.ko
/lib/modules/5.15.0-144-generic/updates/drv_pcie_host.ko
...(24个Ascend相关的.ko文件)
5.15.0-153 - 没有Ascend驱动模块
bash
/lib/modules/5.15.0-153-generic/kernel/drivers/input/misc/drv2665.ko # 这是通用驱动,不是Ascend的
/lib/modules/5.15.0-153-generic/kernel/drivers/input/misc/drv260x.ko # 这也是通用驱动
find: '/lib/modules/5.15.0-153-generic/updates': Permission denied # 关键:updates目录访问被拒绝
5.15.0-157 - 有完整的Ascend驱动模块
bash
/lib/modules/5.15.0-157-generic/updates/dkms/drv_devdrv_host.ko
/lib/modules/5.15.0-157-generic/updates/dkms/drv_pcie_host.ko
...(24个Ascend相关的.ko文件)
驱动模块特征识别
Ascend NPU驱动具有明显的命名模式:
drv_devdrv_host.ko
- 设备驱动主模块drv_pcie_host.ko
- PCIe主机接口drv_davinci_intf_host.ko
- DaVinci接口(华为NPU架构名称)ascend_*.ko
- Ascend相关模块drv_devmm_host.ko
- 设备内存管理
驱动模块的位置规律:
- 有驱动的内核 :模块在
/lib/modules/X.X.X-XXX/updates/
目录下 - 5.15.0-153 :
find
命令显示Permission denied
,说明updates目录可能不存在或为空
内核版本驱动状态汇总
通过以上分析,驱动模块存在于以下内核版本:
- 5.15.0-119-generic - 有驱动模块
- 5.15.0-143-generic - 有驱动模块
- 5.15.0-144-generic - 有驱动模块
- 5.15.0-153-generic - 没有驱动模块(权限被拒绝,但很可能是空的)
- 5.15.0-157-generic - 有驱动模块(在 updates/dkms/ 下)
问题根源 :当前运行的是 5.15.0-153 ,但这个内核版本下没有编译驱动模块!
详细版本对照表
内核版本 | 目录创建时间 | dpkg状态 | 目录结构完整性 | Ascend驱动模块 | 驱动位置 | 模块数量 | 备注 |
---|---|---|---|---|---|---|---|
5.15.0-119-generic | 2024-07-19 06:28 | rc (已删除) | ✅ 完整 | ✅ 有 | /updates/ | 24个 | 最早的有驱动版本 |
5.15.0-131-generic | 2025-02-26 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-133-generic | 2025-03-06 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-134-generic | 2025-03-27 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-135-generic | 2025-04-01 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-136-generic | 2024-04-23 06:04 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-138-generic | 2024-05-07 06:21 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-139-generic | 2024-05-17 06:24 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-140-generic | 2024-06-05 06:22 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-141-generic | 2024-06-21 06:48 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-142-generic | 2024-07-02 06:24 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-143-generic | 2024-07-31 06:02 | rc (已删除) | ✅ 完整 | ✅ 有 | /updates/ | 24个 | 可用版本 |
5.15.0-144-generic | 2024-08-19 06:46 | rc (已删除) | ✅ 完整 | ✅ 有 | /updates/ | 24个 | 推荐使用 |
5.15.0-151-generic | 2024-09-25 06:22 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-152-generic | 2024-08-30 06:05 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-153-generic | 2024-09-24 08:21 | ii (已安装) | ✅ 完整 | ❌ 无 | - | 0 | 当前运行,无驱动 |
5.15.0-156-generic | 2024-10-03 06:53 | rc (已删除) | ❌ 简化 | ❌ 无 | - | 0 | - |
5.15.0-157-generic | 2024-10-03 06:51 | ii (已安装) | ✅ 完整 | ✅ 有 | /updates/dkms/ | 24个 | 最新版本,有驱动 |
Ascend驱动模块清单
完整的Ascend NPU驱动包含24个内核模块:
序号 | 模块名称 | 功能说明 |
---|---|---|
1 | drv_devdrv_host.ko | 设备驱动主模块 |
2 | drv_pcie_host.ko | PCIe主机接口 |
3 | drv_pcie_hdc_host.ko | PCIe HDC主机 |
4 | drv_davinci_intf_host.ko | DaVinci接口主机 |
5 | ascend_dms_smf.ko | DMS SMF模块 |
6 | drv_seclib_host.ko | 安全库主机 |
7 | ascend_xsmem.ko | 扩展共享内存 |
8 | ascend_urd.ko | URD模块 |
9 | drv_vascend_stub.ko | vAscend存根 |
10 | ascend_logdrv.ko | 日志驱动 |
11 | drv_vpc_host.ko | VPC主机 |
12 | drv_virtmng_host.ko | 虚拟管理主机 |
13 | drv_devmng_host.ko | 设备管理主机 |
14 | ascend_event_sched_host.ko | 事件调度主机 |
15 | drv_devmm_host.ko | 设备内存管理主机 |
16 | drv_vascend.ko | vAscend驱动 |
17 | drv_dp_proc_mng_host.ko | DP进程管理主机 |
18 | ascend_dms_dtm.ko | DMS DTM模块 |
19 | drv_tsdrv_platform_host.ko | TS驱动平台主机 |
20 | ascend_uda.ko | UDA模块 |
21 | ascend_queue.ko | 队列模块 |
22 | drv_soft_fault.ko | 软件故障处理 |
23 | drv_pcie_vnic_host.ko | PCIe vNIC主机 |
24 | ascend_soc_resmng.ko | SOC资源管理 |
解决方案选择
推荐方案:回退到 5.15.0-144-generic
选择理由:
- ✅ 有完整的24个驱动模块
- ✅ 时间最接近当前,相对较新
- ✅ 驱动稳定性经过验证
备选方案:使用 5.15.0-157-generic
优点: 最新的内核版本,有驱动模块(在 updates/dkms/ 下)
缺点: 需要测试稳定性
驱动回退实施
GRUB配置修改
首先编辑GRUB配置文件:
bash
sudo vi /etc/default/grub
原始配置内容:
bash
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
~
修改以下行:
bash
#GRUB_DEFAULT=0
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-144-generic"
GRUB_TIMEOUT=10
应用GRUB配置
更新GRUB配置:
bash
sudo update-grub

系统重启验证
重启系统:
bash
sudo reboot
重启后验证驱动是否正常:
bash
npu-smi info

可以看到NPU设备信息已经正常显示,驱动问题得到解决。
防止内核自动升级
为了避免类似问题再次发生,需要禁用内核的自动升级。
锁定内核版本
执行以下命令锁定当前使用的内核版本,防止手动误操作升级:
bash
sudo apt-mark hold linux-image-generic linux-headers-generic
sudo apt-mark hold linux-image-5.15.0-144-generic linux-headers-5.15.0-144-generic
- 作用:锁定特定的软件包,防止它们被升级
- 范围:只针对指定的包(这里是内核相关包)
- 特点 :即使手动运行
apt upgrade
,这些包也不会被升级 - 解锁 :需要手动
apt-mark unhold
才能再次升级
禁用系统自动升级
防止系统在后台自动升级内核:
bash
echo -e "APT::Periodic::Update-Package-Lists \"0\";\nAPT::Periodic::Download-Upgradeable-Packages \"0\";\nAPT::Periodic::AutocleanInterval \"0\";\nAPT::Periodic::Unattended-Upgrade \"0\";" | sudo tee /etc/apt/apt.conf.d/10periodic
echo -e "APT::Periodic::Update-Package-Lists \"0\";\nAPT::Periodic::Unattended-Upgrade \"0\";" | sudo tee /etc/apt/apt.conf.d/20auto-upgrades
- 作用:禁用整个自动升级机制
- 范围:影响所有软件包的自动更新
- 特点 :防止系统在后台自动运行
apt update
和apt upgrade
- 不影响 :手动运行
apt upgrade
仍然可以升级所有包

未来升级策略
当确定需要升级内核时(比如安装了新的驱动),可以按以下步骤操作:
bash
# 解锁内核版本
sudo apt-mark unhold linux-image-generic linux-headers-generic
# 执行升级
sudo apt update
sudo apt upgrade
# 重新为新驱动编译或重新锁定
vLLM框架部署尝试
在解决了驱动问题后,接下来尝试在华为NPU服务器上部署vLLM框架。然而这台服务器的主要问题是硬件过于陈旧------使用的是上古时代的310P3,并不在vLLM支持设备列表当中。尽管如此,还是按照安装教程进行尝试。
Python环境配置
首先创建Python虚拟环境:
bash
conda create -n vllm-ascend-env python=3.11
conda activate vllm-ascend-env
CANN工具包安装
安装CANN所需的基础依赖:
bash
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple attrs 'numpy<2.0.0' decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py wheel typing_extensions
下载并安装CANN工具包,注意--full
参数表示完整安装到系统(默认 /usr/local/Ascend/):
bash
wget --header="Referer: https://www.hiascend.com/" https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.2.RC1/Ascend-cann-toolkit_8.2.RC1_linux-"$(uname -i)".run
chmod +x ./Ascend-cann-toolkit_8.2.RC1_linux-"$(uname -i)".run
./Ascend-cann-toolkit_8.2.RC1_linux-"$(uname -i)".run --full
source /usr/local/Ascend/ascend-toolkit/set_env.sh

算子库安装
虽然显卡型号不匹配,但仍然先按照教程中910b对应的包进行安装:
bash
wget --header="Referer: https://www.hiascend.com/" https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.2.RC1/Ascend-cann-kernels-910b_8.2.RC1_linux-"$(uname -i)".run
chmod +x ./Ascend-cann-kernels-910b_8.2.RC1_linux-"$(uname -i)".run
./Ascend-cann-kernels-910b_8.2.RC1_linux-"$(uname -i)".run --install
wget --header="Referer: https://www.hiascend.com/" https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%208.2.RC1/Ascend-cann-nnal_8.2.RC1_linux-"$(uname -i)".run
chmod +x ./Ascend-cann-nnal_8.2.RC1_linux-"$(uname -i)".run
./Ascend-cann-nnal_8.2.RC1_linux-"$(uname -i)".run --install
source /usr/local/Ascend/nnal/atb/set_env.sh
vLLM框架安装
配置系统软件源和Python包源:
bash
sed -i 's|ports.ubuntu.com|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
apt-get update -y && apt-get install -y gcc g++ cmake libnuma-dev wget git curl jq
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install vllm==0.11.0
pip install vllm-ascend==0.11.0rc0
依赖冲突处理
此时直接安装vllm-ascend==0.11.0rc0
会报错:
bash
ERROR: No matching distribution found for torch-npu==2.7.1.dev20250724
由于这个 torch-npu==2.7.1.dev20250724 是一个开发版本,不在公开的 PyPI 上发布。因此尝试使用最接近的稳定版本:
bash
pip install torch-npu==2.8.0rc1
接下来使用--no-deps
跳过依赖检查:
bash
pip install vllm-ascend==0.11.0rc0 --no-deps

基础功能验证
简单测试vLLM是否能正常运行:

基础功能看起来没有问题,接下来尝试加载本地模型进行测试。
模型加载问题排查
NumPy版本兼容性问题
首先尝试运行本地的Qwen3-8B-AWQ
模型:
bash
vllm serve Qwen3-8B-AWQ

报错的关键信息是:
bash
Failed to import Python module [AttributeError: `np.float_` was removed in the NumPy 2.0 release. Use `np.float64` instead..].
这说明虽然安装了 NumPy 2.x,但华为昇腾的 CANN 工具包内部还在使用已被废弃的 np.float_ API,导致 ACL (Ascend Computing Language) 初始化失败。
解决方案是降级NumPy版本:
bash
# 卸载当前的 NumPy
pip uninstall numpy -y
# 安装兼容的 NumPy 1.x 版本
pip install "numpy<2.0.0"
# 验证版本
python -c "import numpy; print(numpy.__version__)"
# 重新启动服务
vllm serve Qwen3-8B-AWQ

缺少decorator模块
解决NumPy问题后,核心错误变成了缺少 decorator
模块:
ModuleNotFoundError: No module named 'decorator'.
安装所有缺失的依赖:
bash
# 安装所有缺失的依赖
pip install decorator cmake pybind11 quart setuptools-scm ml-dtypes tornado absl-py
# 然后重新启动服务
vllm serve Qwen3-8B-AWQ

量化模型配置问题
再次尝试启动:

此时NPU初始化成功了,但出现了新的问题------模型量化配置错误:
KeyError: 'model.embed_tokens.weight'
这是因为 Qwen3-8B-AWQ
模型的量化描述文件缺少 embed_tokens
层的配置。由于不确定是否是模型量化导致的问题,因此决定换用非量化模型进行测试。
切换非量化模型测试
使用非量化的小模型进行测试:
bash
vllm serve Qwen2.5-0.5B-Instruct/

这次错误是 CANN 编译器缺少 C++ 标准库头文件:
fatal error: 'cstdint' file not found
这是 CANN 工具包的 C++ 编译环境配置问题。CANN 的算子编译需要 C++ 标准库,但系统环境变量没有正确配置,导致编译器找不到 cstdint
等标准头文件。
C++编译环境配置
解决C++编译环境问题:
bash
# 确保系统有完整的 C++ 开发环境
sudo apt-get install -y build-essential clang-11 libc++-dev libc++abi-dev
# 找到 C++ 标准库位置
dpkg -L libc++-dev | grep cstdint
# 设置完整环境
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export CPLUS_INCLUDE_PATH=/usr/include/c++/11:/usr/include/aarch64-linux-gnu/c++/11:$CPLUS_INCLUDE_PATH
# 验证
echo '#include <cstdint>' | clang++ -x c++ -E - && echo "OK"
# 运行 vLLM
vllm serve Qwen2.5-0.5B-Instruct/

CANN OPP包缺失问题
从错误日志可以清楚看到,这是 CANN 安装不完整的问题:
EZ1001: Get path and read binary_info_config.json failed, please check if the opp_kernel package is installed!
以及算子执行失败:
RopeOperation setup failed!
call aclnnSwiGlu failed, error code is 361001
这说明系统缺少 CANN OPP (Operator Package) 内核包。这不是一个可以通过 pip 安装或配置解决的问题,需要系统管理员重新安装完整的 CANN 软件栈。
在GitLab issue中有大量关于此问题的提问,经过调查发现这是由于显卡版本过老导致的兼容性问题,目前无法解决。
更换服务器测试
新服务器环境确认
由于310P3显卡无法正常运行vLLM,决定切换到另一台配置更新的服务器进行测试。

需要注意的是,这台服务器运行的是EulerOS系统,会出现 apt: command not found
的情况。这是因为 apt 是 Debian/Ubuntu 系列的包管理器,而EulerOS(RHEL/Fedora/CentOS 系列)使用的是 yum
/ dnf
/ rpm
,不支持 apt
命令。因此在这台服务器上暂时跳过需要apt的命令。
环境重新配置
重新执行之前的安装步骤,配置Python环境和CANN工具包。

驱动版本兼容性检查
尝试运行vllm serve Qwen2.5-0.5B-Instruct/
,仍然遇到了问题:

问题原因是驱动与固件版本不匹配,导致ACL(Ascend Computing Language)无法设置某些编译选项。
CANN版本要求确认
在CANN版本兼容性文档中可以看到,HDK版本至少要在24.1以上。

执行cat /usr/local/Ascend/driver/version.info
查看当前CANN版本,结果显示为23.0.0,确实不符合要求。

查看详细的NPU信息:
bash
npu-smi info -t board -i 0
NPU ID : 0
Software Version : 23.0.0
Firmware Version : 7.1.0.3.220
Compatibility : OK
Board ID : 0x21
PCB ID : A
BOM ID : 1
PCIe Bus Info : 0000:C1:00.0
Slot ID : 0
Class ID : NA
PCI Vendor ID : 0x19E5
PCI Device ID : 0xD801
Subsystem Vendor ID : 0x0200
Subsystem Device ID : 0x0100
Chip Count : 1
服务器型号确定
使用dmidecode -s system-product-name
确定华为服务器型号为Atlas 900
,属于高密度训练节点。因此在Ascend HDK安装文档中,需要选择中心训练服务器类型。

查阅Atlas 中心训练服务器 24.1.0 NPU驱动和固件安装指南和Atlas 中心训练服务器 24.1.0 NPU驱动和固件升级指导书,文档开头明确说明针对Atlas 900 计算节点
。

驱动升级准备
按照指引中的物理机升级部分,输入rpm -qa | grep Ascend
,返回Ascend910-driver-23.0.rc2-1.aarch64
,说明需要使用rpm包进行安装。
进入Ascend HDK软件页,选择对应版本下载。但会发现商业版无法下载,因此需要前往社区版下载对应的包:

驱动升级执行
参考固件升级指导书进行升级操作:
bash
# 查看当前环境的rpm固件列表
rpm -qa | grep Ascend
# 返回结果如下
# Ascend910-driver-23.0.rc2-1.aarch64
# 如果需要卸载旧版本固件,执行以下命令(本例中跳过)
# rpm -e Ascend910-driver-23.0.rc2-1.aarch64
# 安装固件与驱动,注意顺序:先固件,后驱动
rpm -Uvh Ascend-hdk-910b-npu-firmware-7.5.0.5.220-1.noarch.rpm
rpm -Uvh Ascend-hdk-910b-npu-driver-24.1.0.3-1.aarch64.rpm
至此,完成了华为NPU服务器从驱动问题诊断、修复到vLLM框架部署尝试的完整过程。虽然在310P3显卡上由于硬件限制未能成功运行vLLM,但通过升级到支持的硬件和对应的驱动版本,为后续的深度学习框架部署奠定了基础。