Pytorch 在 WSL2 上抛出 CUDA 运行时错误

Pytorch throws CUDA runtime error on WSL2

我按照this article安装了Nvidia Windows驱动和CUDA。 安装 Nvidia Windows 驱动程序后,我通过 运行 “/usr/lib/wsl/lib/nvidia-smi”:

检查了 CUDA 版本
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.00       Driver Version: 510.06       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+

然后我就按照这个this article安装了CUDA Toolkit 11.3。在此之后,我通过 运行 “/usr/local/cuda/bin/nvcc --version” 检查了 CUDA Toolkit 版本并得到:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:15:13_PDT_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0

然后我通过pip安装Pytorch:

pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

然后像这样验证手电筒的安装:

import torch
x = torch.rand(5, 3)
print(x)

还有这个:

import torch
torch.cuda.is_available()

到目前为止,一切顺利。但是,当我训练网络并调用损失的 backward() 方法时,torch 会抛出这样的运行时错误:

Traceback (most recent call last):
File "train.py", line 118, in train_loop
  loss.backward()
File "/myvenv/lib/python3.6/site-packages/torch/_tensor.py", line 307, in backward
  torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
File "/myvenv/lib/python3.6/site-packages/torch/autograd/__init__.py", line 156, in backward
  allow_unreachable=True, accumulate_grad=True)  # allow_unreachable flag
RuntimeError: CUDA error: unknown error
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

我多次尝试重新安装 CUDA 工具包,但总是出现相同的错误。有什么建议吗?

通过一些简单的实验,我找到了解决办法。原因是我的 GPU 内存太小 (2GB),无法 运行 相对较大的文本批处理 (32)。当我将批量大小减少到 16 时,训练脚本 运行 很好。

但是,我仍然不知道为什么 CUDA 不能为这种 OOM 错误抛出一个更清晰的异常消息。