华为昇腾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报错的解决方案这篇博客中找到了问题根源——内核自动升级导致驱动失效。

在这里插入图片描述

驱动状态诊断

当前内核版本确认

首先需要确认系统当前运行的内核版本以及已安装的所有内核版本。使用以下命令进行查询:

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驱动的安装目录:

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

在这里插入图片描述

接着查看内核模块目录:

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文件:

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驱动模块

/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驱动模块

/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驱动模块

/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-generic2024-07-19 06:28rc (已删除)✅ 完整✅ 有/updates/24个最早的有驱动版本
5.15.0-131-generic2025-02-26rc (已删除)❌ 简化❌ 无-0-
5.15.0-133-generic2025-03-06rc (已删除)❌ 简化❌ 无-0-
5.15.0-134-generic2025-03-27rc (已删除)❌ 简化❌ 无-0-
5.15.0-135-generic2025-04-01rc (已删除)❌ 简化❌ 无-0-
5.15.0-136-generic2024-04-23 06:04rc (已删除)❌ 简化❌ 无-0-
5.15.0-138-generic2024-05-07 06:21rc (已删除)❌ 简化❌ 无-0-
5.15.0-139-generic2024-05-17 06:24rc (已删除)❌ 简化❌ 无-0-
5.15.0-140-generic2024-06-05 06:22rc (已删除)❌ 简化❌ 无-0-
5.15.0-141-generic2024-06-21 06:48rc (已删除)❌ 简化❌ 无-0-
5.15.0-142-generic2024-07-02 06:24rc (已删除)❌ 简化❌ 无-0-
5.15.0-143-generic2024-07-31 06:02rc (已删除)✅ 完整✅ 有/updates/24个可用版本
5.15.0-144-generic2024-08-19 06:46rc (已删除)✅ 完整✅ 有/updates/24个推荐使用
5.15.0-151-generic2024-09-25 06:22rc (已删除)❌ 简化❌ 无-0-
5.15.0-152-generic2024-08-30 06:05rc (已删除)❌ 简化❌ 无-0-
5.15.0-153-generic2024-09-24 08:21ii (已安装)✅ 完整❌ 无-0当前运行,无驱动
5.15.0-156-generic2024-10-03 06:53rc (已删除)❌ 简化❌ 无-0-
5.15.0-157-generic2024-10-03 06:51ii (已安装)✅ 完整✅ 有/updates/dkms/24个最新版本,有驱动

Ascend驱动模块清单

完整的Ascend NPU驱动包含24个内核模块:

序号模块名称功能说明
1drv_devdrv_host.ko设备驱动主模块
2drv_pcie_host.koPCIe主机接口
3drv_pcie_hdc_host.koPCIe HDC主机
4drv_davinci_intf_host.koDaVinci接口主机
5ascend_dms_smf.koDMS SMF模块
6drv_seclib_host.ko安全库主机
7ascend_xsmem.ko扩展共享内存
8ascend_urd.koURD模块
9drv_vascend_stub.kovAscend存根
10ascend_logdrv.ko日志驱动
11drv_vpc_host.koVPC主机
12drv_virtmng_host.ko虚拟管理主机
13drv_devmng_host.ko设备管理主机
14ascend_event_sched_host.ko事件调度主机
15drv_devmm_host.ko设备内存管理主机
16drv_vascend.kovAscend驱动
17drv_dp_proc_mng_host.koDP进程管理主机
18ascend_dms_dtm.koDMS DTM模块
19drv_tsdrv_platform_host.koTS驱动平台主机
20ascend_uda.koUDA模块
21ascend_queue.ko队列模块
22drv_soft_fault.ko软件故障处理
23drv_pcie_vnic_host.koPCIe vNIC主机
24ascend_soc_resmng.koSOC资源管理

解决方案选择

推荐方案:回退到 5.15.0-144-generic

选择理由:

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

备选方案:使用 5.15.0-157-generic

优点: 最新的内核版本,有驱动模块(在 updates/dkms/ 下)
缺点: 需要测试稳定性

驱动回退实施

GRUB配置修改

首先编辑GRUB配置文件:

sudo vi /etc/default/grub

原始配置内容:

# 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"
~

修改以下行:

#GRUB_DEFAULT=0
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-144-generic"
GRUB_TIMEOUT=10

应用GRUB配置

更新GRUB配置:

sudo update-grub

在这里插入图片描述

系统重启验证

重启系统:

sudo reboot

重启后验证驱动是否正常:

npu-smi info

在这里插入图片描述

可以看到NPU设备信息已经正常显示,驱动问题得到解决。

防止内核自动升级

为了避免类似问题再次发生,需要禁用内核的自动升级。

锁定内核版本

执行以下命令锁定当前使用的内核版本,防止手动误操作升级:

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 才能再次升级

禁用系统自动升级

防止系统在后台自动升级内核:

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 仍然可以升级所有包

在这里插入图片描述

未来升级策略

当确定需要升级内核时(比如安装了新的驱动),可以按以下步骤操作:

# 解锁内核版本
sudo apt-mark unhold linux-image-generic linux-headers-generic

# 执行升级
sudo apt update
sudo apt upgrade

# 重新为新驱动编译或重新锁定

vLLM框架部署尝试

在解决了驱动问题后,接下来尝试在华为NPU服务器上部署vLLM框架。然而这台服务器的主要问题是硬件过于陈旧——使用的是上古时代的310P3,并不在vLLM支持设备列表当中。尽管如此,还是按照安装教程进行尝试。

Python环境配置

首先创建Python虚拟环境:

conda create -n vllm-ascend-env python=3.11
conda activate vllm-ascend-env

CANN工具包安装

安装CANN所需的基础依赖:

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/):

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对应的包进行安装:

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包源:

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会报错:

ERROR: No matching distribution found for torch-npu==2.7.1.dev20250724

由于这个 torch-npu==2.7.1.dev20250724 是一个开发版本,不在公开的 PyPI 上发布。因此尝试使用最接近的稳定版本:

pip install torch-npu==2.8.0rc1

接下来使用--no-deps跳过依赖检查:

pip install vllm-ascend==0.11.0rc0 --no-deps

在这里插入图片描述

基础功能验证

简单测试vLLM是否能正常运行:

在这里插入图片描述

基础功能看起来没有问题,接下来尝试加载本地模型进行测试。

模型加载问题排查

NumPy版本兼容性问题

首先尝试运行本地的Qwen3-8B-AWQ模型:

vllm serve Qwen3-8B-AWQ

在这里插入图片描述

报错的关键信息是:

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版本:

# 卸载当前的 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'.

安装所有缺失的依赖:

# 安装所有缺失的依赖
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 层的配置。由于不确定是否是模型量化导致的问题,因此决定换用非量化模型进行测试。

切换非量化模型测试

使用非量化的小模型进行测试:

vllm serve Qwen2.5-0.5B-Instruct/

在这里插入图片描述

这次错误是 CANN 编译器缺少 C++ 标准库头文件

fatal error: 'cstdint' file not found

这是 CANN 工具包的 C++ 编译环境配置问题。CANN 的算子编译需要 C++ 标准库,但系统环境变量没有正确配置,导致编译器找不到 cstdint 等标准头文件。

C++编译环境配置

解决C++编译环境问题:

# 确保系统有完整的 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信息:

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软件页,选择对应版本下载。但会发现商业版无法下载,因此需要前往社区版下载对应的包:

在这里插入图片描述

驱动升级执行

参考固件升级指导书进行升级操作:

# 查看当前环境的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,但通过升级到支持的硬件和对应的驱动版本,为后续的深度学习框架部署奠定了基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊城迷鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值