超详细 WSL2安装+深度学习环境配置
Posted ww_khun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超详细 WSL2安装+深度学习环境配置相关的知识,希望对你有一定的参考价值。
超详细 WSL2安装+深度学习环境配置
- 一点记录 !
- 正式开始 !
- 参考
一点记录 !
实验室配的联想 GeekPro 2022 台式机虽然配备有 Nvidia RTX 3060 显卡,但在 win11 下实测非常难用,我用来跑深度学习动不动卡机、黑屏并接连弹出诸多程序出错的弹窗,而实际上并没有超出显存大小,我怀疑是 win11 下英伟达驱动存在问题,另外该机的 CPU 是 AMD,略显拉胯,一旦运行的程序达到四五个,卡顿感十足。
原以为 win11 下也可以很好的跑深度学习,无奈还是被现实打败(虽然也是可以跑的,但是有很多问题,不如 Linux 好用)。总结一句,深度学习最终的归途还得是 Linux。
鉴于装双系统每次只能用一个系统,在 Ubuntu 下办公不如 Windows 方便,在虚拟机上装 Ubuntu 又没办法共享宿主机的GPU,跑深度学习直接泡汤,想到了微软之前推出的WSL,Windows Subsystem for Linux,这不,微软自己出手做 Windows 下的 Linux 子系统,解决了上面的问题,既能同时使用 Windows 和 Linux,又可以在Linux中使用 Windows 下的GPU,简直不要太完美。
从2016年8月首次发布到现在,经过六年多的迭代,WSL 从 WSL1 发展到 WSL2,在 win11 中已默认集成 WSL1(默认未开启状态)。这里给出维基百科对 WSL 的介绍和微软官方对 WSL 两个系列的区别说明。
👉 维基百科介绍
Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。WSL提供了一个微软开发的Linux兼容内核接口(不包含Linux代码),来自Ubuntu的用户模式二进制文件在其上运行。
此子系统起源于命运多舛的Astoria项目,其目的是允许android应用运行在Windows 10 Mobile上。此功能组件从Windows 10 Insider Preview build 14316开始可用。
👉 微软对WSL两个系列的比较
WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。
WSL 2 是安装 Linux 发行版时的当前默认版本,它使用最新最好的虚拟化技术在轻量级实用工具虚拟机 (VM) 内运行 Linux 内核。 如果你的发行版当前运行的是 WSL 1,而你想要更新到 WSL 2,请参阅从 WSL 1 更新到 WSL 2。
- WSL2相比WSL1来说可以完美支持Docker。与WSL1的模拟Linux
API不同的是,WSL2采用在Hyper-V虚拟机中运行的方案。可以说WSL2和原汁原味的Linux已经十分接近。- WSL1 没有 Linux 内核,不支持 docker;WSL2 是有 Linux 内核的轻量化虚拟机,支持 docker。
目前 docker 已经针对 WSL2 做了适配,安装时检测到 WSL2 就会启用 WSL2 后端,不仅能同时在 Windows 和 WSL 下操作 docker 服务器,还比以前的 docker on Windows 启动更快、占用资源更少。
正式开始 !
先决条件
电脑具有虚拟化功能,在BIOS中开启虚拟化,这是因为我们要安装的 WSL 2 基于hyper-v。我的电脑 Bios 中默认开启了虚拟化,在正式安装之前请百度查找自己电脑型号开启虚拟化的方法
。
注:没有特别说明,本文以下内容提到的 WSL 均指 WSL 2。
WSL 启用
最新动态:随着 Windows 10 Insider Preview Build 21332 的推出,在 Windows Subsystem for Linux 2 中开始包含了原生的 GUI 支持(称为 WSLg),意味着不需要手动配置远程桌面连接即可在 Windows 环境中无缝体验 GUI 交互下的 Linux 环境。这里 WSLg 并不是给 WSL 加上桌面,而是让子系统能够运行具有图形界面的应用
。例如我在 Liunx 终端里启动 gedit,就会直接弹出一个 gedit的界面,和在 Windows 下使用 x11 转发接收远程服务器的应用界面很像是不是!!!以下是官方给出的图片。
目前,微软 Craig Loewen 的博客[1] [2]中指出,WSL分为应用 Microsoft Store 版本 和 内版本:
-
Microsoft Store 版本目前已经移除了”预览“标签,正式发布,新用户(即满足系统要求且未启用过 “Windows Subsystem for Linux” 可选组件的用户)
通过命令 wsl --install 将自动安装 WSL 的 Microsoft Store 版本,且不再启用 “Windows Subsystem for Linux” 可选组件,或者安装 WSL 内核或 WSLg MSI 包,但虚拟机平台可选组件仍将启用,默认情况下仍将安装 Ubuntu
。目前安装 Microsoft Store 版本捆绑 WSLg,支持GUI。 -
内版本 即 Windows 系统中集成的 “Windows Subsystem for Linux” 可选组件,
对于一些系统版本稍旧的用户使用手动安装方式将没有 WSLg,WSL 的更新将通过 Windows 更新接收,而不是通过 Microsoft Store 中推送的可用更新来接收,但可以通过安装 Microsoft Store 中的 “Windows Subsystem for Linux” 或命令 wsl --update,将内版本的 WSL 从 Windows 版本分离,并更新为 Microsoft Store 版
。通过 Microsoft Store 安装 WSL 将允许我们更快地获取最新的 WSL 更新和功能,而无需修改 Windows 版本。
对于版本的要求,网上有各种不一样的说法,我根据微软官方文档中的说明,总结一下:
- 运行Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 的 WSL 新用户,可以通过命令安装,从上面 Craig Loewen 的博客中提到的来看,按理通过命令安装将自动安装WSL的应用商店版本,即带有GUI的WSL,但是在官方文档的 Tutorials -> Run Linux GUI apps 中又提到需要运行 Windows 10 内部版本 19044+ 或 Windows 11 的用户才能获得 Linux GUI 支持,可见在 版本为2004(内部版本 19041)到 内部版本 19044+ 的 win10 WSL2新用户,即便用命令安装WSL,也无法获得GUI支持,即不是WSLg版。
- 如果已经安装了 WSL,但不支持 GUI,可通过以管理员权限打开的命令提示符运行更新命令来更新到包含 Linux GUI 支持的最新版本,在该部分第四节进行介绍。
请对照上述版本要求,下面根据微软官方文档,给出两种安装方式:命令安装和手动安装,以及非新用户或非 WSLg 版本更新到WSLg 版本的方法。如有不清楚的地方移步官方文档,或直接根据官方文档进行安装。
- 命令安装:[3] Install WSL | Microsoft Learn
- 手动安装(推荐):[4] Manual installation steps for older versions of WSL | Microsoft Learn
- 非新用户更新到WSLg版本(可选):[5] Run Linux GUI apps with WSL | Microsoft Learn
一、命令安装
在管理员模式下打开 PowerShell 或 Windows 命令提示符,根据需求输入以下三种命令的其中一种,然后重新启动计算机。
默认情况下,使用 wsl --install 安装的新 Linux 安装将设置为 WSL 2,以下命令1或命令2会将Linux发行版安装在C盘,对于系统盘容量小和介意不能自定义安装位置的用户来说,非常不友好,因此推荐使用命令3,并查看第二部分安装Linux发行版
。
此外使用命令安装会提示是否有安装GUI。
# 命令1:安装 WSL 并安装默认的Linux发行版:Ubuntu
wsl --install
# 命令2:安装 WSL 并指定要安装的Linux发行版
# <Distribution Name>替换为要安装的发行版名称
wsl --install -d <Distribution Name>
# 命令3:安装 WSL 并且不安装 Linux发行版
wsl --install --no-distribution
二、手动安装(推荐方式)
1、启用“Windows Subsystem for Linux”可选功能
- 以管理员身份打开 PowerShell(PowerShell >“开始”菜单>右键单击>以管理员身份运行),然后输入以下命令,然后重新启动计算机
# 默认安装WSL 1
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2、更新到 WSL 2
版本要求:win10 或 win11。
win10要求:
- 对于 x64 系统:版本 1903 或更高版本,内部版本 18362 或更高版本。
- 对于 ARM64 系统:版本 2004 或更高版本,内部版本 19041 或更高版本。
- 在安装 WSL 2 之前,必须启用虚拟机平台可选功能,以管理员身份打开 PowerShell 并运行以下命令,然后重启计算机。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 下载并安装 Linux 内核更新程序包:适用于 x2 计算机的 WSL64 Linux 内核更新包
上一步命令运行完必须重启,否则该步安装更新包将报错。
三、设置 WSL 默认大版本
命令安装默认 WSL 大版本为 2,手动安装默认为 1,通过以下方式更改 WSL 版本:
若要在安装新的 Linux 发行版时将默认版本设置为 WSL 2,请使用命令:
# <Version#>替换为 1或2
wsl --set-default-version <Version#>
# 这里我将默认版本设为 2
wsl --set-default-version 2
四、更新 WSL2 版本(可选)
若需要更新最新的WSL版本(WSLg),不论安装的是 WSL 的应用商店版还是内版本,均可通过以下两种方式更新
- 通过命令更新
wsl --update
- 在 Microsoft Store 中 安装或更新 Windows Subsystem for Linux
- 检查是否更新到 WSLg 版本,在 PowerShell 运行以下命令可查看 WSLg版本,若未出现图中所示,则不是 WSLg 版本
wsl --version
五、一些常用的 wsl 命令
强烈建议在进行完第二部分linux发行版的安装之后,备份一下安装的镜像,以便各种误操作之后可以进行还原,我尝试了一下,非常方便。
# 列出可安装的 Linux 发行版
wsl --list --online 或 wsl -l -o
# 列出已安装的 Linux 发行版
wsl --list --verbose 或 wsl -l -v
# 导出镜像(备份)
wsl --export <Distribution Name> <FileName>
# 导入镜像(还原)
wsl --import <Distribution Name> <InstallLocation> <FileName>
Linux 发行版安装
在WSL启用部分中若通过命令方式(命令1或命令2)安装WSL,直接跳过该部分。对于通过命令3或手动方式安装的WSL,需要自行安装Linux发行版,以下介绍两种安装方式:Microsoft Store 安装默认安装在C盘,手动安装可选择任意盘安装(当然是选非C盘了),推荐手动安装
。
一、Microsoft Store 中安装
在 Microsoft Store 中搜索 Linux,查看可安装的Linux发行版,如选择Ubuntu 20.04.5 LTS,”免费下载“直接下载安装。安装完成后会弹出一个terminal,设置用户名和密码,设置完成即可进入Ubuntu。
二、手动安装(推荐方式)
从官网下载想要安装的Linux发行版:Manual installation steps for older versions of WSL | Microsoft Learn
以我下载的Ubuntu 22.04 LTS为例,在D盘新建 WSL 文件夹,将下载得到的 AppxBundle 文件放到 WSL 文件夹下,修改后缀名为 .zip ,然后提取其中的 Ubuntu_2204.1.7.0_x64.appx。
同样更改后缀名为 .zip
,接着解压缩,进入 Ubuntu_2204.1.7.0_x64
文件夹,双击 ubuntu.exe
安装。设置用户名和密码,设置完成即可进入Ubuntu。
通过此种方式安装的发行版不会集成在应用列表中。相比于通过商店安装的方式,这种方式可以看到安装生成的文件:在 ubuntu.exe
所在目录下生成 ext4.vhdx
。
三、进入已安装的 Linux 发行版
1、进入安装的Linux发行版的方式有很多种,如:
- 打开 powershell 或 cmd 命令行,输入
wsl
,进入默认的Linux发行版; - 通过商店安装的Linux发行版会存在于应用列表中,可从应用列表中打开,这时会打开自带的Linux终端并进入子系统;
- 这里强烈推荐通过 Microsoft Store 安装 Windows Terminal (win11默认安装),
Windows Terminal 可以集成多个shell,如powershell、cmd、git bash,安装完的Linux发行版的终端也会自动集成到 Windows Terminal 中
。另外,已经启动的 Linux 发行版,可以打开多个终端界面,不会相互影响。
注意:通过手动方式安装的发行版,这里显示的名称应该是 Ubuntu,可以在设置 -> 名称中进行修改想要的名称
至此我们已完成了Linux发行版的安装,通过以下命令检查已安装的版本及运行状态:
wsl -l -v
四、查看 Ubuntu 文件系统
WS L的一大好处就是可以和 Windows 主机互相访问文件系统,在 Windows 下的文件资源管理器界面左边的窗口栏即可看到一个Linux图标。对于不习惯使用命令进行复制移动文件的用户来说,有图形操作界面的复制和移动非常友好。
五、WSLg 界面显示
- 如在上一部分第四节更新了 WSL 到 WSLg 版本,那么在 WSL Ubuntu中新安装的软件均可以在 Windows 下的应用列表看到并打开
- 此外,在 Ubuntu 终端输入软件名称也可以弹出软件的显示界面,类似 x11转发,如打开 gedit(需先安装)
链接主机代理
由于 WSL 可以共享 Windows 的网络,因此自然希望能使用 Windows 的代理服务
,但 WSL 的 linux 子系统与主机的ip地址不同(无法使用静态的方式设置代理),且会被 Windows Defender 当作公网链接屏蔽,因而无法正常访问 localhost 的各种端口。
新的 WSL2 架构会为 Linux 系统分配一个虚拟网卡,Linux 虚拟机与 Windows 组成了一个局域网,因此 若想在 Linux下访问 Windows 的服务,必须要使用 Windows 的主机地址。
Windows 认为 WSL 的虚拟网卡是公用网络,因此任何阻止公用网络入站请求的防火墙策略都会拦住 WSL 发过来的请求。
我根据[6]博客的方案,重新整理一下:
- 软件:Cxxsh for Windows ( VxrayN也可以,但是具体方法不同,自行查找资料 ) (名称打全了无法审核通过,用xx代替了,自行搜索吧)
1、在Windows下, Cxxsh 中打开 General -> Allow LAN,即允许局域网接入 Cxxsh,同时打开General -> System Proxy,即开启系统代理
2、在Linux下,创建 proxy.sh
khun@DESKTOP-PDPQM7V:~$ cd ~
khun@DESKTOP-PDPQM7V:~$ vim proxy.sh
写入以下内容并保存
#!/bin/sh
hostip=$(cat /etc/resolv.conf | grep nameserver | awk ' print $2 ')
wslip=$(hostname -I | awk 'print $1')
# 这里填写主机代理的端口
port=7890
PROXY_HTTP="http://$hostip:$port"
set_proxy()
export http_proxy="$PROXY_HTTP"
export HTTP_PROXY="$PROXY_HTTP"
export https_proxy="$PROXY_HTTP"
export HTTPS_proxy="$PROXY_HTTP"
git config --global http.proxy "$PROXY_HTTP"
git config --global https.proxy "$PROXY_HTTP"
unset_proxy()
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
git config --global --unset http.proxy
git config --global --unset https.proxy
test_setting()
echo "Host ip:" $hostip
echo "WSL ip:" $wslip
echo "Current proxy:" $https_proxy
if [ "$1" = "set" ]
then
set_proxy
elif [ "$1" = "unset" ]
then
unset_proxy
elif [ "$1" = "test" ]
then
test_setting
else
echo "Unsupported arguments."
fi
3、在该文件所在目录下(或使用 proxy.sh 的绝对/相对路径),运行命令:
# 开启代理
khun@DESKTOP-PDPQM7V:~$ source ./proxy.sh set
# 关闭代理
khun@DESKTOP-PDPQM7V:~$ source ./proxy.sh unset
# 输出主机 ip,WSL ip和代理状态
khun@DESKTOP-PDPQM7V:~$ source ./proxy.sh test
4、将 proxy.sh 写入 ~/.bashrc,每次启动 Terminal 自动执行
khun@DESKTOP-PDPQM7V:~$ vim ~/.bashrc
# 英文状态下按 i 键进入编辑,写入以下内容
alias proxy="source ~/proxy.sh"
. ~/proxy.sh set
# 按 ESC 键退出编辑,按 :wq 保存退出
5、以管理员模式打开 Windows 的 Powershell,写入 WSL 入站规则
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
运行后,在 Windows 安全中心-防火墙与网络保护-高级设置-入站规则 中,可以看到WSL的规则
6、在 Windows 安全中心-防火墙与网络保护-允许应用通过防火墙 中,将涉及代理的应用和功能设置为允许专用+允许公网,并保存。(这一步我没做也可以,如果不行就试一下)
7、在 Linux 下测试是否可以 ping 通主机 ip 以及使用代理
# 查看主机ip
khun@DESKTOP-PDPQM7V:~$ cat /etc/resolv.conf
# 输出:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 192.168.112.1
# ping主机ip,不断刷新出现: xx bytes from xxx.xxx.xxx.xxx(主机ip): icmp_seq=xx ttl=xxx time=xxx, 即ping通主机ip
# 否则未ping通主机ip,检查上述步骤
khun@DESKTOP-PDPQM7V:~$ ping 192.168.112.1
# 查看是否能下载google页面
khun@DESKTOP-PDPQM7V:~$ wget www.google.com
Python 环境及深度学习框架安装
一、安装 miniconda3
通过 wget 下载 miniconda.sh,运行 sh 文件
khun@DESKTOP-PDPQM7V:~$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
khun@DESKTOP-PDPQM7V:~$ sh Miniconda3-latest-Linux-x86_64.sh
随后会显示 miniconda 的 license,就一直按回车,直到出现 yes/no,键入 yes,一路 yes,直到最后,初始化 miniconda3,自动将环境变量写入 .bashrc 。
khun@DESKTOP-PDPQM7V:~$ source ~/.bashrc # 重新激活环境变量
khun@DESKTOP-PDPQM7V:~$ conda -h # 检查conda是否安装成功
二、配置 conda 镜像源
- 新建 .condarc 文件
vim ~/.condarc
- 以下给出常用的清华源,英文状态下按 i 键进入编辑模式,粘贴到 .condarc 中后,按 Esc 键返回命令模式,键入 :wq 保存退出,就完成了 conda 镜像源的配置。
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
三、安装 pytorch-gpu
一般会新建一个虚拟环境,与base环境隔离,便于打包项目所需的包。
# -n 后面的参数为环境名,可自行更改, python版本也根据自己项目决定
khun@DESKTOP-PDPQM7V:~$ conda create -n torch-1.10.2 python=3.8
# 激活环境
khun@DESKTOP-PDPQM7V:~$ conda activate torch
- 在线方式,建议使用 pip 方式安装
# 使用 pip 安装
# 其中具体版本号不确定时,可以仅执行 pip install torch== --extra-index-url https://download.pytorch.org/whl/cu113 (cu113表示cuda11.3版本) ,执行后会提示可以安装的具体版本号。
khun@DESKTOP-PDPQM7V:~$ pip install torch==1.10.2+cu113 torchvision==0.11.3+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
# 使用 conda 安装
# 这种方式容易失败,经常自动安装cpu版本,我也很迷
khun@DESKTOP-PDPQM7V:~$ conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
- 离线方式,pip安装自己离线下载的 torch 和 torch-version
# 下载需要的版本到本地,下载地址:
http://download.pytorch.org/whl/torch_stable.html
# pip 离线安装, 如安装下载到本地的 python3.8版的torch-1.10.0+cu113
khun@DESKTOP-PDPQM7V:~$ pip install torch-1.10.0+cu113-cp38-cp38m-linux_x86_64.whl
khun@DESKTOP-PDPQM7V:~$ pip install torchvision-0.11.0+cu113-cp38-cp38m-linux_x86_64.whl
- 验证是否能使用 GPU
khun@DESKTOP-PDPQM7V:~$ python
>>> import torch
>>> torch.cuda.is_available() # 出现 True 即成功安装GPU版本pytorch
CUDA on WSL 安装
目前从英伟达的[7]官方文档中可以看到,只需要在 Windows 下安装 NVIDIA 的驱动程序,不需要在 WSL 中安装任何 Linux 显示驱动
,最新的 NVIDIA Windows GPU 驱动程序 完全支持 WSL 2,网络上其他博客提到的在WSL下安装 GPU 驱动已经不适用了。通过 nvidia-smi 命令即可查看到 WSL Ubuntu 下已经有 NVIDIA 驱动。
关于 WIndows 下 NVIDIA 驱动程序的安装这里不再介绍,下面介绍在 WSL2 上安装 CUDA 和 Cudnn。
另外特别提醒一点,如果只是使用 Pytorch 框架,那么无需单独安装 CUDA,pytorch-gpu 版的安装文件中包含有 CUDA;Tensorflow 或者 TensorRT 则需要再单独安装CUDA。
一、CUDA Toolkit 安装
-
官方下载地址:CUDA Toolkit Archive | NVIDIA 开发者,根据自己的需求选择版本,我安装的是 CUDA 11.3,选择 Linux -> x86_64 -> WSL-Ubuntu ->2.0。
-
在下载页面的下方给出了安装的步骤,根据步骤进行安装即可。
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key del 7fa2af80
sudo apt-get update
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda-repo-wsl-ubuntu-11-3-local_11.3.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-3-local_11.3.1-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
- 在执行第四条命令时提示错误:
khun@DESKTOP-PDPQM7V:~$ sudo apt-get update
Get:1 file:/var/cuda-repo-wsl-ubuntu-11-7-local InRelease [1575 B]
Get:1 file:/var/cuda-repo-wsl-ubuntu-11-7-local InRelease [1575 B]
Get:2 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64
Err:2 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC
执行下面的命令即可解决,recv-keys的值可能不太一样,根据自己的替换掉
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC
- 添加环境变量,更新可能需要的依赖
khun@DESKTOP-PDPQM7V:~$ vim ~/.bashrc
# 添加内容
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64$LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH
# 更新一下bashrc
khun@DESKTOP-PDPQM7V:~$ source ~/.bashrc
# 更新可能需要的依赖
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
- 检查是否安装成功
二、cuDNN 配置
cuDNN下载地址:cuDNN Archive | NVIDIA Developer,需要注册并登录账号。
选择适配的 cuDNN 版本,这里我下载到 Windows 下的目录中。WSL 2 Linux 下若要访问 Windows 下文件,可进入 /mnt/ 查看。
# 以下是安装命令,其中文件路径需要更改成你自己下载的路径
tar -zxvf /mnt/d/Downloads/cudnn-11.3-linux-x64-v8.2.1.32.tgz
# 版本号更改成自己下载的版本号
sudo cp -P /mnt/d/Downloads/cuda/lib64/libcudnn* /usr/local/cuda-11.3/lib64/
sudo cp /mnt/d/Downloads/cuda/include/cudnn.h /usr/local/cuda-11.3/include/
# 更改读取权限
sudo chmod a+r /usr/local/cuda-11.3/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.3/lib64/libcudnn*
至此,CUDA 和 cuDNN配置完成。
桌面环境配置(可选)
虽然 WSLg 已经可以显示软件的 GUI 界面,但对于一个喜欢瞎折腾的人来说,终究不像完整版 Ubuntu,这里给出配置桌面环境的方案。
鉴于前期 WSL 不支持 systemd,网上大部分教程都是配置 Xfce4 桌面环境(因为xcf4不需要systemd),但是个人觉得太丑,还是 gnome 桌面更符合我的审美,但 gnome 从某个版本之后就需要 systemd 服务,前期的一些方法使用了[8]一个 Github 大神的脚本开启 systemd 服务,目前[9]官方已经支持手动开启 systemd 服务,因此我使用官方给出的方法。
特别注意:经过个人测试,开启 systemd 后进入wsl ubuntu速度明显变慢,在安装 gnome桌面环境的过程中很容易遇到报错,且用到桌面环境的机会很少,因此正常使用来跑深度学习代码不推荐开启 systemd 和 安装桌面环境。
- 安装 Gnome 并开启 systemd
# 注意,经测试,要切换到 root 用户下才能使用 gnome
ubuntu2004 config --default-user root
# 安装gnome桌面环境
sudo apt-get install ubuntu-desktop
# 安装相关工具
sudo apt-get install gnome-tweak-tool
# 开启systemd
sudo vim /etc/wsl.conf
# 在 wsl.conf 中写入以下内容,并保存退出
[boot]
systemd=true
- 切换到 PowerShell,关机 WSL 并重新启动
wsl --shutdown
- 安装xrdp远程控制服务
# 依然切换到 root 用户
ubuntu2004 config --default-user root
# 安装xrdp远程控制服务
sudo apt-get install xrdp
# 将端口从3389改为3390,因为此前默认的3389端口已保留用于ubuntu shell
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
# 配置启动session,否则远程桌面登录输入密码之后会直接闪退
echo "gnome-session" > ~/.xsession
# 重新启动xrdp服务
sudo systemctl restart xrdp
# 查看xrdp的状态,出现绿色的running表示正常启动
sudo systemctl status xrdp
- 打开 win 下的远程桌面连接,输入 localhost:3390,出现以下窗口,输入 ubuntu 用户名和密码
- 可能会有短暂黑屏,进入之后再次输入用户密码,即可进入桌面
- 给出切换回普通用户的命令和关闭 systemd 的方法
# 切换回普通用户,在 powershell 中输入,default-user后面为自己的用户名
ubuntu2004 config --default-user xxx
# 关闭 systemd,在 linux 终端下输入
sudo vim /etc/wsl.conf
# 在 wsl.conf 中写入以下内容,并保存退出
[boot]
systemd=true
一些可能出现的问题(持续补充…)
1、Ubuntu安装软件sudo apt install xxx
时报错
E: Unable to correct problems, you have held broken packages
原因:Ubuntu 版本跟 apt 源不匹配,使用与版本相对应的源即可(不同的 Ubuntu 版本 apt 源列表可能不同,并且有些软件包使用的是其它特定的源),每个发行版本都有自己的代号,在apt数据源中要修改为相应的代号
。我安装的 Ubuntu 22.04,代号为 jammy。
Ubuntu 16.04 代号:xenial
Ubuntu 17.04 代号:zesty
Ubuntu 18.04 代号:bionic
Ubuntu 19.04 代号:disco
Ubuntu 20.04 代号:focal
Ubuntu 22.04 代号:jammy
# 查看自己系统上的版本号(代号)
lsb_release -a
以下为修改默认源方法:
# 备份默认源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 打开并替换默认源,下面给出几个常用的源
# vim界面下按i进入编辑模式
sudo vim /etc/apt/sources.list
# vim界面下按Esc退出编辑模式,返回命令模式,输入一下命令保存退出
:wq
# 更新数据源
sudo apt update
sudo apt-get upgrade
常用源:
# 阿里源
# 默认注释了源码仓库,如有需要可自行取消注释
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# Pre-released source, not recommended.
# deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# 清华源
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# Pre-released source, not recommended.
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# 网易163源
deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
# Pre-released source, not recommended.
# deb http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
# 中科大源
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
最后,给出一些 wsl ubuntu美化教程,有兴趣的小伙伴可以自己尝试一下。
安装中文语言
ubuntu 与 windows terminal zsh 美化教程
参考
[1] How to install and-use WSL in the Microsoft Store
[2] The Initial Preview of GUI app support is now available for the Windows Subsystem for Linux
[3] Install WSL | Microsoft Learn
[4] Manual installation steps for older versions of WSL | Microsoft Learn
[5] Run Linux GUI apps with WSL | Microsoft Learn
[6] Win10 WSL2 链接主机代理 - 知乎 (zhihu.com)
[7] CUDA on WSL User Guide
[8] The Initial Preview of GUI app support is now available for the Windows Subsystem for Linux
[9] Systemd support is now available in WSL
[10] Ubuntu22.04更换国内镜像源
以上是关于超详细 WSL2安装+深度学习环境配置的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu22.04深度学习GPU环境配置:Nvidia CUDA 11.7cuDNN 8.5 详细解读(20220910)
Ubuntu22.04深度学习GPU环境配置:Nvidia CUDA 11.7cuDNN 8.5 详细解读(20220910)
Ubuntu22.04深度学习GPU环境配置:Nvidia CUDA 11.7cuDNN 8.5 详细解读(20220910)