华为昇腾NPU驱动问题排查与vLLM部署踩坑记录

本文记录了华为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依赖解决和华为昇腾生态系统配置等多个技术层面,为类似环境下的问题排查提供了详实的参考案例。

文章目录


🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容


问题背景

在使用华为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-153find 命令显示 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

选择理由:

  1. ✅ 有完整的24个驱动模块
  2. ✅ 时间最接近当前,相对较新
  3. ✅ 驱动稳定性经过验证

备选方案:使用 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 updateapt 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,但通过升级到支持的硬件和对应的驱动版本,为后续的深度学习框架部署奠定了基础。

相关推荐
虚伪的空想家7 天前
HUAWEI A800I A2 aarch64架构服务器鲲鹏920开启虚拟化功能
linux·运维·服务器·显卡·npu·huawei·鲲鹏920
suyong_yq8 天前
使用Vela编译器开发Ethos-U NPU流程导引
ai·嵌入式·arm·npu·ethos-u
MonkeyKing_sunyuhua9 天前
怎么计算vllm启动大模型的并发数
vllm
vincent&lin19 天前
vLLM - GPUModelRunner
人工智能·vllm
叶庭云22 天前
一文了解国产算子编程语言 TileLang,TileLang 对国产开源生态的影响与启示
开源·昇腾·开发效率·tilelang·算子编程语言·deepseek-v3.2·国产 ai 硬件
居7然1 个月前
如何高效微调大模型?LLama-Factory一站式解决方案全解析
人工智能·大模型·llama·大模型训练·vllm
GPUStack1 个月前
昇腾多机推理极速上手:10倍简化的 DeepSeek R1 超大规模模型部署
大模型·llm·昇腾·npu·分布式推理
小毕超1 个月前
使用 EvalScope 对 vLLM 私有化部署 Qwen3-30B-A3B 模型性能压测
vllm·evalscope·qwen3-30b-a3b
skywalk81631 个月前
Ascend C算子开发能力认证考试伴侣-昇腾Ascend C编程入门教程
人工智能·昇腾·ascendc