电脑装了pytorch没有安装cuda,nvcc -V没反应,但能正常使用gpu

  • 1.软件环境⚙️
  • 2.问题描述🔍
  • 3.解决方法🐡
  • 4.结论🤔


1.软件环境⚙️

Windows 10 教育版64位
WSL Ubuntu 20.04 LTS
Pytorch 1.7.0
CUDA 11.0

2.问题描述🔍

因为深度学习的原因,相信很多人都是在一块硬盘上面装双系统,如Windows 10+Ubuntu 20.04

最近懒得重启切换系统,所以装了一个WSL(Windows Subsystem for Linux)。具体装的是WSL 2,关于WSL 1WSL 2 之间的主要区别在于,在托管 VM 内使用实际的Linux内核、支持完整的系统调用兼容性以及跨LinuxWindows 操作系统的性能。 WSL 2 是安装Linux发行版时的当前默认版本,它使用最新最好的虚拟化技术在轻量级实用工具虚拟机 (VM) 内运行 Linux 内核:

GPU没有CUDA能下载pytorch吗 没有cuda能运行gpu吗_CUDA

并且WSL2不用重新装显卡驱动,直接使用Windows 10自带的驱动就行。安装WSL2后简单设置并装了必要的包后(如Anaconda),使用Pytorch官网给出的指令使用conda安装:

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch

安装过程很顺利一点错都没有报,但在wsl下使用nvcc -V却报错没有这个命令:

jayce@DESKTOP-BOJNA8J:~$ nvcc -V
Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit

GPU没有CUDA能下载pytorch吗 没有cuda能运行gpu吗_CUDA_02


正常情况下应该会显示cuda的版本,如下(PS:如下命令是在win 10 CMD下使用,返回的是win10独立安装的cuda):

GPU没有CUDA能下载pytorch吗 没有cuda能运行gpu吗_nvcc-V_03

nvidia-smi命令正常:

GPU没有CUDA能下载pytorch吗 没有cuda能运行gpu吗_CUDA_04


nvidia-smi命令没问题,证明wsl能够正确检测到nvidia的显卡驱动,但nvcc -V报错,证明我们的wsl环境里面没有相关的代码。那这个时候又该怎么办呢?

GPU没有CUDA能下载pytorch吗 没有cuda能运行gpu吗_nvcc-V_05

3.解决方法🐡

经过查阅,发现是conda方式安装的Pytorch自带了cuda,因此不需要我们再独立安装cudacudnn

CUDA有两个主要的API:runtime(运行时) API和driver API。这两个API都有对应的CUDA版本(如9.2和10.0等)。

  1. 用于支持driver API的必要文件(如libcuda.so)是由GPU driver installer安装的。nvidia-smi就属于这一类API。
  2. 用于支持runtime API的必要文件(如libcudart.so以及nvcc)是由CUDA Toolkit installer安装的。(CUDA Toolkit Installer有时可能会集成了GPU driver Installer)。nvcc是与CUDA Toolkit一起安装的CUDA compiler-driver tool,它只知道它自身构建时的CUDA runtime版本。它不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。

综上,如果driver API和runtime> API的CUDA版本不一致可能是因为你使用的是单独的GPU driver installer,而不是CUDA Toolkit installer里的GPU driver installer。

这可太方便了!wsl节省了安装nvidia驱动的时间,conda节省了安装cudacudnn的时间,这不变成了傻瓜式深度学习环境安装?
为了测试Pytorch能成功使用GPU,我们实验了如下代码:

>>> import torch
>>> torch.cuda.is_available()
True
>>> print(torch.__version__)
1.7.0
>>> print(torch.version.cuda)
11.0
>>> print(torch.backends.cudnn.version())
8003
>>> print(torch.cuda.nccl.version())
2708
>>> for i in range(torch.cuda.device_count()):
	    device = torch.device(f"cuda:{i}")
	    print(f"Device {i}: {torch.cuda.get_device_name(device)}")
	    print(f"\tGPU设备总内存: {round(torch.cuda.get_device_properties(device).total_memory / 1024 ** 3, 1)} GB")
	    print(f"\tGPU设备可用内存: {round(torch.cuda.memory_allocated(device) / 1024 ** 3, 1)} GB")
Device 0: NVIDIA GeForce RTX 4090
	GPU设备总内存: 24.0 GB
	GPU设备可用内存: 0.0 GB
Device 1: Quadro RTX 6000
	GPU设备总内存: 24.0 GB
	GPU设备可用内存: 0.0 GB

可以看到Pytorch已经能够正常使用GPU了!

4.结论🤔

WSL 2 YYDS!!!


渣男!都看到这里了,还不赶紧点赞评论收藏走一波?