开发者
资源
执行 npu-smi 命令返回 -8005 错误码的排查与解决

执行 npu-smi 命令返回 -8005 错误码的排查与解决

人工智能应用使能套件

发表于: 2026/06/05

背景概述

在昇腾AI硬件平台的日常维护与调试过程中,用户通过接口调用 npu-smi info 等命令查询NPU状态时,偶发出现返回错误码 -8005 的现象。该错误码表示“DCMI模块初始化失败”,通常与驱动加载异常、内核环境不匹配或模块签名验证失败相关。本文基于实际问题场景,系统梳理了从日志分析到根因定位的完整排查路径,并提供可落地的解决方案,适用于中心训练、中心推理及智能边缘等典型部署环境。

问题现象

在执行带内命令(如 npu-smi infodcmi 接口调用)时,返回错误码 -8005,提示 dcmi module initialize failed,导致无法获取NPU设备的运行状态信息。

原因分析

1. BMC 日志分析

在问题发生时间点,BMC系统无硬件告警记录,未发现物理层异常或设备离线情况。

FDM日志中亦无异常报错,排除了硬件故障或固件异常的可能性。

2. 带内日志与系统状态分析

2.1NPU PCIe链路状态正常

通过 lspci 或相关工具检查NPU PCIe建链状态,确认设备已正确识别,未出现掉卡或链路中断现象。

2.2驱动安装过程无异常

检查 /var/log/ascend_seclog/ascend_install.log,确认驱动安装过程中未报错,安装时使用的内核版本为 5.15.152.bsk.7-arm64,且DKMS功能已启用。

2.3系统内核版本变更记录

进一步分析 message 日志,发现系统在运行期间发生了内核升级:

  • 19:58:系统启动,使用内核 5.15.152.bsk.7-arm64

  • 20:07:内核升级至 5.15.152.bsk.12-sign-arm64

  • 20:20:系统重启,以新内核 5.15.152.bsk.12-sign-arm64 启动

2.4签名验证机制触发异常

在新内核启动后,message 日志中出现如下关键信息:

Loading of unsigned module is rejected

表明当前内核启用了模块签名验证机制(module.sig_enforce=1),而HDK所依赖的 .ko 驱动模块未经过签名,导致加载失败,驱动未初始化,进而引发 dcmi module initialize failed,最终返回 -8005 错误码。

问题根因

系统在运行过程中升级了内核至带签名验证功能的版本(5.15.152.bsk.12-sign-arm64),而该版本启用了模块签名强制校验机制。由于HDK安装包中提供的 .ko 驱动模块未携带有效签名,无法通过校验,导致驱动加载失败,进而使 npu-smi 等接口调用因模块初始化失败而返回 -8005 错误码。

解决措施

针对该问题,提供以下两种可行方案,用户可根据实际环境选择适用方式:

方案一:关闭内核模块签名验证(推荐用于非安全敏感场景)

若系统无需严格的安全启动策略,建议使用无签名验证的内核版本(如 5.15.152.bsk.7-arm64),或临时关闭签名验证机制。

Ubuntu 系统操作步骤

1.检查安全启动状态:

mokutil --sb-state ​

若输出为 Secure boot enabled,说明当前启用了签名验证。

2.禁用安全启动:

通过 BIOS 设置界面,进入 SecuritySecure Boot,将其设置为 Disabled

或通过命令行(需支持)执行:

mokutil --disable-validation ​(需配合 MOK 管理流程完成)

EulerOS 系统操作步骤

1.检查内核启动参数:

cat /proc/cmdline ​

若输出中包含 module.sig_enforce=1,说明启用了模块签名验证。

2.临时禁用(重启后失效)

启动时进入 GRUB 菜单,按 e 编辑启动项,删除包含 module.sig_enforce=1的参数,保存退出。

3.永久禁用编辑 GRUB 配置文件:

sudo vim /etc/default/grub ​

修改:

GRUB_CMDLINE_LINUX="module.sig_enforce=1" ​改为:GRUB_CMDLINE_LINUX="" ​

保存后执行:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 或使用 update-grub(Ubuntu) ​

重启系统后验证:

cat /proc/cmdline | grep module.sig_enforce ​

若无输出,表示已成功禁用。

方案二:为驱动模块添加签名(适用于需保留安全启动的生产环境)

若必须使用带签名验证的内核,需对HDK依赖的 .ko 模块进行签名处理。

1.准备签名工具与密钥(需使用与系统一致的签名证书)。

2.使用 sign-file 工具对 .ko 文件进行签名:

./sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/5.15.152.bsk.12-sign-arm64/updates/driver_name.ko

3.将签名后的 .ko 文件复制至对应目录:

sudo cp driver_name.ko /lib/modules/5.15.152.bsk.12-sign-arm64/updates/

4.重新加载驱动模块:

sudo modprobe driver_name

验证是否可正常调用 npu-smi info 命令。

⚠️ 注意:该方案需具备内核模块签名能力及密钥管理权限,建议由具备安全资质的团队执行。

总结

本案例中,-8005 错误码的根本原因并非驱动本身缺陷,而是由于系统内核升级后引入了模块签名验证机制,导致未签名的驱动无法加载。通过分析日志、核对内核版本变更记录,可快速定位问题本质。

建议在部署与维护过程中:

  • 保持内核版本与驱动安装环境一致;
  • 在启用安全启动的场景下,确保驱动模块具备有效签名;
  • 避免在生产环境中随意升级内核,或提前完成驱动兼容性验证。

本页内容