将PyTorch张量移至GPU时出现段错误(核心已转储)
我有一台装有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有时无法捕捉到内存不足的情况。