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

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


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


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

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

2.7 如果启动实例报错

Error: 0x800701bc WSL 2 ??????????????????

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

wsl_update_x64.msi

3. CUDA+CUDNN

3.1 安装cuda

Nvidia的下载界面如图所示:


image.png
  • 可以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包。


image.png

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


image.png

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中打开,十分的人性。

image.png

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的意思,这个没查到有什么具体影响,没问题可以先不管。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355