WSL2 Pytorch - RuntimeError: No CUDA GPUs are available with RTX3080 WSL2 Pytorch - 运行时错误:RTX3080没有可用的CUDA GPU

10

我曾经苦苦挣扎数日,试图在使用RTX 3080的WSL2上使torch工作。

我安装了CUDA-toolkit 11.3版本。

运行nvcc -V返回如下信息:

nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Mar_21_19:15:46_PDT_2021
Cuda compilation tools, release 11.3, V11.3.58
Build cuda_11.3.r11.3/compiler.29745058_0

nvidia-smi 返回以下结果

Mon Nov 29 00:38:26 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.00       Driver Version: 510.06       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
| N/A   52C    P5    17W /  N/A |   1082MiB / 16384MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

我用blackscholes验证了工具包的安装

./BlackScholes
[./BlackScholes] - Starting...
GPU Device 0: "Ampere" with compute capability 8.6

Initializing data...
...allocating CPU memory for options.
...allocating GPU memory for options.
...generating input data in CPU mem.
...copying input data to GPU mem.
Data init done.

Executing Black-Scholes GPU kernel (512 iterations)...
Options count             : 8000000
BlackScholesGPU() time    : 0.242822 msec
Effective memory bandwidth: 329.459087 GB/s
Gigaoptions per second    : 32.945909

BlackScholes, Throughput = 32.9459 GOptions/s, Time = 0.00024 s, Size = 8000000 options, NumDevsUsed = 1, Workgroup = 128

Reading back GPU results...
Checking the results...
...running CPU calculations.

Comparing the results...
L1 norm: 1.741792E-07
Max absolute error: 1.192093E-05

Shutting down...
...releasing GPU memory.
...releasing CPU memory.
Shutdown done.

[BlackScholes] - Test Summary

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

Test passed

当我尝试使用torch时,它无法找到任何GPU。顺便说一下,如果我想要在我的RTX 3080上使用torch,我必须安装torch==1.10.0+cu113,因为简单的1.10.0版本与rtx3080不兼容。

运行torch会返回以下结果:

>>> import torch
>>> torch.version
<module 'torch.version' from '/home/snihar/miniconda3/envs/tscbasset/lib/python3.7/site-packages/torch/version.py'>
>>> torch.version.cuda
'11.3'
>>> torch.cuda.get_arch_list()
[]
>>> torch.cuda.device_count()
0
>>>  torch.cuda.current_device()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/snihar/miniconda3/envs/tscbasset/lib/python3.7/site-packages/torch/cuda/__init__.py", line 479, in current_device
    _lazy_init()
  File "/home/snihar/miniconda3/envs/tscbasset/lib/python3.7/site-packages/torch/cuda/__init__.py", line 214, in _lazy_init
    torch._C._cuda_init()
RuntimeError: No CUDA GPUs are available

有趣的是,我最终成功在同一台设备上运行tensorflow-gpu。

像这样安装pytorch:conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

此外,我还成功地在WSL2机器启动的docker容器中运行了pytorch,使用以下命令:

sudo docker run --gpus all -it --rm -v /home/...:/home/... nvcr.io/nvidia/pytorch:21.11-py3.  

当我在运行Windows机器上的PyTorch时,我也在运行WSL。两者都返回 ['sm_37', 'sm_50', 'sm_60', 'sm_61', 'sm_70', 'sm_75', 'sm_80', 'sm_86','compute_37'],表明该库与RTX 3080兼容。


1
print(torch.__version__) 的输出是什么?你有可能安装了一个仅支持 CPU 的 PyTorch 版本吗? - Shai
实际上,我在Windows环境下尝试了pytorch,并从网站安装了conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch。例如,返回此软件包: pytorch 1.10.0 py3.7_cuda11.3_cudnn8.2.0_0 pytorch在我的Windows机器上,我也有11.3工具包,在调用get_arch_list()时返回:['sm_37', 'sm_50', 'sm_60', 'sm_61', 'sm_70', 'sm_75', 'sm_80', 'sm_86', 'compute_37']。 在WSL2机器上也是一样的,返回一个空列表。 - harold
给其他可能以我相同方式进入这里的人一个快速提示;我遇到了这个原始问题,但发现我需要使用sudo来运行nvidia-smi。在将自己添加到video组之后,我可以在没有root权限的情况下运行nvidia-smi,而且初始问题也解决了。 - sh1
5个回答

4
在我的情况下,我通过将/usr/lib/wsl/lib/libcuda.so.1链接到wsl2 CUDA位置中的 libcuda.so 来解决了这个问题。参见https://github.com/microsoft/WSL/issues/5663。重启后,pytorch可以找到GPU。
(在apt-get upgrade命令期间,我发现“/usr/lib/wsl/lib/libcuda.so.1不是一个符号链接”的警告。不确定您能否以同样的方式解决它)降级到pytorch 1.8.2LTS也可以解决该问题,但计算速度极慢。

在解决这个问题上花费了半天时间,终于解决了!谢谢! - xabush
1
我使用了链接问题中提到的命令 sudo ln -s /usr/lib/wsl/lib/libcuda.so.1 /usr/local/cuda/lib64/libcuda.so - Rashi Abramson

3

我遇到了相同的问题,通过将PyTorch从1.10降级到1.8.2LTS解决了这个问题。


2
当我运行命令sudo ldconfig时,我收到了与@Homer Simpson相同的警告。
我采用了与@Homer Simpson相同的处理方式。实质上,你需要做的是删除libcuda.solibcuda.so.1,然后重新创建它们,但这一次要将符号链接创建到libcuda.so.1.1
# Run CMD in Windows (as Administrator)
C:
cd \Windows\System32\lxss\lib
del libcuda.so
del libcuda.so.1
mklink libcuda.so libcuda.so.1.1
mklink libcuda.so.1 libcuda.so.1.1

# Open WSL bash
wsl -e /bin/bash
sudo ldconfig

参考文献:https://github.com/microsoft/WSL/issues/5548#issuecomment-912495487

此问题是由于WSL增加了一个新的功能,用于处理特定情况下的文件系统访问权限。但是,在某些情况下,这可能会导致ACL(访问控制列表)设置丢失,而ACL是用于管理文件和目录访问权限的重要组成部分。解决此问题的方法是在Windows上更新到最新版本,并确保已安装WSL的最新版本。如果这没有解决问题,则可以尝试手动重新应用ACL设置。

0

简短版:使用 cuda 11.1 或更低版本安装 PyTorch

长版:不幸的是,我无法解释为什么会出现这种情况,但在尝试了不同的发行版版本(ubuntu 和 debian)和 PyTorch 版本(pip 和 conda)后,似乎只有 conda 上附带的 cuda 11.3(是唯一的 11.x cuda)无法工作(cuda 10.2 可以正常使用)。

解决方法:必须使用 pip 根据官方先前的 PyTorch 版本页面提供的所需要的版本进行安装。

截至撰写本文时,在 WSL2 上可使用以下命令安装最高的 PyTorch 版本和最高的 cuda:

pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 -f https://download.pytorch.org/whl/torch_stable.html

0
请注意,您需要使用cmd.exe而不是powershell,因为mklink是cmd.exe的一部分,而不是一个实际的程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接