我们在使用多GPU系统时遇到了CUDA设备不可用的问题,详细情况如下:
问题描述: 我们在一台配备有8块NVIDIA GeForce RTX 3090显卡的服务器上运行CUDA程序时,遇到了如下错误:
cudaErrorDevicesUnavailable: CUDA-capable device(s) is/are busy or unavailable
使用 nvidia-smi 命令检查时,发现所有GPU的利用率为0。
系统配置:
操作系统:Windows 11
GPU型号:NVIDIA GeForce RTX 3090 x 8
驱动程序版本:556.12
CUDA工具包版本:12.5
我已尝试的解决方案:
检查GPU状态: 使用 nvidia-smi 查看当前GPU的使用情况,所有GPU的利用率为0。
重启系统: 多次重启服务器,但问题依旧存在。
确认管理员权限: 以管理员身份运行命令提示符和相关程序。
检查并更新驱动程序: 确保安装了最新的NVIDIA驱动程序,并重新安装了CUDA工具包,版本匹配且为最新。
限制使用特定GPU: 修改环境变量 CUDA_VISIBLE_DEVICES 限制CUDA程序只使用特定的GPU进行测试,问题依旧。
终止不必要的进程: 使用 nvidia-smi 查看并终止了所有可能占用GPU资源的进程,仍未解决问题。
检查和调整BIOS设置(没有尝试,但是在CUDA版本修改之前就是禁用集成显卡的,任然出现该问题): 进入BIOS/UEFI,确保所有PCIe插槽设置为“Auto”或“Gen3”,并禁用了所有不必要的集成显卡。
测试其他CUDA示例程序: 使用CuPy和PyTorch编写并运行其他简单的CUDA程序,均出现相同错误。
以下是我们使用的测试代码和错误信息:
import os
import cupy as cp
os.environ['CUDA_VISIBLE_DEVICES'] = '0' # 只使用第一个GPU
try:
start = cp.cuda.Event()
end = cp.cuda.Event()
print("CUDA event created successfully.")
del start
del end
print("CUDA event destroyed successfully.")
except cp.cuda.runtime.CUDARuntimeError as e:
print(f"CUDA error: {e}")
device = cp.cuda.Device(0) # 使用第一个GPU
try:
free_memory, total_memory = device.mem_info
print(f"Device 0: Free Memory: {free_memory / (1024 ** 2):.2f} MB")
print(f"Device 0: Total Memory: {total_memory / (1024 ** 2):.2f} MB")
except cp.cuda.runtime.CUDARuntimeError as e:
print(f"CUDA error: {e}")
错误信息:
cudaErrorDevicesUnavailable: CUDA-capable device(s) is/are busy or unavailable
我们已尝试了多种解决方法,但问题仍未解决。