快速定位npu-smi报错dcmi module initialize failed, ret is -8005
2024/02/22
4.7k
问题信息
问题来源 | 产品大类 | 产品子类 | 关键字 |
---|---|---|---|
官方 | 安装部署 | 驱动固件 | npu-smi、dcmi module、8005 |
问题现象描述
npu-smi报错dcmi module initialize failed, ret is -8005
原因分析及解决措施
- 当前环境中的卡未烧写efuse安全启动,而安装包带安全启动。
确认方法
- 执行/usr/local/Ascend/driver/tools/msnpureport导出device侧日志,参考msnpureport工具参考。
- 进入“{$时间戳}/hisi_logs/device-0/{时间戳}/snapshot”路径查看“dhr.log”内是否有“non-sec boot! ”字样。
- 如果有说明该卡没有烧写efuse安全启动,安装添加安全启动签名的包是无法加载卡驱动的。
解决措施
请参考[解决方法]。
- linux内核被不经意升级后,驱动跟现有内核版本不匹配导致。
- 在IBMC确认是否有两个内核,或者在路径/usr/src下直接查看内核文件版本是否有两个及以上。
- 执行uname -r确认现内核版本。
- 打开ascend安装记录“/var/log/ascend_seclog/ascend_install.log”查看驱动安装时的内核版本。
- 若3中内核版本与2中不一致,则可以确认linux内核被升级后驱动跟现有内核版本不匹配导致。
解决措施
- 重装驱动,驱动会自动rebuild对现有的内核版本适配安装。
- 直接安装内核头。
yum install kernel-devel #Cento
apt-get install -y linux-source #Ubantu
- 为防止随意非主观apt更新内核版本;永久在宿主机上规避这类问题产生,参考如何阻止apt更新Linux内核。
- docker环境下发生,可能映射过来的npu卡被占用,且npu卡未设置共享模式(D710暂时不支持)。
- docker容器环境下发生,且环境上有其他容器运行,(或其他容器启动进程未终止)。
- 用容器/镜像的元数据来排查卡是否被占用。
docker inspect {$CONTAINER ID} | grep "ASCEND_VISIBLE_DEVICES"
或执行以下脚本查询宿主机上所有docker对昇腾卡占用情况。
if [ $(docker ps | wc -l) -gt 1 ]; then docker ps | grep -v CONT | awk '{print $1}' | xargs docker inspect --format='{{printf "%.5s" .ID}} {{range .HostConfig.Devices}}{{.PathOnHost}} {{end}}' | sort -k2; fi; echo ok
CONTAINER ID 通过docker ps 获取,如本次挂载的是宿主机npu物理卡0,那么如果其他容器中inspect过滤出的ASCEND_VISIBLE_DEVICES字段中但凡有0或者0~x区间就可以确定是被占用所导致的。
解决措施
查看使用卡的型号是否支持npu共享模式,如果不,那就只能两个容器二选一,或者做卡的切分操作(谨慎使用)。