本文介绍: 简要介绍了 Windows 下 WSL 的优势和 WSL 的发展,给出了 WSL 2 的详细安装过程,以及如何在 WSL Ubuntu下搭建深度学习环境,其余则是对 WSL 的一些可玩性的探索。

一点记录 !

实验室配的联想 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 启动更快、占用资源更少。
    WSL1与WSL2比较

正式开始 !

 

先决条件

电脑具有虚拟化功能,在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 11WSL 新用户,可以通过命令安装,从上面 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 版本的方法。如有不清楚的地方移步官方文档,或直接根据官方文档进行安装。

一、命令安装

在管理员模式下打开 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

三、设置 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 的应用商店版还是内版本,均可通过以下两种方式更新

  1. 通过命令更新
wsl --update
  1. 在 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发行版的方式有很多种,如:

  • 打开 powershellcmd 命令行,输入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

2、如评论区“吃饭睡觉不胖胖”用户的评论,先前关注到这篇博客的一些粉丝可能按照 链接主机代理 这部分设置了链接代理,那么就会出现下面这个问题,并且关掉代理也没有用。

CondaSSLError: Encountered an SSL error. Most likely a certificate verification issue.

Exception: HTTPSConnectionPool(host='mirrors.tuna.tsinghua.edu.cn', port=443): Max retries exceeded with url: /anaconda/pkgs/main/linux-64/current_repodata.json (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:997)'))) 

解决方法如下:
(1)将 proxy.sh 文件中第14行的 HTTPS_proxy 改为 HTTPS_PROXY,保存。
(2)取消设置先前 proxy.sh 设置的错误的环境变量,在终端执行

unset HTTPS_proxy

(3)重新开启代理

source ~/proxy.sh set

(4)关闭代理,并检查 conda 创建环境是否可用

source ~/proxy.sh unset

我也同步修改了链接主机代理中proxy.sh文件中的错误。

最后,给出一些 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更换国内镜像源

原文地址:https://blog.csdn.net/ww_khun/article/details/129410363

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_50535.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注