把一切都重新又梳理学习了一遍,然后发现很多事情其实没必要弄
0. 显卡驱动、nvidia-smi、cuda、nvcc、cuDNN、pytorch、cudatoolkit与它们之间的关系
笔者本人鸟枪换炮了,还是wsl环境香,但是按照官方教程跑完后,遇到了bugRuntimeError:No CUDA GPUs are available,于是强行再把之前一知半解的部分弄明白了。
显卡驱动
:刚需部分,wsl环境下有windows的显卡驱动其实就够用了。
nvidia-smi
:打包在显卡驱动内,装了显卡驱动后可以用来检验是否安装成功的显卡监测工具包。笔者也在wsl中安装了一下,目前没发现有冲突。
cuda
:分为两个cuda。一个是运行时的库,一个是开发用库(学过Java的人可以用jre和jdk来理解)。运行时的库,可以通过pip来安装在python的依赖里(比如cudatoolkit,或者torch+cuu),基本上深度学习代码用这部分就行。开发用的组件,是安装在操作系统中,一般用不到。cuda定义是NVIDIA提供的一种并行计算平台,提供编程接口让代码能在GPU上执行。CUDA有 runtime api和 driver api,两者都有对应的CUDA版本, nvcc --version 显示的就是前者对应的CUDA版本,而 nvidia-smi显示的是后者对应的CUDA版本。参考【CUDA】nvcc和nvidia-smi显示的版本不一致? - 简书 (jianshu.com)
CUDA版本可以通过在~/.bashrc修改path切换:
export CUDA_HOME=/etc/alternatives/cuda
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
cuDNN
:可以被打包在cuda内,cuda相当于是工作台,cuDNN就是插件。非刚需,但是如果代码要用这种深度学习加速就需要。
nvcc
:属于CUDA的编译器,将程序编译成可执行的二进制文件。一般来说如果安装了ubuntu平台上的开发用cuda,就会包含有nvcc(可以把这里的nvcc理解为gcc这种编译器)。
pytorch
:需要根据自己的显卡型号算力来安装合适范围内的torch版本,因为cuda版本一定程度上需要和torch版本兼容。
cudatoolkit
是 NVIDIA CUDA Toolkit 的 Python 包装器。通常可以使用 Python 的包管理工具 pip
或 conda
来完成。
PS:根据开发者的回复:《Would pytorch for cuda 11.6 work when cuda is actually 12.0 - PyTorch Forums》可以得知,当前的pytorch包会自带cuda的二进制文件。所以完全可以不在ubuntu中安装cuda,必须要安装的只有以下三个:
- 显卡驱动
- python
- pytorch+cudatoolkit或者pytorch+cuda(例如上图中的torch+cu117或者pytorch+cudatoolkit,总之是torch附上一个cuda二进制库)
1. 把wsl部分引入
注意,以下部分是在之前用的,有些步骤可能是冗余的,只是目前能跑所以就没管
官方教程:
GPU in Windows Subsystem for Linux (WSL) | NVIDIA Developer
NVIDIA GPU Accelerated Computing on WSL 2
笔者环境为win11+rtx3060,步骤记录如下:
-
在windows系统本身环境下安装对应版本的Geforece驱动,根据官网配置推荐 笔者选择了GeForce Game Ready Driver 531.79
-
安装wsl2(中间好像有坑,把报错必应搜索一下应该就能解决了)
-
进入wsl界面
-
sudo apt-key del 7fa2af80,在这个过程中遇到了apt-key的报错,放着不管也没事,如果想了解一下,可以参考stackOverflow
-
按照官网教程命令安装wsl上的cuda驱动,如果遇到The public cuda-repo-wsl-ubuntu-12-1-local GPG key does not appear to be installed,就按照他提示的执行一次sudo cp /var/cuda-repo-wsl-ubuntu-12-1-local/cuda-8F52B5FE-keyring.gpg /usr/share/keyrings/ ,然后再执行原命令即可【后面发现这一步其实完全可以不做】
-
安装conda/python/torch等包,验证torch.cuda.is_available() PREFIX=/home/tempo/anaconda3
-
然后就可以在wsl上爽玩啦(^▽^)
-
可能遇到的bug与解决方案: RuntimeError:No CUDA GPUs are available,
- conda没写到PATH里面新开窗口找不到conda于是又装了一遍。【后续发现跟wsl的su命令也有关系,su不加用户名之后会进入root的状态,用户文件夹变成了/home,所以conda消失了】
-
后续进阶技能点:Vscode与WSL,pycharm与WSL①,pycharm与WSL②, 在pycharm上配置wsl的conda环境
常用命令记录
# cd到windows的目录(以挂载卷的形式存在的)
cd /mnt/c
#注意:powershell命令 NAME STATE VERSION | Ubuntu Running 2
wsl -l -v
ls -l /usr/local | grep cuda
# lrwxrwxrwx 1 root root 22 May 15 15:22 cuda -> /etc/alternatives/cuda
# lrwxrwxrwx 1 root root 25 May 15 15:22 cuda-12 -> /etc/alternatives/cuda-12
# drwxr-xr-x 15 root root 4096 May 15 15:22 cuda-12.1
nvcc --version
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2021 NVIDIA Corporation
# Built on Thu_Nov_18_09:45:30_PST_2021
# Cuda compilation tools, release 11.5, V11.5.119
# Build cuda_11.5.r11.5/compiler.30672275_0
which nvcc
# /usr/bin/nvcc
which nvidia-smi
# /usr/lib/wsl/lib/nvidia-smi
验证安装的全家桶是否可用
# 版本为:torch==1.10.2+cu113
# 这个cu113是有它的意义所在的……
### '1.5.0'
torch.__version__
### True
torch.cuda.is_available()
### 7605
torch.backends.cudnn.version()
### '10.2'
torch.version.cuda
参考资料:
cuda 和 cudnn 库的卸载与安装 - 知乎 (zhihu.com)
ubuntu解决没有nvcc命令的错误-CSDN博客
NVIDIA/cuda-samples: Samples for CUDA Developers which demonstrates features in CUDA Toolkit (github.com)
Support Matrix - NVIDIA Docs**(官方的cudnn库匹配)**
如何查看cudnn当前版本_Linux 和 Windows 查看 CUDA 和 cuDNN 版本_weixin_39916758的博客-CSDN博客
解决CUDA error: no kernel image is available for execution on the device_图灵机学长的博客-CSDN博客