当前位置:首页 > 系统教程 > 正文

WSL2-Ubuntu深度学习环境配置全攻略(从零搭建到模型训练)

WSL2-Ubuntu深度学习环境配置全攻略(从零搭建到模型训练)

WSL2-Ubuntu深度学习环境配置全攻略(从零搭建到模型训练) WSL2 Ubuntu深度学习配置  WSL2训练模型 Ubuntu深度学习环境 GPU加速 第1张

在Windows系统上利用WSL2(Windows Subsystem for Linux 2)安装Ubuntu,并配置深度学习环境,是许多开发者兼顾日常使用和模型训练的理想选择。本文将带你一步步完成WSL2 Ubuntu深度学习配置,并成功运行一个深度学习模型训练示例,帮助你快速上手Ubuntu深度学习环境搭建,并充分利用WSL2 GPU加速功能。

1. 安装WSL2与Ubuntu

首先确保Windows系统版本满足要求(Windows 10 版本2004及以上或Windows 11)。以管理员身份打开PowerShell,执行以下命令启用WSL功能并设置默认版本为WSL2:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-version 2

重启电脑后,在Microsoft Store搜索“Ubuntu”并安装(推荐Ubuntu 20.04或22.04 LTS)。安装完成后启动,设置用户名和密码。

2. 更新系统与基础工具

进入Ubuntu终端,首先更新软件包列表并升级已安装软件:

sudo apt update && sudo apt upgrade -ysudo apt install build-essential curl wget git -y

3. 安装NVIDIA驱动与CUDA(WSL2专用)

WSL2中无需在Linux内安装NVIDIA驱动,只需在Windows主机上安装最新的NVIDIA驱动(支持WSL2)。然后到NVIDIA官网下载适用于WSL2的CUDA Toolkit安装包。以CUDA 11.8为例:

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.runsudo sh cuda_11.8.0_520.61.05_linux.run

安装时取消勾选“Driver”,仅安装CUDA Toolkit。安装后配置环境变量:

echo "export PATH=/usr/local/cuda-11.8/bin:$PATH" >> ~/.bashrcecho "export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH" >> ~/.bashrcsource ~/.bashrc

4. 安装Miniconda与Python环境

下载并安装Miniconda:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash Miniconda3-latest-Linux-x86_64.sh

按提示完成安装,重启终端或执行source ~/.bashrc激活conda。创建并激活一个深度学习虚拟环境:

conda create -n dl python=3.9conda activate dl

5. 安装深度学习框架(以PyTorch为例)

在激活的dl环境中,安装支持CUDA的PyTorch:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

验证CUDA是否可用:

python -c "import torch; print(torch.cuda.is_available())"

若输出True,则WSL2 GPU加速配置成功。

6. 安装Jupyter Notebook(可选)

为了方便交互式开发,可以安装Jupyter:

pip install jupyterjupyter notebook --ip=0.0.0.0 --port=8888 --no-browser

然后在Windows浏览器中访问http://localhost:8888即可。

7. 训练第一个深度学习模型(MNIST)

下面我们用PyTorch训练一个简单的卷积神经网络在MNIST数据集上,验证整个环境是否正常工作。创建一个Python脚本train_mnist.py

import torchimport torch.nn as nnimport torch.optim as optimfrom torchvision import datasets, transformsdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")print(f"Using device: {device}")# 定义简单的CNNclass SimpleCNN(nn.Module):    def init(self):        super(SimpleCNN, self).init()        self.conv1 = nn.Conv2d(1, 32, 3, 1)        self.conv2 = nn.Conv2d(32, 64, 3, 1)        self.fc1 = nn.Linear(9216, 128)        self.fc2 = nn.Linear(128, 10)    def forward(self, x):        x = self.conv1(x)        x = nn.functional.relu(x)        x = self.conv2(x)        x = nn.functional.relu(x)        x = nn.functional.max_pool2d(x, 2)        x = torch.flatten(x, 1)        x = self.fc1(x)        x = nn.functional.relu(x)        x = self.fc2(x)        return nn.functional.log_softmax(x, dim=1)# 加载MNIST数据transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])train_dataset = datasets.MNIST("./data", train=True, download=True, transform=transform)train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)model = SimpleCNN().to(device)optimizer = optim.Adam(model.parameters())model.train()for epoch in range(1, 4):    for batch_idx, (data, target) in enumerate(train_loader):        data, target = data.to(device), target.to(device)        optimizer.zero_grad()        output = model(data)        loss = nn.functional.nll_loss(output, target)        loss.backward()        optimizer.step()        if batch_idx % 100 == 0:            print(f"Epoch {epoch} [{batch_idx*len(data)}/{len(train_loader.dataset)}] Loss: {loss.item():.6f}")print("训练完成!")

运行脚本:

python train_mnist.py

如果一切顺利,你将看到GPU上的训练过程,至此你已经成功在WSL2 Ubuntu深度学习环境中完成了第一个深度学习模型训练任务。

8. 常见问题与优化

- 确保Windows防火墙允许WSL2访问网络。 - 若CUDA不可用,检查Windows驱动版本和WSL2内核更新。 - 可调整.wslconfig文件限制WSL2内存和CPU使用,避免占用过多宿主机资源。

通过本文,你从零开始完成了WSL2 Ubuntu深度学习配置,并实际运行了模型训练。现在你可以在此基础上开展更复杂的深度学习项目,享受WSL2带来的高效开发体验。