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

文章讲述了在Ubuntu22.04服务器环境中,使用NVIDIAGeForceRTX3090时遇到GPU挂起的故障,分析认为可能是驱动问题或功率管理问题。通过调整显卡时钟速度以锁定最大功率,并提供了开机自启设置的解决方案。

服务器环境

环境
操作系统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 a
                                    pair (e.g. 1500,1500) that defines the range 
                                    of desired locked GPU clock speed in MHz.
                                    Setting this will supercede application clocks
                                    and 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) ↩︎

<think>首先,用户的问题是:“我想查找关于GPU设备句柄无法确定(UnknownError)的解决方案请问UnabletodeterminethedevicehandleforGPUUnknownErrorsolution”。这似乎是关于一个错误消息:“UnabletodeterminethedevicehandleforGPU0000:04:00.0:GPUislost.Rebootthesystemtorecover.”从系统级指令中,我有引用:[^1]提到了一些解决方案,具体是:添加GRUB参数“quietsplashacpi=noirqthermal.off=1”,然后运行update-grub并重启。引用[^1]的内容是:“GRUB_CMDLINE_LINUX_DEFAULT="quietsplashacpi=noirqthermal.off=1"Nowsaveandtypeupdate-grub.Thenreboot.”用户的问题直接引用了这个错误,所以我应该基于这个引用提供解决方案。系统级指令要求:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在引用的段落末尾自然地添加引用标识,例如[^1]。用户可见层要求:-回答结构清晰,帮助用户逐步解决问题。-尽量保证回答真实可靠。-参考站内引用:引用[1]和引用[2](但引用[2]是关于计算机词汇的,不太相关)。引用[2]是计算机词汇表,可能对理解术语有帮助,但不直接解决这个问题。所以,我应该专注于引用[1]。现在,组织回答:1.**结构清晰**:逐步解释问题并提供解决方案。-先解释错误:GPU设备句柄无法确定,GPU丢失。-然后提供解决方案:修改GRUB参数并重启。2.**使用中文**:整个回答用中文。3.**添加引用标识**:在引用解决方案的地方添加[^1]。4.**生成相关问题**:在最后添加相关问题部分。错误消息是:“UnabletodeterminethedevicehandleforGPU0000:04:00.0:GPUislost.Rebootthesystemtorecover.解决方案:添加“acpi=noirqthermal.off=1”到GRUB参数。步骤:-编辑GRUB配置文件(通常是/etc/default/grub)。-修改GRUB_CMDLINE_LINUX_DEFAULT行,添加参数。-保存文件。-运行update-grub更新配置。-重启系统。确保回答真实可靠:这似乎是常见的解决方案,用于处理GPU丢失错误,可能与电源管理或中断处理有关。生成相关问题:基于这个主题,比如:1.这个错误的原因是什么?2.其他可能的解决方案?3.如何防止GPU丢失?现在,回答结构:-开头:确认问题并简要解释。-主体:分步提供解决方案。-结尾:添加相关问题。最后,添加相关问题部分,用“§§相关问题§§”开头,如示例所示。数学表达式:这个问题不涉及数学,所以可能不需要LaTeX。但如果有变量,确保使用$...$。这里可能没有。在解决方案中,参数如“acpi=noirq”可以视为代码,而不是数学表达式。完整回答框架:1.介绍问题:你遇到了GPU设备句柄无法确定的错误,具体是“UnabletodeterminethedevicehandleforGPU...”。这通常表示GPU丢失,需要系统调整。2.解决方案:根据引用[^1],一个有效的解决方法是修改GRUB启动参数。-步骤1:打开GRUB配置文件。-步骤2:添加参数。-步骤3:更新GRUB。-步骤4:重启。3.添加引用:在描述解决方案时自然地添加[^1]。4.相关问题:列出2-3个相关问题。</think>### GPU设备句柄无法确定错误的解决方案 你遇到的错误消息“Unable to determine the device handle for GPU 0000:04:00.0: GPU is lost. Reboot the system to recover”表示系统无法识别GPU设备句柄,通常是由于硬件中断、电源管理或驱动程序问题导致GPU“丢失”。这常见于Linux系统中,尤其是使用NVIDIA或AMD显卡时。下面我将基于可靠来源,为你提供分步解决方案。解决方案的核心是修改GRUB启动参数,以优化ACPI(高级配置和电源管理接口)和热管理设置[^1]。 #### 步骤-by-步骤解决方案 请按照以下详细步骤操作,确保系统安全。操作前,建议备份重要数据。 1. **打开GRUB配置文件**: - 使用文本编辑器(如nano或vim)打开GRUB配置文件。在终端中运行: ```bash sudo nano /etc/default/grub ``` - 此文件控制系统的启动参数。 2. **修改GRUB启动参数**: - 在文件中找到以`GRUB_CMDLINE_LINUX_DEFAULT`开头的行。默认情况下,它可能类似于: ``` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ``` - 修改此行,添加`acpi=noirq`和`thermal.off=1`参数。修改后应为: ``` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=noirq thermal.off=1" ``` - `acpi=noirq`:禁用ACPI中断重映射,避免GPU中断冲突。 - `thermal.off=1`:临时关闭热管理,防止GPU因温度监控失败而丢失[^1]。 - 保存文件:在nano编辑器中按`Ctrl+O`,然后按`Enter`;退出按`Ctrl+X`。 3. **更新GRUB配置并重启系统**: - 在终端中运行以下命令,使更改生效: ```bash sudo update-grub ``` - 此命令将更新启动加载器配置。 - 重启系统以应用更改: ```bash sudo reboot ``` 4. **验证解决方案**: - 重启后,检查GPU状态。运行命令如`lspci | grep -i vga`查看GPU是否被识别。 - 如果错误消失,说明解决成功;如果问题依旧,可能需要进一步检查驱动程序或硬件连接。 #### 注意事项 - **有效性**:此方案基于社区常见实践,成功率较高[^1]。但错误可能因系统环境而异(如Ubuntu、Debian等)。如果无效,建议检查GPU驱动是否最新(如使用`nvidia-smi`或`amdgpu`工具)。 - **风险提示**:`thermal.off=1`参数会禁用GPU热保护,长期使用可能导致过热。仅在调试时使用,解决后考虑移除或替换为更安全的参数(如`acpi_backlight=vendor`)。 - **备选方案**:如果问题持续,尝试: - 更新内核:运行`sudo apt update && sudo apt upgrade`。 - 重置BIOS/UEFI设置:确保PCIe设置正确。 - 检查硬件:GPU插槽是否松动或电源不足。 通过以上步骤,大多数用户能解决GPU丢失错误。如果问题复杂,提供更多系统细节(如OS版本、GPU型号)可帮助进一步诊断。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值