解决[Unable to determine the device handle for GPU...: Unknown Error]问题

2023-11-02 13:04

本文主要是介绍解决[Unable to determine the device handle for GPU...: Unknown Error]问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务器环境

环境
操作系统Ubuntu-22.04
内核Linux 6.2.0-36-generic
显卡NVIDIA GeForce RTX 3090(2张)

问题描述

跑一个大模型模块的训练时,发现GPU莫名奇妙地挂了,执行nvidia-smi报了如下错误:

Unable to determine the device handle for GPU0000:01:00.0: Unknown Error

而在重启之后,又能执行nvidia-smi显示所有显卡的信息,通过lspci命令查看Linux是否能正常读取PCI总线上挂载的设备,可以看到开机后,两个显卡的信息都是能读取的:

01:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3090] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)
02:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3090] (rev a1)
02:00.1 Audio device: NVIDIA Corporation GA102 High Definition Audio Controller (rev a1)

其中需要注意到后面rev a1信息都是正常的,当发生上诉错误后(即显卡爆出一个未知的错误),其中被使用的显卡,也就显卡1中的rev a1变成了rev ff,无法正常读取

分析

首先考虑的是驱动问题,毕竟一般设备识别不出来,多半是驱动有点小bug。先去检查了原来的驱动,发现装的驱动版本是 535.86.05,比较新的一个版本。按照个人习惯,会选择比当前最新的版本退两三个版本(其实就是怕麻烦,旧一些的版本遇到问题可以从网上找到更多例子,而新版本可能还得官方指定网站去寻求答案),参照网上的安装流程成功地把原有驱动卸载了并装回了525.147.05版本,并尝试继续跑算法,但是没能解决问题。在这里还遇到了另一个问题,也就是图形界面无法正常启动/渲染了,强制重启也没法进入系统了。个人猜测,主要是我更换驱动没做好配套工作,遇到这样的情况,我首先尝试在进入系统前利用ctrl+alt+F1~F10 组合键进入到命令行界面,将现有驱动卸载了并装回原有驱动,成功进入界面(这里只有两个建议 1. 装显卡驱动一定要小心,多看文档再实操;2.备份驱动)。如果还是没法解决,可能就得重装系统了。

随后开始进一步分析问题,从被使用的显卡的版本信息由rev a1-> rev ff知道显卡是在运行时被关闭了,在参考文章1列举的多种问题中,我大致猜到是GPU功率与电源相关的问题了,并从中跳转到了英伟达官网网站对应issue2词条下,发现利用执行如下命令暂时禁掉显卡1后能够执行nvidia-smi获取显卡2的信息了:

$ sudo nvidia-smi drain -p 0000:01:00.0 -m 1

这里的 -m 是指GPU的计算模式,默认是0,即default,;1是指PROHIBITED,即禁止任务在它上面执行。

再利用sudo nvidia-bug-report.sh命令收集显卡的bug信息,从中查找到了与该Issue一致的问题:

Xid (...): 79, pid='<unknown>', name=<unknown>, GPU has fallen off the bus

其中一位大佬提到原因如下:

Running ML workloads will cause heavy spikes in power usage, so rather get a better PSU.

在相关Issue3找到了解决方案,在该issue中大佬提到:

One of the gpus is shutting down. Since it’s not always the same one, I guess they’re not damaged but either overheating or lack of power occurs. Please monitor temperatures, check PSU.

简单来说就是: 多半是过热、缺电。对应的解决方案在下一节给出,也是上面的大佬提到的。

如果你想问PSU是什么,参考文章4

解决方案

执行如下命令调整显卡的时钟速度(实际就是锁住其最大功率):

$ sudo nvidia-smi -lgc 300,1500

-lgc的作用:

    -lgc  --lock-gpu-clocks=    Specifies <minGpuClock,maxGpuClock> clocks as apair (e.g. 1500,1500) that defines the range of desired locked GPU clock speed in MHz.Setting this will supercede application clocksand take effect regardless if an app is running.Input can also be a singular desired clock value(e.g. <GpuClockValue>).

该命令只是临时的,服务器重启后需要重新设置。可以往/etc/rc.local开机自启配置文件,新增这一条命令。

如果没有这个文件,建议根据指定ubuntu 2204、开机自启等关键词从网上查找对应解决方案寻求答案。

参考文章


  1. NVIDIA显卡BUG解决 Unable to determine the device handle for GPU 0000:02:00.0: Unknown Error-CSDN博客 ↩︎

  2. Unable to determine the device handle for GPU 0000:02:00.0: Unknown Error - Graphics / Linux / Linux - NVIDIA Developer Forums ↩︎

  3. GPU fans go to max and graphics drivers hang - Graphics / Linux / Linux - NVIDIA Developer Forums ↩︎

  4. 电源供应器 - 维基百科,自由的百科全书 (wikipedia.org) ↩︎

这篇关于解决[Unable to determine the device handle for GPU...: Unknown Error]问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330793

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如