【wsl2 windows10/11 安装 配置cuda及pytorch】

wsl2 windows10/11 安装 配置cuda及pytorch

参考文献

Windows 11/10 WSL2 Ubuntu 20.04 下配置Cuda及Pytorch

官方安装wsl2
官方wsl2连接gpu
这篇文章基本上就是上面一些文章的综合,我本来是不打算发的,但鉴于我实在是参考了太多的经验贴也没能在第一次彻底解决我的问题,为此我甚至付出了一个系统的代价。最终才在目前成功实现。我会尽可能描述自己遇到的问题及给出自己的解决方案,大部分人其实按照上面的来就没有什么问题,但如果未能解决,可以来参考这篇文章。

安装wsl2 ubuntu20.04

安装wsl2非常简单,微软官方只给了一条命令,这条命令将默认安装wsl2及ubuntu20.04的子系统到你的电脑上。
打开cmd输入

wsl --install

你可以指定你想安装的版本通过

wsl --install -d<Distribution Name>

其中Distribution Name为发行版的名称
你可以在在线商店查看可以安装的版本

wsl --list --online
或
wsl -l -o

安装完成后,(可能需要重启才能出现,但不绝对)可以通过下面查看安装版本号

wsl -l -v

如果不行,推荐可以看别的博客的老方法,参考文献里就有,在此我就不做赘述了。

安装wsl cuda驱动

去cuda官网下载 wsl的驱动。根据自己的显卡的版本下载即可。顺带一提,本人的显卡型号是GTX1050。大家可以参考一下。
下方是对应的链接。
CUDA ON WSL

https://developer.nvidia.com/cuda/wsl/download

下载好的安装包是GUI安装的,看需不需要自定义安装.一般情况下默认安装即可,在此强调一下,wsl是默认装在C盘的,如果想使用wsl linux子系统并连接GPU,最好准备好充足的空间。安装完成后,我们可以通过cmd命令行窗口输入“nvidia-smi”查看。我不太会作漂亮的窗口,就借参考文献里的结果展示下安装成功大致的界面。

PS C:\Users\TF> nvidia-smi       #注意这里是WIN10/11的命令,如果你在WSL的终端里面没有结果,别慌
 
Thu Dec 23 18:14:18 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.06       Driver Version: 510.06       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ... WDDM  | 00000000:01:00.0 Off |                  N/A |
| N/A   43C    P0    14W /  N/A |    134MiB /  4096MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

这里遇到第一个坑,也是我写这个帖子最关键的坑,很多经验贴也许运气较好,没能碰到我下面的问题,但我有必要强调一下,哪怕只能告诉一点点和我处境类似的人。解决让他们头疼的问题。
接下来,请打开你的wsl界面,在控制台输入wsl或者打开你的最近安装的Ubuntu子系统都可以,请同样输入上述代码

nvidia-smi

如果你成功出现了和windows控制台一样的界面,那么我恭喜你,你可以接着往下看了,这个标题的内容你已经不需要阅读了。但如果是win10的话,你有很高的概率会出现问题,未能成功的显示上述界面。无论你遇到了什么样的问题,无论是

$ nvidia-smi       #wsl2无法输出nvidia驱动信息
Failed to initialize NVML: GPU access blocked by the operating system
Failed to properly shut down NVML: GPU access blocked by the operating system

还是NO moudle named nvidia ,please install ……。
切记不要安装ubuntu的驱动,尤其是下面这个建议安装某某某的报错,wsl2本身便是为了将linux作为windows的子系统而诞生的,再安装一个ubuntu的nvidia驱动是绝对错误的。
解决上述问题的方法有两个,一个是直接升级win11,再更新一下下载的wsl2基本上就可以解决。不得不说win11这方面比win10强的多,虽然cpu占用也大得多就是了。
更新wsl2

wsl --update

如果你和我都是win10,并且遇到的是第二种情况Please install这种,那下面就要开始工作了。
首先请更新你的wsl2,确保拥有的是最新的内核,非要一个确切版本,在目前官网的版本是这样的版本5.10.43.3及更高版本。接下来请再次在ubuntu子系统尝试nvidia-smi看能否出现界面。如果wsl2已经更新完毕仍然不能解决问题,那么说明你的windows系统较老,请更新你的windows系统,在设置->windows更新->高级选项 勾选更新windows时接受其他MIcrosoft产品的更新。【wsl2 windows10/11 安装 配置cuda及pytorch】
或者你可以去windows官网直接下载更新包将你的windows直接更新到最新版本,这种方法我没尝试,可以参考其他经验贴。
其实这个本来是需要加入预览计划才可行的似乎,但是windows似乎已经更新到了可以将显卡数据反馈到wsl中去了,起码我自身是通过更新可行的,所以我们只需要通过不断的windows更新即可。
在此有个很重要的点,我们这种windows更新不是一簇而就的,也就是说你要不断的检查更新,重启电脑,直至你的ubuntu子系统可以显示出界面(问题解决),或者你的windows已经是最新了为止(这意味着上述条件可能哪里有缺失,或者是其他的本人未知问题)。
linux系统显示成功界面


$ nvidia-smi       #这表示显卡确实可以被Linux子系统检查到了
Thu Dec 23 18:27:28 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 Off |                  N/A |
| N/A   44C    P0    14W /  N/A |    134MiB /  4096MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

