当前位置: 首页>移动开发>正文

WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建

wsl即适用于Windows的Linux子系统支持几种常见的Linux系统,我主要用了ubuntu2004。


WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第1张
  1. 确实很方便,Windows下直接可以打开Linux环境,
  2. 显卡直通,Linux子系统直接可以认出Nvidia显卡,不用额外装驱动,这个好像用其他虚机做不到。并且在子系统里跑cuda任务,可以直接在Windows任务管理器做性能监控,感觉还是方便的。
  3. Linux子系统可以从/mnt直接读取Windows盘符,例如读取d盘的download的目录:
cd /mnt/d/download

1. 系统环境要求

  1. 我用的win11,没怎么在意操作系统要求,直接就是满足的,貌似专业版和家庭版都可以。

  2. 控制面板->程序和功能->启用或关闭windows功能,打开三个项目:

    • 虚拟机平台
    • 适用于Linux的Windows子系统
    • Windows虚拟机监控服务平台(我没开、没问题) ,这个据说主要解决多个hypervisor共存问题,比如vmware+hyper-v


      WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第2张

2. WSL2操作(大多是命令行)

2.1 安装wsl

理论上在管理员权限下命令提示符运行:

wsl --update

即可。

一些文章要求手动执行两个dism命令,但如果不出问题应该可以不用执行。

#开启Windows Subsystem for Linux
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestar
#开启虚拟机特性
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

2.2 建议直接将默认版本设置为WSL 2(但可能不做这一步默认也是2)

wsl --set-default-version 2

2.3 检查版本或状态信息

wsl --status
wsl --version
wsl -l -v(主要是验证安装的)

在大多数情况下WSL2比1好,比如有完整的Linux内核等等。WSL1明显的好处只有一条:
从 Linux子系统中访问 windows 中的文件时,仍然是 WSL1 快。

2.4 安装Linux子系统

推荐直接到Windows Store中直接搜,比如Ubuntu 20.04等。


WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第3张

也可以用命令行通过网络安装,比如先列出可用的Linux发行版:

wsl --list --online
#或者
wsl --install

但我运行连接不上,参考其他文章,至少需要改DNS,或者之间那个啥。
基本安装指令:

wsl --install  <发行版名称>

列出已经安装的子系统:

wsl --list --verbose
或
wsl -l -v

但是上述两种安装方法,对后续的维护貌似是有差别的:

  • 用windows store做安装,后续有也可以直接在图形界面删除这个实例。
  • 用命令行方式安装,卸载仍然要使用命令行方式,否则重装实例时会出错:
wsl.exe --unregister Ubuntu-20.04

这里没怎么做测试,可能用store安装之后,后续也需要unregister

2.5 修改安装位置

默认的安装位置:

<用户文件夹>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_<随机数>

最后一段总之是CanonicalGroupLimited开头的、很长的一个名字。在里面可以找到以一个名为LocalState文件夹,里面有个会有一个几十GB的vhdx文件,这个应该就是虚拟磁盘了。
修改安装位置理论上有两种方式,一个是安装之前设定工作目录(还没测试):

wsl --cd <Directory>

或者采用后文介绍的快照回滚方法,在进行回滚(import)时,可以指定一个新的位置。

2.6 启动镜像

可以在开始菜单找图标,或者在命令行执行:

wsl -d Ubuntu-20.04

貌似直接在命令行写名字也能启动:

ubuntu2004

在命令行环境直接exit就可以退出来。

2.7 如果启动实例报错

Error: 0x800701bc WSL 2

网上搜这个文件下载安装:

wsl_update_x64.msi

3. CUDA+CUDNN

3.1 安装cuda

Nvidia的下载界面如图所示:


WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第4张
  • 可以i直接选择wsl-ubuntu,貌似这个是不带显卡驱动的,wsl方式不需要(有人说禁止)安装nvidia驱动。
  • 有三种安装方式可选, 有文章推荐使用runfile方式进行安装,但只说安装没啥差别,页面下方就有安装方法。
  • 他这个deb(network),下面的提示没看懂,不知道如何体现出这是什么版本。
  • 此外,不同安装方式,貌似卸载方式也是不同的,如果安装错误,runfile方式卸载起来好像容易一些,我之前用deb(network)部署,卸载时出了一些问题,我Ubuntu不是特别熟,没深究。但如果一次性把版本和步骤都做完,这些烂事就都遇不到了。

再安装cuda toolkit:

sudo apt install nvidia-cuda-toolkit

查看一下安装状态、版本等信息:

nvcc -V
或
nvidia-smi
或
cat /usr/local/cuda/version.json 
#很多文章说查看的是version.txt,但至少11.8版本cuda没有这个文件,只有json,意思应该是一样的,json内容很多。

配置环境变量:
编辑bashrc:

vim ~/.bashrc

在最后填写两行(注意路径中的版本号):

export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH

