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


wsl即适用于Windows的Linux子系统支持几种常见的Linux系统,我主要用了ubuntu2004。
在这里插入图片描述

  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
      image.png

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

2.1 安装wsl

安装wsl,在管理员权限的命令提示符环境下:

#开启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

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

2.4 安装Linux子系统

推荐直接到Windows Store中直接搜,比如Ubuntu 20.04、或22.04等。
image.png
下载完毕后会出现图标,直接在点击即可启动,初次启动会提示新建用户密码啥的。

也可以用命令行通过网络安装,比如先列出可用的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

这应该是个可执行文件,但没找到在哪。
在ubuntu的shell环境下直接输入exit就可以退出来。

2.7 如果启动实例报错

Error: 0x800701bc WSL 2 ??? https://aka.ms/wsl2kernel

需要在windows下载安装

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

3. CUDA+CUDNN

3.1 安装cuda

CUDA Toolkit Archive | NVIDIA Developer

Nvidia的下载界面如图所示:
image.png

  • 可以i直接选择wsl-ubuntu,貌似这个是不带显卡驱动的,wsl方式不需要(有人说禁止)安装nvidia驱动。
  • 有三种安装方式可选, 有文章推荐使用runfile方式进行安装,但只说安装没啥差别,页面下方就有安装方法。
  • 他这个deb(network),下面的提示没看懂,不知道如何体现出这是什么版本。
  • 此外,不同安装方式,貌似卸载方式也是不同的,如果安装错误,runfile方式卸载起来好像容易一些,我之前用deb(network)部署,卸载时出了一些问题,我Ubuntu不是特别熟,没深究。但如果一次性把版本和步骤都做完,这些烂事就都遇不到了。
  • 官网的步骤,执行后会有个伪图形界面,一般默认安装即可。
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

不建议用apt方式安装cuda toolkit,我试了一下版本只到11.5:

sudo apt install nvidia-cuda-toolkit

配置环境变量,编辑bashrc文件:

vim ~/.bashrc

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

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

然后生效一下:

 source ~/.bashrc

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

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

3.2 安装cudnn

首先下载cudnn文件,建议直接下载对应的deb包。
image.png
WSL是能够直接访问windows目录的,直接从/mnt文件夹下面就是c、d等盘符,可以找到下载目录和文件。

在文件所在目录下执行:

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任务管理器做监控:
image.png

4. pycharm远程调试

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

5. WSL的图形化界面

todo 貌似也是有办法的。

99. troubleshoot

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

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

hypervisorlaunchtype Auto

如果不是,则可以执行:

bcdedit /set hypervisorlaunchtype auto

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


  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值