别再折腾双系统了!用Win11的WSL2搭建Ubuntu22.04深度学习环境(CUDA+PyTorch)保姆级避坑指南
别再折腾双系统了!用Win11的WSL2搭建Ubuntu22.04深度学习环境(CUDA+PyTorch)保姆级避坑指南
你是否曾经为了在Windows系统上运行Linux环境而反复折腾双系统?或者被虚拟机的性能问题困扰?现在,Win11的WSL2(Windows Subsystem for Linux 2)提供了一个完美的解决方案。本文将带你一步步在WSL2中搭建Ubuntu22.04深度学习环境,安装CUDA和PyTorch,并分享那些官方文档不会告诉你的实用技巧和避坑指南。
1. 为什么选择WSL2而不是双系统或虚拟机?
传统上,开发者在Windows上运行Linux环境主要有三种选择:双系统、虚拟机或WSL。让我们通过一个对比表格来看看它们的优劣:
| 特性 | 双系统 | 虚拟机 | WSL2 |
|---|---|---|---|
| 性能 | 高 | 低 | 接近原生 |
| 启动速度 | 慢 | 中等 | 快 |
| 资源占用 | 独占 | 高 | 低 |
| 系统切换 | 需要重启 | 无需重启 | 无需重启 |
| 文件共享 | 复杂 | 中等 | 无缝 |
| GPU支持 | 原生 | 有限 | 完整 |
WSL2的主要优势在于:
- 接近原生的性能 :WSL2使用轻量级虚拟机技术,性能损失极小
- 无缝集成 :可以直接在Windows资源管理器中访问Linux文件系统
- 完整的GPU支持 :通过WSLg可以直接运行Linux GUI应用
- 开发友好 :可以直接在VS Code中使用WSL作为开发环境
提示:如果你的主要工作是深度学习开发,WSL2提供了最佳的平衡点——既保留了Windows的易用性,又获得了Linux的开发环境。
2. 准备工作:安装WSL2和Ubuntu22.04
2.1 系统要求检查
在开始之前,请确保你的系统满足以下要求:
- Windows 11 21H2或更高版本
- 支持虚拟化的CPU(Intel VT-x或AMD-V)
- 至少16GB RAM(推荐32GB用于深度学习)
- NVIDIA显卡(CUDA支持需要)
2.2 启用WSL2功能
- 以管理员身份打开PowerShell,运行以下命令:
wsl --install
这个命令会自动启用所需的Windows功能并安装默认的Linux发行版。
- 如果你想手动控制安装过程,可以分步执行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 设置WSL2为默认版本:
wsl --set-default-version 2
2.3 安装Ubuntu22.04
- 打开Microsoft Store,搜索"Ubuntu 22.04 LTS"并安装
- 安装完成后,从开始菜单启动Ubuntu,它会自动完成初始化设置
- 设置用户名和密码(注意:这里设置的密码不会影响Windows系统)
注意:首次启动可能需要几分钟时间来完成初始化,请耐心等待。
3. 配置Ubuntu开发环境
3.1 更换国内软件源
为了加快软件下载速度,建议更换为国内镜像源:
- 备份原有源列表:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 编辑源列表:
sudo nano /etc/apt/sources.list
- 替换为阿里云镜像源(Ubuntu22.04):
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
- 更新软件包列表:
sudo apt update && sudo apt upgrade -y
3.2 安装基础开发工具
运行以下命令安装常用开发工具:
sudo apt install -y build-essential git curl wget vim zsh
4. 安装CUDA Toolkit和GPU驱动
4.1 Windows端准备工作
- 确保Windows端已安装最新版NVIDIA驱动
- 下载并安装WSL2专用的CUDA驱动(从NVIDIA官网下载)
4.2 WSL2中安装CUDA Toolkit
- 添加NVIDIA仓库密钥:
sudo apt-key del 7fa2af80
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
- 添加CUDA仓库:
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /"
- 安装CUDA Toolkit:
sudo apt update
sudo apt install -y cuda-toolkit-12-2
- 配置环境变量:
echo 'export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
- 验证安装:
nvcc --version
nvidia-smi
提示:如果nvidia-smi命令报错,请确保Windows端的NVIDIA驱动已正确安装,并且WSL2已重启。
5. 安装Miniconda和PyTorch
5.1 安装Miniconda
- 下载Miniconda安装脚本:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
- 安装Miniconda(建议安装在/opt目录):
sudo bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
- 配置环境变量:
echo 'export PATH="/opt/miniconda3/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
- 初始化conda(选择no以避免自动激活base环境):
conda init
- 配置conda清华镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
5.2 安装PyTorch
- 创建并激活conda环境:
conda create -n pytorch python=3.10
conda activate pytorch
- 安装PyTorch(根据你的CUDA版本选择):
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
- 验证PyTorch GPU支持:
python -c "import torch; print(torch.cuda.is_available())"
6. 常见问题与解决方案
6.1 WSL2内存占用过高
WSL2默认会使用最多50%的物理内存,可以通过创建
.wslconfig
文件来限制内存使用:
-
在Windows用户目录下创建或编辑
.wslconfig文件:
[wsl2]
memory=8GB
swap=4GB
localhostForwarding=true
- 重启WSL2:
wsl --shutdown
6.2 CUDA版本不兼容
如果遇到CUDA版本不兼容问题,可以尝试以下解决方案:
- 检查PyTorch支持的CUDA版本:
import torch
print(torch.version.cuda)
- 根据PyTorch要求的CUDA版本安装对应的CUDA Toolkit
6.3 文件系统性能问题
WSL2的Linux文件系统性能优于Windows文件系统,建议:
-
将项目文件放在Linux文件系统中(
/home/username) - 避免在Windows文件系统中直接操作Linux文件
7. 高级配置与优化
7.1 使用VS Code远程开发
- 在Windows上安装VS Code和"Remote - WSL"扩展
- 在WSL终端中进入项目目录并输入:
code .
这会自动在Windows端启动VS Code并连接到WSL环境
7.2 配置Zsh和Oh My Zsh
- 安装Zsh:
sudo apt install zsh
- 安装Oh My Zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
- 配置主题和插件:
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="agnoster"/' ~/.zshrc
echo 'plugins=(git python conda zsh-autosuggestions zsh-syntax-highlighting)' >> ~/.zshrc
7.3 配置Docker in WSL2
- 在Windows上安装Docker Desktop并启用WSL2后端
- 在WSL2中可以直接使用Docker命令
8. 实际项目中的应用示例
8.1 运行Jupyter Notebook
- 在conda环境中安装Jupyter:
conda install jupyter
- 启动Jupyter Notebook:
jupyter notebook --ip=0.0.0.0 --no-browser
- 在Windows浏览器中打开显示的URL
8.2 训练一个简单的PyTorch模型
创建一个简单的PyTorch训练脚本
train.py
:
import torch
import torch.nn as nn
import torch.optim as optim
# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")
# 创建一个简单的模型
model = nn.Sequential(
nn.Linear(10, 50),
nn.ReLU(),
nn.Linear(50, 1)
).to(device)
# 模拟数据
inputs = torch.randn(100, 10).to(device)
targets = torch.randn(100, 1).to(device)
# 训练循环
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
for epoch in range(100):
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")
运行脚本:
python train.py
在实际项目中,我发现WSL2的性能表现非常接近原生Linux系统,特别是在使用CUDA加速时几乎感觉不到性能损失。最大的优势是可以随时切换回Windows环境处理其他工作,而不需要重启系统。
更多推荐
所有评论(0)