至此,wsl2最难的问题已经基本解决了,剩下无论是参照其他经验贴,亦或者本帖都可。

安装CUDA Tollkit

最新版CUDA

CUDA历史版本(根据个人需要)
【wsl2 windows10/11 安装 配置cuda及pytorch】
官网下方有需要输入的代码,本人使用的是network版,代码直接一步步输入就好,应该不会有什么大问题。在这里就不贴了。

安装cuda完成后,要配置wsl2内部的环境变量。

sudo vim ~/.bashrc #打开环境文件
# 将这三行复制到底部,根据下载的cuda,变量名可适当更改
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 更新配置文件
source ~/,bashrc
# 更新可能需要的依赖(可能不需要)
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
# 检查是否安装成功
nvcc -V

成功界面
···
$ nvcc -V
nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2021 NVIDIA Corporation
Built on Fri_Dec_17_18:16:03_PST_2021
Cuda compilation tools, release 11.6, V11.6.55
Build cuda_11.6.r11.6/compiler.30794723_0
···
如果到这步为止,能出现这个界面以及之前的linux的nvidia-smi的界面,基本上问题就不大了,剩下就基本只剩下pytorch的问题了。

配置cudnn

光有cuda,还不足以使我们可以使用电脑的GPU,cuda需要与其配合的使用工具。以方便我们的代码可以被显卡使用并返回结果,这就是cudnn的作用。
cudnn安装
需要你登录一个账号,没有的话就注册一个吧。
请安装适合你cuda的cudnn版本。
本人安装的cuda是11.6,而目前cudnn最新只有11.5,经本人测试,完全可行。
【wsl2 windows10/11 安装 配置cuda及pytorch】
你可以选择你喜爱的路径下载,不必强求在C盘,wsl2可以访问所有路径。
用Ubuntu命令cd进该文件的文件夹。执行如下指令

#以下是安装命令
tar -zxvf cudnn-自己补全版本号.tgz
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-11.6(自己检查具体的版本修改路径)/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda-11.6(自己检查具体的版本修改路径)/include/
 
#为更改读取权限:
sudo chmod a+r /usr/local/cuda-11.6(自己检查具体的版本修改路径)/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.6(自己检查具体的版本修改路径)/lib64/libcudnn*

如果你是使用cuda11.6以下的版本,你可以去检测cuda是否可以运行,参考文献的帖子里有,但cuda11.6移除了检验的文件夹内容,所以检验不了,为了检验而将其下载回来大可不必。
上述命令执行完,加上前面步骤都很顺利完成目标的话,这里已经可以默认没有问题了。

连接pytorch GPU

接下来是第二个难点,pytorch连接上gpu,我们做了这么多,就是为了可以用gpu来训练我们的模型,我们首先需要安装anaconda,如果你电脑里没有,那么可以在该教程下面找到Anaconda安装经验。
进入pytorch官网
本人界面选择如下:
【wsl2 windows10/11 安装 配置cuda及pytorch】
我们安装的是CUDA11.3的pytorch,这个下载很慢,但推荐还是从官网下载,国内镜像源有较高概率下的是cpu版,到时候还得卸载得不偿失。不过官网下载奇慢,推荐使用魔法连接,这里就看各位各显神通了,当然不用魔法也可以下,只是会非常慢。
下载的时候,建议conda新创建一个环境,来适应自己的项目,毕竟base就一个,整坏了就麻烦了。
进入你下载的pytorch的conda环境中
输入:

python
import torch
torch.__version__#检查版本
torch.cuda.is_available()#非常关键的一步,返回为True说明配置成功。不行的话,如果前面都没有问题的话,就试着用pip下载pytorch,或者更改pytorch版本。

图片显示如下:
【wsl2 windows10/11 安装 配置cuda及pytorch】
至此,wsl2完成配置cuda及pytorch成功。接下来就可以使用了。

ANACONDA安装

anaconda官方下载连接
往下翻页找到linux版anaconda下载。
【wsl2 windows10/11 安装 配置cuda及pytorch】
同cudnn一样,你可以将它下载到自己喜欢的位置。接下来用ubuntu子系统cd进入该文件的存放位置。
输入:

bash Anaconda3xxx.sh # xxx为自己下载的版本

然后剩下的安装界面,如非特殊需求,直接yes,enter默认安装即可。
在此强调可以直接进行安装,安装会默认安装进子系统里面的,不必将其移至子系统再进行安装。
安装完成后,输入conda。出现如下界面说明安装成功。
【wsl2 windows10/11 安装 配置cuda及pytorch】
anaconda可以创建新的环境,默认环境是base,
你可以通过如下代码创建新环境

conda create -n yourEnvName python=x.x

可以通过下列代码查看已有环境

conda info -e

激活已有环境

conda activate youEnvName

后话

这个安装说难不难,搞明白了也就那样,但是我确实曾经搞了两天,确实不能说是简单,我按win11的时候,问题会少很多,麻烦的问题主要在win10方面,对版本有一定的要求,请务必注意,这篇文章就当个纪念吧。

上一篇:B/S端界面控件DevExtreme ASP.NET MVC入门指南 - 如何添加项目


下一篇:Ubuntu使用wget连接github时报错:“无法连接SSL链接”等