将PyTorch张量移至GPU时出现段错误(核心已转储)

0 投票
2 回答
137 浏览
提问于 2025-04-13 14:31

我有一台装有RTX 6000 ADA显卡的机器。

之前我们使用的是CUDA版本11.x,我用的是这个镜像:nvcr.io/nvidia/pytorch:21.04-py3(我用的是PyTorch 1.x)。

不过,似乎我们机器上的驱动程序更新到了以下版本 -

通过nvidia-smi命令获取的驱动信息:

NVIDIA-SMI 535.161.07 驱动版本: 535.161.07 CUDA版本: 12.2

现在每次我尝试将一个张量移动到CUDA设备时,都会出现:

段错误(核心已转储)

我猜这可能是CUDA版本的问题,所以我尝试将镜像更新为:nvcr.io/nvidia/pytorch:23.02-py3,这个镜像支持更新的CUDA版本,但问题依然存在。以下是一个导致问题的示例程序:

import torch

tensor_cpu = torch.tensor([1, 2, 3, 4, 5])

print("Tensor device before moving to CUDA:", tensor_cpu.device)

if torch.cuda.is_available():
    device = torch.device("cuda")          
    tensor_cuda = tensor_cpu.to(device)    
    print("Tensor device after moving to CUDA:", tensor_cuda.device)
else:
    print("CUDA is not available. Cannot move tensor to CUDA.")

输出结果是:

Tensor device before moving to CUDA: cpu
Segmentation fault (core dumped)

我该如何解决这个问题?我应该使用哪个正确的镜像(带有PyTorch 1.x)来配合我的显卡?

或者这个问题可能与其他因素有关吗?

2 个回答

0

所谓的 Segmentation Fault,通常是因为在使用原生C语言时,程序试图访问不该访问的内存。

这可能是因为图形驱动、Pytorch版本、CUDA和cuDNN版本不兼容等原因造成的……

如果你检查过所有的兼容性问题,接下来可以看看你的GPU内存分配情况,比如内存泄漏或者内存不足(OOM)。在我的经验中,大多数 Segmentation Fault 是因为GPU内存不足造成的,因为Pytorch有时无法捕捉到内存不足的情况。

1

我觉得问题出在你安装的Pytorch的CUDA工具包版本和你的GPU的计算能力不匹配。如果你查看一下CUDA支持表,你会发现RTX 6000 Ada的计算能力版本是8.9。这个计算版本只支持高于11.8的CUDA SDK版本。

计算能力(CUDA SDK支持与微架构)
在此输入图片描述

但是,根据你使用的镜像,安装的CUDA工具包版本是11.3.0,这低于RTX 6000 Ada所支持的最低版本。换句话说,你应该使用一个带有更高CUDA工具包版本的镜像。

我查看了可用的镜像,从发布版本22-09开始,随附的CUDA工具包版本都等于或高于11.8。第一个符合这个要求的镜像是1.13.0a0+d0d6b1f

撰写回答