然后生效一下:

 source ~/.bashrc

3.2 cudnn

首先下载cudnn文件,建议直接下载对应的deb包。


WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第5张

WSL是能够直接访问windows目录的,直接从/mnt文件夹下面就可以找到下载目录和文件。

在文件所在目录下执行:

sudo dpkg -i cudnn-local-repo-ubuntu2004-8.8.1.3_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
#第二句是根据系统提示加的,我之后又运行了一遍dpkg,理论上不用
#这个更新一定执行一下
sudo apt-get update

然后执行三句话,暖它一整天:

sudo apt-get install libcudnn8=8.8.1.3-1+cuda11.8
sudo apt-get install libcudnn8-dev=8.8.1.3-1+cuda11.8
sudo apt-get install libcudnn8-samples=8.8.1.3-1+cuda11.8 (主要为了下面的测试)

注意对应的cudnn的文件名:

cudnn-local-repo-ubuntu2004-8.8.1.3_1.0-1_amd64.deb

其中8.8.1.3,以及结合实际的cuda版本11.8,这个信息一定要结合实际信息修修改,否则找不到包。

比如,如果执行结果信息中有Unable、not found啥的,就是字符串没搞对:

E: Version '8.8.1.3_1.0-1+cuda11.8' for 'libcudnn8' was not found

总之这里一定要好好看输出信息有没有不对劲的地方。

最后测试一下,首先建议执行:

sudo apt-get install libfreeimage3 libfreeimage-dev

否则下面编译时可能出现:

fatal error: FreeImage.h: No such file or directory

执行:

cp -r /usr/src/cudnn_samples_v8/ $HOME
cd  $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN

正常情况下,应该一通输出之后显示

Test passed!

3.3 制作一个wsl快照

好不容易装好的,建议搞个快照备份一下:
管理员权限的宿主机命令提示符下执行:

wsl --export Ubuntu-20.04 d:\downloda\wsl-ubuntu2004-20230626.tar

我没有关虚机。但貌似导出的时候自己退出来了,导出过程大概用了几分钟,出来一个17GB的tar文件,里面看上去就是文件目录格式,应该不包括内存状态。

回滚的方法(只总结了网上的教程,但不同版本教程基本都是这三步):

#先注销虚机
wsl --unregister Ubuntu-20.04
#然后回滚(中间参数为还原的位置,可能可以不设置,没测试过)
wsl --import Ubuntu d:\wsl d:\downloda\wsl-ubuntu2004-20230626.tar
#设置默认用户名(ubuntu2004 是系统默认给出的名字,这个没注意从哪里查)
ubuntu2004 config --default-user USERNAME

3.4 tensorflow装一下看看

这个版本的ubuntu,自带的python是3.8,没有pip。建议装完上述内容,运行几次”sudo apt-get update“之后,再根据提示安装pip,麻烦会少一些。
直接在ubuntu环境下安装tensorflow,自动装的2.12,跑了个简单代码试了一下,确实能看出再跑GPU,可以直接在windows任务管理器做监控:


WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第6张

4. pycharm远程调试

  • 在Pycharm上编码,然后反正WSL可以访问到windows文件系统的代码,所以直接在wsl里面执行python命令跑代码就行,也可以直接再pycharm的终端窗口运行wsl命令,比如ubuntu2004,进入虚拟机操作。
  • 注意linux下的代码,访问windows路径时的字符串写法,别的没啥了。
  • 其他更高级的办法待查。

5. WSL的图形化界面

参考微软官网:

使用 WSL 运行 Linux GUI 应用 | Microsoft Learn

直接apt-get install需要的软件即可,比如gedit、或者Nautilus(一个文件管理器)等。安装好之后可以直接运行软件,软件界面直接在windows中打开,十分的人性。

WSL2+ubuntu2004+cuda11.8+cudnn8.8开发环境搭建,第7张

6. 利用Docker实现GPU加速

参考微软官网的文章:

WSL 中的 GPU 加速 ML 训练 | Microsoft Learn

基本一条一条照着操作即可,目前看不需要科学的那啥。
只有一条,在执行最后的docker run命令之前,重启一下docker服务。

sudo service docker restart

否则找不到显卡。
这个教程里的容器,自带cuda10.2,以及python3.6和tensorflow2.1,版本比较老,但确实可以直接用。不过我觉得这个容器的方法不如前面直接装cuda的方式。

99. troubleshoot

  1. 据说WSL2利用了hyper-v,但我并没有主动安装hyper-v,不知道是否会有性能差异。
    但我利用:
bcdedit

命令查看信息时,有一条信息是:

hypervisorlaunchtype Auto

如果不是,则可以执行:

bcdedit /set hypervisorlaunchtype auto

不知道是否是系统自动管理hyper-v的意思,这个没查到有什么具体影响,没问题可以先不管。


https://www.xamrdz.com/mobile/42a1996072.html

相关文章: