admin 管理员组

文章数量: 887609

前言

最近在搭建基于 win11 的 WSL2 开发环境,找了很多教程也遇到了很多问题,历时两天终于搞定了。本文为首次搭建环境的朋友提供一站到底的帮助,保证一次到位,不走弯路😎

搭建的环境:WSL2 + Ubuntu22.04 + Clash(代理) + Miniconda3 + Pytorch(GPU支持)

BIOS 开启虚拟化支持

现在一般的主板都默认开启的(平时用的安卓模拟器都需要开),也可以检查和开启BIOS虚拟化支持

windows 启用子系统及虚拟化

  1. 打开控制面板
  2. 选择程序 -> 启用或关闭 Windows 功能
  3. 勾选Hyper-V适用于 Linux 的 Windows子系统虚拟机平台
  4. 点击确定
  5. 重启计算机

安装 WSL2

这里提供了命令行安装分步安装两种方法,也可以参考官网教程安装。

命令行安装

直接使用如下命令,安装默认的Linux分发版(截止2024-06-20,安装的是Ubuntu22.04

wsl --install

你也可以指定安装的Linux分发版

# 查看Linux分发(等同于 wsl -list -online)
wsl -l -o
# 安装指定分发
wsl --install -d Ubuntu-20.04

分步安装

安装内核更新包
  1. 下载适用于 x64 计算机的 WSL2 Linux 内核更新包
  2. 安装更新包,双击直接下一步即可
  3. 更新 WSL2(建议更新,后面也会提示你更新)
wsl --update
设置默认 WSL 版本
# 将 WSL 默认版本设置为 WSL2
wsl --set-default-version 2

配置 Linux 分发版

这里提供两种方法,第一种可能会失败,建议第二种。

(1)打开Microsoft Store,搜索Ubuntu,安装你需要的版本即可(不建议)。

获取后,等待 1-2 分钟,会提示你创建用户名和密码,等待安装完成。

(2)去官网下载安装包,手动安装(建议)

找到如图这个地方,点击下载你需要的分发版:

下载好后双击安装包,创建用户名密码后,等待安装完成。

至此我们已经完成 WSL 系统的安装。

迁移 WSL

WSL 默认安装在 C 盘,针对后续还要配置环境来说,肯定是不够的(什么?你C盘几百个G?当我没说…),这时就要把它迁移到其他盘。

  1. 查看正在运行的实例
wsl -l -v

(不用管我的名称为什么不一样,我已经安装过了)

  1. 终止正在运行的实例

(也有人说不需要终止也可以,我没测试过)

wsl --terminate <实例名称>
  1. 导出需要迁移的实例
wsl --export <实例名称> <迁移地址>

如:

wsl --export ubuntu2204 D:\ubuntu2204.tar
  1. 卸载原来的实例
wsl --unregister <实例名称>
  1. 导入实例到其他盘(–version 2 可以不加,之前已经默认了 WSL2)
wsl --import <新的实例名称> <新的实例导入地址> <导入实例的地址> --version 2

如:

wsl --import new_ubuntu2204 D:\wsl\ D:\ubuntu2204.tar --version 2

导入完成后,可以通过 cmd(也就是Windows Terminal) 进入系统:

  1. 安装完成后,可以在 Windows 的资源管理器看到 Ubuntu 的文件目录

在这里面你可以很方便的管理系统文件,以及在 windows 和 Ubuntu 系统间互传文件。

网络代理配置(Clash)

从事机器学习的你,相信一定会对某些网站的网速十分头疼,这时候就要启用我们的代理了。

❗︎这里只针对 WSL2,WSL1 请自行百度。

  1. C:\Users\<你的用户名>下,新建.wslconfig文件

  1. 添加如下配置(具体配置参考官方文档):

精简版配置:

[experimental]

# 启用空闲内存自动缓慢回收
autoMemoryReclaim=gradual
# 启用镜像网络特性支持
networkingMode=mirrored
# WSL2/WSLg DNS 代理隧道,以便由 Windows 代理转发 DNS 请求(请根据实际需要启用)
dnsTunneling=true
# WSL2/WSLg 子系统的 Windows 防火墙集成,以便 Hyper-V 或者 WPF 能过滤子系统流量(请根据实际需要启用)
firewall=true
# 是否强制 WSL2/WSLg 子系统使用 Windows 代理设置(请根据实际需要启用)
autoProxy=true

更多的推荐配置

# 推荐的一些配置项如下
[wsl2]                      
 
# 是否强制 WSL2/WSLg 子系统使用 Windows 代理设置(请根据实际需要启用)
autoProxy=true
            
# WSL2/WSLg DNS 代理隧道,以便由 Windows 代理转发 DNS 请求(请根据实际需要启用)
dnsTunneling=true           
 
# WSL2/WSLg 子系统的 Windows 防火墙集成,以便 Hyper-V 或者 WPF 能过滤子系统流量(请根据实际需要启用)
firewall=true
 
# 启用 WSLg GUI 图形化程序支持
guiApplications=true
 
 # 启用 IPv6 网络支持
ipv6=true                   
 
# 启用 localhost 网络转发支持
localhostForwarding=true 
 
 # 限制 WSL2/WSLg 子系统的最大内存占用
memory=4GB
 
# 启用 WSL2/WSLg 子系统嵌套虚拟化功能支持
nestedVirtualization=true   
 
# 启用镜像网络特性支持
networkingMode=mirrored
 
# 启用 WSL2/WSLg 子系统页面文件通报,以便 Windows 回收已分配但未使用的内存
#pageReporting=true
 
# 设置 WSL2/WSLg 子系统的逻辑 CPU 核心数为 8(最大肯定没法超过硬件的物理逻辑核心数)
processors=8
 
# 实验性功能
[experimental]
 
# 启用空闲内存自动缓慢回收
autoMemoryReclaim=gradual
 
# 启用 WSL2/WSLg 子系统和 Windows 宿主之间的本地回环互通支持
hostAddressLoopback=true
 
 # 启用 WSL2/WSLg 子系统虚拟硬盘空间自动回收
sparseVhd=true
 
# 和 dnsTunneling 配合使用,决定是否使用 Windows DNS 缓存池
useWindowsDnsCache=false
  1. 重启 WSL 实例
wsl --shutdown

GPU 支持

安装 NVIDIA 驱动

❗︎注意:在 windows 安装

去官网下载一个 NVIDIA 驱动(如果你有,查看一下cuda版本,如果太低了Pytorch都不支持这个版本,就更新一下😊)。

安装完成后,在 cmd 输入nvidia-smi出现如下信息代表安装成功:

此时你的 WSL 里输入nvidia-smi也应该出现类似的信息:

安装 CUDA

  1. 在官网里下载 CUDA,一定要对应版本,比如你安装的驱动支持的CUDA版本是 12.1,那么就下载CUDA Toolkit 12.1.0

  1. 按图所示选择,这里最好选择runfile,安装最简单(主要是其他的我没试过👻)

  1. 按照官方文档,执行最下方红框内的命令

这个文件特别大(4.5GB左右),注意开代理😉

# 打开要下载的目录
cd /usr/local
# 下载
wget https://developer.download.nvidia/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
  1. 下载好之后先别急,安装gcc依赖
# 更新 apt
sudo apt update
# 这个命令将会安装一系列软件包,包括 gcc、g++ 和 make。
sudo apt install build-essential

这将会安装默认的 gcc 11.x 版本(截止2024-06-20),包含了 gcc 9 和 10 版本。

  1. 执行安装
sudo sh cuda_12.1.0_530.30.02_linux.run

如果安装还报错,降低 gcc 最高优先级版本:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10

安装完成后,列表如下图

可以看到,有一个cuda指向了cuda-12.4的软连接。

  1. 配置环境变量

执行命令,配置cuda到系统环境变量里

# 打开系统环境变量
vim /root/.bashrc
# 添加如下信息到文件末尾
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

如图,添加完后保存

使配置生效

source /root/.bashrc

Python 环境管理(Miniconda3)

系统配置好之后,为了方便管理Python的环境和包,还需要安装 Miniconda3。

  1. 下载Miniconda3
# 打开下载目录
cd /usr/local
# 下载
wget https://repo.anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
  1. 安装
sh Miniconda3-latest-Linux-x86_64.sh

安装过程中,会有一系列确认操作(我本地已经安装了,为了演示,我在阿里云服务器安装的)

输入回车,查看许可协议

输入q退出协议阅读,输入yes同意协议

输入安装位置,如果直接按回车,会安装到默认位置/root/miniconda3,这里我输入的是/usr/local/miniconda3

是否在shell启动时初始化base环境,这里推荐输入yes,不然在你执行conda命令时会有点麻烦,参考第3步

回车后安装完成,就会在我们指定的安装位置有一个miniconda3文件

输入命令出现如图代表安装成功

conda -V

  1. 如果你在启动时初始化base环境选择了no,要手动配置环境变量
# 打开系统环境变量
vim /root/.bashrc
# 文件末尾添加
export PATH=/usr/local/miniconda3/bin:$PATH
# 使配置生效
source /root/.bashrc

❗︎注意:当你每次创建会话执行conda命令时,必须首先激活base环境,之前选的yes则不需要,如:

# 激活base环境
source activate
# 进入其他环境
conda activate my_env

如果不想每次都这样操作,执行以下命令就可以了

conda init
  1. 修改镜像源

我们知道,使用默认的镜像源,会有让人头疼的网速问题,这里我们就需要更改镜像源了。

创建并打开 conda 配置文件

vim /usr/local/miniconda3/.condarc

创建环境和包存储地址

mkdir -p /data/Miniconda3/envs
mkdir -p /data/Miniconda3/pkgs

添加如下配置信息,我使用的是清华源

# 通道列表
channels:
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/msys2
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/msys2/
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/bioconda/
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/menpo/
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/pytorch-lts
  - https://mirrors.tuna.tsinghua.edu/anaconda/cloud/simpleitk
  - defaults
# 环境存储地址
envs_dirs:
  - /data/Miniconda3/envs
# 包存储地址
pkgs_dirs:
  - /data/Miniconda3/pkgs
# 显示搜索的通道列表
show_channel_urls: true
# 启动新的终端会话时是否自动激活base环境
auto_activate_base: false

修改pip的下载源

pip config set global.index-url https://pypi.mirrors.ustc.edu/simple

执行完成后,会发现在/root/.config/pip下生成了一个pip.conf文件

安装 Pytorch GUP 版

这里讲述一下如何在WSL2自己的环境里安装Pytorch GPU版本。

创建环境

首先创建一个环境,Python版本建议>=3.8

conda create -n <环境名称> python=3.9

下载

网上很多教程都叫你执行命令下载安装,但这样下载很缓慢,开了科学上网又访问不到,这里教大家如何浏览器下载后手动安装,你有更好的方法也可以略过。

打开官网下载链接,拉到底部,找到torchtorchvisiontorchaudio

分别点进去下载对应的版本,torchtorchaudio保持一致,torchvision对应好版本即可,可以打开官网看看

比如你是CUDA 12.1 + python 3.9,想下载torch 2.3.0,就在浏览器Ctrl + Ftorch-2.3.0+cu121-cp39,下载Linux版即可。

相信你也看出来了,规则就是<软件>-<版本>+cu<cuda版本>-cp<python版本>,下载完之后类似这样:

下载完成后,复制到WSL系统下,如图:

安装

进入WSL系统对应目录下,进入环境安装好这三个包:

# 进入环境
conda activate <你的环境>
# 安装三个包
pip install torch-2.2.0+cu121-cp39-cp39-linux_x86_64.whl
pip install ...(这是省略号,别当成命令了)

验证

验证是否安装成功

# 进入 python
python
# 验证
import torch
torch.cuda.is_available()

如图,为True代表成功

结语

至此WSL2环境已配置成功,有问题欢迎在评论区探讨。

参考文档

感谢:

  • windows11 安装WSL2全流程
  • WSL2 的开发环境配置 (基础配置, 网络代理, CUDA, Python, Fortran, Latex, 服务器配置)
  • 如何用conda安装PyTorch(windows、GPU)最全安装教程
  • Ubuntu系统下的gcc升降版本 保姆级教程
  • 【AI】搭建Windows Linux子系统(WSL2)CUDA环境

本文标签: 运行环境