事件起因
之前我在跑深度学习的实验时要么用windows环境跑,要么用租的服务器的ubuntu环境跑,windows由于先天条件,运行时总是报一些稀奇古怪的错误,而且现在大多数的开源代码也都是在linux下跑的,代码调来调去的很麻烦,租的服务器每次配置环境也有些不便,而且现在服务器一天比一天贵,我本机是一张4070的卡,寻思着不用也是浪费,索性就研究一下如何在windows的大环境下配一个linux的子系统。
通常来说在Linux系统下进行深度学习训练的效率要高于Windows系统,大家通常也是使用Linux常见的发行版本Ubuntu。但是Ubuntu对于日常使用不是很友好,于是就有了折中的方案,使用Windows Subsystem Linux (WSL)。
为什么不用VMware呢?很简单,VMware虚拟机中的GPU是虚拟出来的,并不能真实调用本机的GPU,所以并无卵用。
安装WSL2
最简单的,照着微软官方的教程来:
https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
步骤 1 - 启用适用于 Linux 的 Windows 子系统
需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。
以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令:
PowerShell
1 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart |
建议现在转到步骤 #2,更新到 WSL 2,但如果只想安装 WSL 1,现在可以重新启动计算机,然后继续执行步骤 6 - 安装所选的 Linux 发行版。 若要更新到 WSL 2,请等待重新启动计算机,然后继续执行下一步。
步骤 2 - 检查运行 WSL 2 的要求
若要更新到 WSL 2,需要运行 Windows 10。
- 对于 x64 系统:版本 1903 或更高版本,内部版本为 18362.1049 或更高版本。
- 对于 ARM64 系统:版本 2004 或更高版本,内部版本为 19041 或更高版本。
或 Windows 11。
备注
低于 18362 的版本不支持 WSL 2。 使用 Windows Update 助手更新 Windows 版本。 Windows 版本 1903 支持也仅适用于 x64 系统。 如果使用的是 Arm64 版本的 Windows,则需要升级到 Windows 10 版本 2004 或更高版本才能完全访问 WSL 2。 有关详细信息,请参阅WSL 2 即将支持 Windows 10 版本 1903 和 1909。
若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”。 更新到“设置”菜单中的最新 Windows 版本。
备注
如果运行的是 Windows 10 版本1903 或 1909,请在 Windows 菜单中打开“设置”,导航到“更新和安全性”,然后选择“检查更新”。 内部版本号必须是 18362.1049+ 或 18363.1049+,次要内部版本号需要高于 .1049。 阅读详细信息:WSL 2 即将支持 Windows 10 版本 1903 和 1909。
步骤 3 - 启用虚拟机功能
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行:
PowerShell
1 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart |
重新启动计算机,以完成 WSL 安装并更新到 WSL 2。
步骤 4 - 下载 Linux 内核更新包
Linux 内核更新包会安装最新版本的 WSL 2 Linux 内核,以便在 Windows 操作系统映像中运行 WSL。 (若要运行 Microsoft Store 中的 WSL 并更频繁地推送更新,请使用 wsl.exe --install
或 wsl.exe --update
。)
下载最新包:
备注
如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:
systeminfo | find "System Type"
。 Caveat: 在非英文版 Windows 上,你可能必须修改搜索文本,对“System Type”字符串进行翻译。 你可能还需要对引号进行转义来用于 find 命令。 例如,在德语版中使用systeminfo | find '"Systemtyp"'
。运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)
安装完成后,请继续执行下一步 - 在安装新的 Linux 分发时,将 WSL 2 设置为默认版本。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。)
备注
有关详细信息,请参阅 Windows 命令行博客上的文章对更新 WSL2 Linux 内核的更改。
步骤 5 - 将 WSL 2 设置为默认版本
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
PowerShell
1 | wsl --set-default-version 2 |
步骤 6 - 安装所选的 Linux 分发
打开 Microsoft Store,并选择你偏好的 Linux 分发版。
单击以下链接会打开每个分发版的 Microsoft Store 页面:
在分发版的页面中,选择“获取”。
首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。
然后,需要为新的 Linux 分发版创建用户帐户和密码。
祝贺你! 现已成功安装并设置了与 Windows 操作系统完全集成的 Linux 分发!
排查安装问题
如果在安装过程中遇到问题,请查看疑难解答指南的安装部分。
下载发行版
在某些情况下,你可能无法(或不想)使用 Microsoft Store 安装 WSL Linux 发行版。 你可能正在运行不支持 Microsoft Store 的 Windows Server 或长期服务 (LTSC) 桌面操作系统 SKU,或者你的公司网络策略和/或管理员不允许在你的环境中使用 Microsoft Store。 在这些情况下,虽然 WSL 本身可用,但你可能需要直接下载 Linux 发行版。
如果 Microsoft Store 应用不可用,可使用以下链接来下载并手动安装 Linux 发行版:
- Ubuntu
- Ubuntu 22.04 LTS
- Ubuntu 20.04
- Ubuntu 20.04 ARM
- Ubuntu 18.04
- Ubuntu 18.04 ARM
- Ubuntu 16.04
- Debian GNU/Linux
- Kali Linux
- SUSE Linux Enterprise Server 12
- SUSE Linux Enterprise Server 15 SP2
- SUSE Linux Enterprise Server 15 SP3
- openSUSE Tumbleweed
- openSUSE Leap 15.3
- openSUSE Leap 15.2
- Oracle Linux 8.5
- Oracle Linux 7.9
- Fedora Remix for WSL
这将导致 <distro>.appx
包下载到你选择的文件夹。
如果愿意,你也可通过命令行下载首选的发行版,可将 PowerShell 与 Invoke-WebRequest cmdlet 一起使用。 例如,下载 Ubuntu 20.04:
PowerShell
1 | Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing |
提示
如果下载需要很长时间,请通过设置 $ProgressPreference = 'SilentlyContinue'
来关闭进度栏
你还可以选择使用 curl 命令行实用程序来下载。 使用 curl 下载 Ubuntu 20.04:
控制台
1 | curl.exe -L -o ubuntu-2004.appx https://aka.ms/wslubuntu2004 |
在本示例中,将执行 curl.exe
(而不仅仅是 curl
),以确保在 PowerShell 中调用真正的 curl 可执行文件,而不是调用 Invoke WebRequest 的 PowerShell curl 别名。
下载了发行版后,导航到包含下载内容的文件夹,并在该目录中运行以下命令,其中 app-name
是 Linux 发行版 .appx 文件的名称。
Powershell
1 | Add-AppxPackage .\app_name.appx |
Appx 包下载完成后,可以通过双击 appx 文件开始运行新发行版。 (命令 wsl -l
不会在此步骤完成之前显示发行版已安装)。
如果你使用 Windows Server,或在运行上述命令时遇到问题,可在 Windows Server 文档页上找到备用安装说明,以通过将 .appx
文件更改为 zip 文件来安装该文件。
安装了发行版后,请按照说明为新的 Linux 发行版创建用户帐户和密码。
安装 Windows 终端(可选)
使用 Windows 终端可以打开多个选项卡或窗口窗格,以显示多个 Linux 发行版或其他命令行(PowerShell、命令提示符、Azure CLI 等)并在它们之间快速切换。 可使用独特的配色方案、字体样式、大小、背景图像和自定义键盘快捷键来完全自定义终端。 了解详细信息。
安装cuda和cudnn
wsl2和windows11共用显卡驱动,因此我们只需安装cudatoolkit和cudnn。以后windows显卡驱动正常更新即可。
conda命令安装后虽然也可以用cudnn,但是不是完整版,不能编译。如果你需要编译功能,还是需要安装完整版本的cudatoolkit。
安装cudatoolkit
可直接去官网下载所需版本:
https://developer.nvidia.com/cuda-toolkit-archive点击链接,选择linux,选择x86_64
将nvidia官方给的命令,一条条复制到wsl2的ternimal中即可。中间如果遇到问题百度帮到你~
注意!!! 我在执行第三条下载命令的时候断网了,之后我重新执行了一遍命令,这样的话会下载两个sudo dpkg -i cuda-repo-wsl-ubuntu-12-3-local_12.3.0-1_amd64.deb 文件,这种情况下在执行第四条命令的时候会报错:
解决方法:
把之前下载到一半的那个文件删了,然后把后面下载全的文件重命名就好啦!
安装结束之后执行nvcc -v,会提示没有nvcc可执行,这并不是因为我们cudatoolkit没安装好,而是因为环境变量还没配置好。
cuda环境变量配置
1
sudo nano ~/.bashrc
将以下内容添加进文件最后
1
2export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}保存退出后(Ctrl+x),更新一下环境变量:
1
source ~/.bashrc
这时候在执行 nvcc -V 就能够显示cuda版本了。
安装cudnn
严格来讲cuDNN不能叫安装。它其实是对CUDA的一些补充,所以“安装”过程很简单。去英伟达官网下载对应CUDA 11.8的cuDNN压缩包(这一步可能需要注册英伟达账号)。解压之后得到cuda目录,cuda目录下面有include和lib64两个子目录,将这两个目录下面的所有文件拷贝到CUDA 11.8安装路径对应的目录下面即可。
下载8.8.1 for cuda11.x
将文件保存到windows环境,然后直接复制到wsl2 ubuntu的home目录下,和在windows环境中复制粘贴一样操作。
在wsl的ternimal中进入到home目录,然后解压下载的文件
1
sudo tar -xvf cudnn** #省略部分按tab自动补全
然后把解压得到的文件分别拷贝到对应的文件夹(注意,下面命令中的 /lib/和/include/ 指的是刚刚解压得到的文件夹里的):
1
2
3
4
5
6
7#以下是安装命令
sudo cp -r /lib/* /usr/local/cuda-11.8(自己检查具体的版本修改路径)/lib64/
sudo cp -r /include/* /usr/local/cuda-11.8(自己检查具体的版本修改路径)/include/
#为更改读取权限:
sudo chmod a+r /usr/local/cuda-11.8(自己检查具体的版本修改路径)/include/cudnn*
sudo chmod a+r /usr/local/cuda-11.8(自己检查具体的版本修改路径)/lib64/libcudnn*注意操作要在相应的文件夹下进行哦!
检查cudnn是否安装成功
1
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
wsl安装anaconda并配置环境
- 安装anaconda
anaconda3官方下载,选择linux版本,鼠标放在其上方右键,复制链接。
回到Ubuntu的terminal,输入:
1 | wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh |
运行以上代码,将会下载anaconda3到wsl ubuntu中。
之后执行:
1 | sh Anaconda3-2023.03-Linux-x86_64.sh |
只需要输入 sh A 然后按Tab键,系统会自动补齐下面内容。
接下来就是安装过程,只需要根据提示按回车或者输入yes即可。
conda配置环境
conda创建虚拟环境
1
2conda create --name cu118py310 python=3.10 #--name 后面是创建环境的名字,按自己的习惯命名,python=XX,输入自己想用的版本号
conda activate cu118py310 #激活刚刚创建的环境配置pytorch
前往pytorch官网,选择需要的环境(注意这里选择linux OS),复制conda命令,在terminal中粘贴,回车,安装环境:
1
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
Pycharm连接wsl,并使用conda生成的环境
Pycharm专业版(社区版和教育版没有方便的wsl功能,软件的下载链接在下面),点击右下选择添加新的Interpreter,操作如下图所示:
选择自己创建的Linux_distribution,然后Next:
Virtualenv Enviroment–Existing–点击…–选择这个路径 \wsl$\Ubuntu-22.04\home\username\anaconda3\envs\cu118py310\bin\python3,Create。
等待片刻,新的环境就配置好了。然后就可以使用这个环境训练跑起来!
- 本文作者: 李宝璐
- 本文链接: https://libaolu312.github.io/2023/10/25/在windows11下安装ubuntu子系统并配置深度学习环境/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!