服务器双GPU识别难题排查与解决方案

问题现象:明明有两张卡,为何只能看到一张?

很多人在使用配备多块GPU的服务器时,都遇到过这样一个奇怪的现象:通过nvidia-smi命令能看到系统中有两张显卡,但在PyTorch等深度学习框架中运行torch.cuda.device_count时,返回的结果却是1,意味着程序只能识别到一张GPU卡。

服务器两块gpu只有一个显示

这种情况在深度学习开发和模型训练中尤为常见。当你尝试指定使用第二张卡时,系统可能会报错”invalid device…”,意思是说你指定的这张卡不存在。这就像你明明有两把钥匙,却只能用其中一把开门,另一把怎么也插不进锁孔。

环境变量设置不当是最常见原因

经过大量实际案例的分析,这个问题最常见的原因就是环境变量CUDA_VISIBLE_DEVICES的设置有问题。这个环境变量控制着PyTorch进程能够看到哪些GPU设备。

举个例子,如果你的代码中有这样一行:

os.environ[‘CUDA_VISIBLE_DEVICES’] = args.gpu

args.gpu的值是”0″,那么你的代码就只能看到一张GPU(设备0),即使服务器上实际安装了多张卡。之后调用torch.cuda.device_count就只会返回1。

检查真实GPU标号的必要性

这里有个很重要的细节需要注意:通过nvidia-smi查看的显卡标号,有时候会和实际的显卡标号不一样!

为了确认真实的GPU标号,你可以运行以下代码:

a = torch.cuda.get_device_name(0)  # 返回GPU名字
print("a is ", a)
b = torch.cuda.get_device_name(1)
print("b is ", b)
c = torch.cuda.get_device_name(2)
print("c is ", c)
d = torch.cuda.get_device_name(3)
print("d is ", d)

这样你就能知道每张卡的真实身份,避免张冠李戴的情况发生。

两种实用的解决方案

针对这个问题,目前有两种比较可靠的解决方法。

方法一:修改.bashrc文件

第一种方法是在用户的.bashrc文件中进行声明。如果你是两张卡,就在.bashrc文件末尾加上:

export CUDA_VISIBLE_DEVICES=0,1

保存后,需要使用source命令”重启”一下.bashrc文件使得设置生效:

source ~/.bashrc

这种方法的好处是设置一次,长期有效,不需要每次都手动配置。

方法二:在代码中显式指定

第二种方法是在Python代码中直接设置环境变量:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3,4,5,6,7"

这种方法更加灵活,可以根据不同的任务需求动态调整使用的GPU数量。设置完成后,再次运行print(torch.cuda.device_count),应该就能看到正确的GPU数量了。

不仅仅是NVIDIA显卡的问题

这种多GPU识别问题并不是NVIDIA显卡的专利。根据英特尔官方文档,在系统上安装两个英特尔® Arc™ A系列GPU时,锐炫控制面板也将仅显示其中一个的信息。系统信息和性能选项卡将仅显示一个GPU,无法看到第二个GPU的信息。

有趣的是,使用英特尔®图形软件时,这个问题就不再出现了。这说明不同的显卡厂商和驱动软件在处理多GPU显示时,可能存在不同的策略和限制。

实际应用场景中的注意事项

在多用户共享的服务器环境中,正确设置GPU可见性显得尤为重要。很多服务器在进行配备时会装配多块GPU,多个终端可能同时对服务器进行操控,因此需要对特定的GPU进行指定操作,才不会使用户之间使用GPU时相互影响。

比如,当你通过nvidia-smi查看发现第四块GPU(3号GPU)已经有人在满载运行中,如果这时你四块默认同时运行,可能会提示out of memory报错,或者提示显卡不平衡的警告。

问题排查的完整流程

当你遇到多GPU识别问题时,建议按照以下步骤进行排查:

  • 第一步:确认物理连接
    确保两张GPU卡都正确安装且供电充足
  • 第二步:检查驱动状态
    通过nvidia-smi确认两张卡都被系统识别
  • 第三步:验证真实标号
    使用torch.cuda.get_device_name确认每张卡的真实身份
  • 第四步:检查环境变量
    查看CUDA_VISIBLE_DEVICES是否被意外设置
  • 第五步:应用解决方案
    根据实际情况选择修改.bashrc或在代码中显式指定

总结与建议

服务器双GPU只能识别一张的问题,虽然看起来令人困惑,但解决起来并不复杂。大多数情况下,问题都出在环境变量的设置上。

对于长期使用固定GPU配置的用户,建议采用修改.bashrc文件的方法;对于需要频繁切换GPU配置的用户,在代码中动态设置可能是更好的选择。

无论采用哪种方法,重要的是要理解CUDA_VISIBLE_DEVICES环境变量的工作原理,以及如何正确地将系统GPU标号映射到框架可识别的标号。只有这样,才能真正驾驭多GPU的计算能力,为深度学习训练和科学计算提供强大的硬件支持。

内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。

本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/145771.html

(0)
上一篇 2025年12月2日 下午3:09
下一篇 2025年12月2日 下午3:09
联系我们
关注微信
关注微信
分享本页
返回顶部