news 2026/10/28 14:22:10

Windows 上搭建 WSL2 + GPU 直通深度学习环境全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows 上搭建 WSL2 + GPU 直通深度学习环境全攻略

1. 为什么要在 Windows 上折腾 WSL2 而不是装双系统

很多人第一次接触深度学习开发时,都会面临一个经典的选择题:到底是在 Windows 上直接跑,还是装个 Ubuntu 双系统,或者干脆买台 Linux 服务器。我前后试过这三种方案,最后稳定下来的工作流是 WSL2 + GPU 直通。这不是因为它完美,而是它在"折腾成本"和"实际性能"之间找到了一个让我愿意长期用的平衡点。

先说双系统的问题。装双系统意味着每次切换要重启,Windows 下写了一半的代码、开着的浏览器标签、正在跑的微信,全都要关掉。更麻烦的是磁盘分区,Ubuntu 那边给少了不够用,给多了 Windows 这边又紧张。我有一台 512G 的笔记本,分给 Ubuntu 150G,结果跑两个大模型的数据集就满了,迁移数据又是一通折腾。而且双系统下访问 Windows 的文件需要挂载,权限问题经常让人抓狂。

再说纯 Windows 方案。PyTorch 和 CUDA 在 Windows 上确实能跑,但生态的坑明显更多。很多开源项目默认就是 Linux 环境,安装脚本是.sh而不是.bat,依赖里动不动就是apt-get install。你可能会说可以用 conda 绕过去,但遇到需要编译的库,比如某些自定义 CUDA 算子、flash-attention这类,Windows 下的编译工具链能把人逼疯。我印象最深的一次是装bitsandbytes,Windows 下折腾了两个小时没搞定,换到 WSL2 里一条pip install就过了。

WSL2 的核心价值在于:它是一个真正的 Linux 内核,跑在轻量级虚拟机里,但和 Windows 的文件系统、网络、GPU 是打通的。你可以在 Windows 的终端里直接wsl进入 Ubuntu,也可以在 VS Code 里用 Remote-WSL 插件无缝编辑 Linux 里的代码。GPU 直通意味着 CUDA 和 PyTorch 能直接调用你 Windows 主机上的显卡,不需要额外配置。实测下来,同一张 RTX 3060,WSL2 里跑 PyTorch 训练的速度和原生 Ubuntu 差距在 3% 以内,日常开发完全够用。

这篇文章适合谁?如果你是用 Windows 笔记本或台式机做 AI 开发,手上有 NVIDIA 显卡,想用 Linux 生态但又不想放弃 Windows 的便利,那 WSL2 就是为你准备的。如果你完全没碰过 Linux 命令行,也不用怕,我会把每一步都拆开讲,包括那些官方文档里不会写的坑。

2. 装 WSL2 之前必须确认的三件事

2.1 系统版本和虚拟化支持

WSL2 对系统有硬性要求:Windows 10 版本 2004 及以上(内部版本 19041+),或者 Windows 11。检查方法很简单,按Win + R输入winver,看版本号。如果是 Windows 10 但版本太低,先去 Windows Update 升到最新。

虚拟化是另一个容易忽略的点。WSL2 底层用的是 Hyper-V 的轻量级虚拟化技术,所以 BIOS 里的虚拟化必须打开。怎么确认?打开任务管理器,切到"性能"标签,看 CPU 那一栏,如果右下角显示"虚拟化:已启用",就没问题。如果显示"已禁用",需要重启进 BIOS,找到Intel VT-x或AMD-V选项打开。不同主板的位置不一样,华硕一般在 Advanced 菜单下,联想在 Configuration 里,实在找不到就搜你主板型号加"开启虚拟化"。

还有一个坑:如果你之前装过 VMware 或 VirtualBox,它们可能和 Hyper-V 冲突。VMware Workstation 15.5 以后的版本已经兼容了,但老版本需要升级。VirtualBox 6.0 以后也支持,但性能会受影响。我的建议是,如果主要用 WSL2,就把 VirtualBox 卸了,避免莫名其妙的冲突。

2.2 显卡驱动的正确安装方式

这是最容易踩坑的地方。很多人以为 WSL2 里要单独装 NVIDIA 驱动,其实不是。正确的做法是:只在 Windows 主机上装驱动,WSL2 里不要装驱动,只装 CUDA Toolkit。

具体来说,去 NVIDIA 官网下载 Windows 版的 Game Ready 或 Studio 驱动,安装。这个驱动里已经包含了 WSL2 需要的 GPU 直通组件。装完之后,在 PowerShell 里输入nvidia-smi,如果能看到显卡信息,说明 Windows 这边没问题。

然后进 WSL2 的 Ubuntu,不要运行apt install nvidia-driver-xxx这类命令。你只需要装 CUDA Toolkit,它会自动识别 Windows 主机传过来的 GPU。怎么验证?在 WSL2 里输入nvidia-smi,如果也能看到显卡信息,说明直通成功。如果报错command not found,说明 CUDA Toolkit 没装好,或者路径没配。

我踩过的一个坑是:先在 WSL2 里装了nvidia-cuda-toolkit(Ubuntu 仓库里的版本),结果和 Windows 驱动版本不匹配,nvidia-smi报错 "Failed to initialize NVML: Driver/library version mismatch"。解决办法是卸载 Ubuntu 仓库的版本,去 NVIDIA 官网下载对应的 CUDA Toolkit 安装包。版本对应关系很重要,后面会细说。

2.3 磁盘空间的规划

WSL2 默认把 Ubuntu 装在 C 盘,路径大概是C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...。这个目录会随着你装包、下数据集不断膨胀。我见过有人 C 盘被 WSL2 吃掉 100G 的案例。

如果你 C 盘空间紧张,有两个方案。一是装的时候就指定安装位置,用wsl --import命令手动导入发行版到 D 盘。二是装完之后迁移,用wsl --export导出,再wsl --import导入到新位置。具体命令后面会讲。

另外,WSL2 的虚拟磁盘文件(ext4.vhdx)是动态增长的,但删除文件后不会自动缩小。也就是说,你下了 50G 数据集,用完删了,这 50G 空间不会还给 Windows。需要手动压缩,用diskpart或者Optimize-VHD命令。这个后面也会细说。

3. 从零开始:WSL2 和 Ubuntu 的安装实操

3.1 一条命令搞定 WSL2 安装

Windows 11 和较新的 Windows 10 版本,安装 WSL2 已经简化到一条命令。以管理员身份打开 PowerShell,输入:

wsl --install

这条命令会自动做几件事:启用 WSL 和虚拟机平台功能、下载 WSL2 内核、安装 Ubuntu 发行版。装完之后重启电脑,重启后会弹出一个 Ubuntu 窗口,让你设置用户名和密码。

如果你想要指定发行版,比如 Ubuntu 22.04,可以先用wsl --list --online看有哪些可选,然后:

wsl --install -d Ubuntu-22.04

我推荐用 Ubuntu 22.04 LTS,因为它的软件源比较新,Python 3.10 是默认版本,对 PyTorch 和 CUDA 的支持都很好。Ubuntu 20.04 也能用,但 Python 3.8 有点老,有些新库要求 3.9+。

如果wsl --install报错,比如提示"WSL 尚未准备就绪",通常是两个原因:一是虚拟化没开,二是 Windows 功能没启用。手动启用的命令是:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然后重启,再运行wsl --install。

3.2 把 Ubuntu 装到 D 盘的正确姿势

默认装到 C 盘的问题前面说了,如果你一开始就想装到 D 盘,流程是这样的。先确保 WSL2 已经启用,但还没装 Ubuntu。然后去 Microsoft Store 或者用命令行下载 Ubuntu 的安装包,但先不启动。

更稳妥的方式是用wsl --import。先从官网下载 Ubuntu 22.04 的 rootfs 压缩包(大约 300MB),然后:

mkdir D:\WSL\Ubuntu-22.04 wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\下载\ubuntu-22.04-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

导入完成后,用wsl -d Ubuntu-22.04启动。第一次启动会直接进 root 用户,需要自己创建普通用户:

adduser yourname usermod -aG sudo yourname

然后设置默认用户,在 PowerShell 里:

ubuntu2204 config --default-user yourname

注意,ubuntu2204这个命令名取决于你导入时的发行版名称,如果是自定义名称,可能需要用wsl --manage或者修改注册表。这个坑我踩过,导入的发行版没有config命令,得手动改/etc/wsl.conf:

[user] default=yourname

然后wsl --shutdown重启生效。

3.3 装完后的第一件事:换源和更新

Ubuntu 默认的软件源在国外,国内下载速度可能很慢。换源是第一步。编辑/etc/apt/sources.list:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo nano /etc/apt/sources.list

把archive.ubuntu.com和security.ubuntu.com替换成国内镜像,比如清华源或阿里源。Ubuntu 22.04 的清华源配置是:

deb 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 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

保存后运行:

sudo apt update && sudo apt upgrade -y

这一步会更新所有已安装的包,可能需要几分钟。更新完之后,装一些基础工具:

sudo apt install -y build-essential git curl wget vim htop

build-essential包含了 gcc、g++、make 等编译工具,后面装 Python 包时经常需要编译,这个必须装。

4. GPU 直通:CUDA Toolkit 的版本选择与安装

4.1 版本对应关系:别让驱动和 CUDA 打架

CUDA Toolkit 的版本不是随便选的,它要和 Windows 主机的 NVIDIA 驱动版本匹配。每个 CUDA 版本都有一个最低驱动版本要求。比如 CUDA 12.1 要求 Windows 驱动版本不低于 527.41,CUDA 11.8 要求不低于 452.39。

怎么查?在 Windows 的 PowerShell 里输入nvidia-smi,右上角会显示 "CUDA Version: 12.1" 之类的信息。这个数字表示你的驱动最高支持的 CUDA 版本。你可以装比这个低的版本,但不能装比它高的。

比如你的驱动显示 CUDA 12.1,那你可以装 CUDA 12.1、12.0、11.8,但不能装 12.2。装高了会报错 "CUDA driver version is insufficient for CUDA runtime version"。

我的建议是:如果你的驱动比较新,直接装 CUDA 12.1 或 12.4,因为 PyTorch 2.x 对这两个版本支持最好。如果驱动比较老,先升级驱动,再装 CUDA。升级驱动比降级 CUDA 简单得多。

4.2 在 WSL2 里装 CUDA Toolkit 的完整步骤

首先,去 NVIDIA 的 CUDA Toolkit 下载页面,选择 Linux -> x86_64 -> WSL-Ubuntu -> 2.0 -> deb (local)。注意一定要选WSL-Ubuntu,不要选普通的 Ubuntu,因为 WSL 版的安装包不会包含驱动,只包含 Toolkit。

以 CUDA 12.1 为例,下载后运行:

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 wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda-repo-wsl-ubuntu-12-1-local_12.1.0-1_amd64.deb sudo dpkg -i cuda-repo-wsl-ubuntu-12-1-local_12.1.0-1_amd64.deb sudo cp /var/cuda-repo-wsl-ubuntu-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cuda

装完之后,配置环境变量。编辑~/.bashrc:

export PATH=/usr/local/cuda-12.1/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

然后source ~/.bashrc,输入nvcc -V,如果显示 CUDA 版本,说明装好了。再输入nvidia-smi,如果能看到显卡信息,说明 GPU 直通成功。

这里有个细节:nvidia-smi在 WSL2 里显示的驱动版本是 Windows 主机的版本,不是 WSL2 里装的。这是正常的,因为驱动是直通的,WSL2 里没有独立的驱动。

4.3 验证 GPU 是否真的可用

装完 CUDA 后,别急着装 PyTorch,先用一个简单的方法验证 GPU 是否真的能被调用。装一个cuda-toolkit自带的 sample:

cd /usr/local/cuda-12.1/samples/1_Utilities/deviceQuery sudo make ./deviceQuery

如果输出 "Result = PASS",说明 GPU 直通完全正常。如果报错,通常是两个原因:一是 Windows 驱动版本太低,二是 WSL2 的内核版本太老。更新 WSL2 内核的命令是wsl --update。

另一个验证方法是装 PyTorch 后跑:

import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))

如果输出True和你的显卡型号,就说明一切正常。

5. PyTorch 环境搭建:conda 还是 venv

5.1 为什么我最终选了 conda

Python 环境管理工具有很多,venv、virtualenv、conda、pipenv、poetry。在 AI 开发场景下,我推荐 conda,原因有三个。

第一,conda 不仅能管理 Python 包,还能管理非 Python 的依赖,比如 CUDA Toolkit、cuDNN、MKL 这些。用 conda 装 PyTorch 时,它会自动帮你装匹配的 CUDA 版本,省去了手动配置的麻烦。第二,conda 的环境隔离更彻底,不同环境可以用不同的 Python 版本,互不干扰。第三,很多 AI 库的官方安装文档都优先推荐 conda,比如 PyTorch 官网的安装命令就是 conda 和 pip 并列。

当然 conda 也有缺点,比如体积大、有时候解析依赖很慢。但相比它带来的便利,这些都能接受。

安装 Miniconda(比 Anaconda 轻量):

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

一路回车,最后问是否conda init,选 yes。然后source ~/.bashrc,conda命令就能用了。

这里有个坑:如果你在 PowerShell 里直接输入conda activate,会报错 "无法将 conda 项识别"。这是因为 conda 装在 WSL2 里,PowerShell 访问不到。你必须在 WSL2 的终端里操作,或者在 VS Code 的 WSL 终端里操作。

5.2 创建 PyTorch 环境的正确命令

创建环境时,Python 版本选 3.10 或 3.11,这两个版本对 PyTorch 2.x 支持最好:

conda create -n pytorch python=3.10 -y conda activate pytorch

然后装 PyTorch。去 PyTorch 官网的安装页面,选择你的配置:PyTorch 2.1、CUDA 12.1、conda。它会给你一条命令:

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

这条命令会从 pytorch 和 nvidia 两个 channel 下载包。国内下载可能很慢,可以配置 conda 的国内镜像。编辑~/.condarc:

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 custom_channels: pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud nvidia: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

注意,PyTorch 的 CUDA 包在清华源里可能不是最新的,如果装不上,就换回官方源,或者用 pip 装。

5.3 pip 和 conda 混用的注意事项

很多人会 conda 装一部分,pip 装另一部分。这样做可以,但要注意顺序:先用 conda 装,再用 pip 装。因为 conda 在解析依赖时,如果发现某个包已经被 pip 装了,可能会覆盖或者冲突。

另外,pip 装的包不会出现在conda list里(除非用pip list),所以排查问题时要注意。我的习惯是,核心的 PyTorch、CUDA 相关用 conda 装,其他的小库用 pip 装。

还有一个常见问题:装完 PyTorch 后,torch.cuda.is_available()返回False。原因通常是 PyTorch 装成了 CPU 版本。检查方法:

import torch print(torch.version.cuda)

如果输出None,说明是 CPU 版。解决办法是卸载重装,确保安装命令里带了pytorch-cuda=12.1这个参数。

6. 那些官方文档不会告诉你的坑

6.1 WSL2 内存占用过高的问题

WSL2 默认会占用最多 50% 的物理内存,而且不会自动释放。如果你有 16G 内存,WSL2 可能吃掉 8G,Windows 这边就紧张了。解决办法是限制 WSL2 的内存使用。

在 Windows 用户目录下创建.wslconfig文件(路径是C:\Users\你的用户名\.wslconfig),内容:

[wsl2] memory=8GB processors=4 swap=2GB

memory是最大内存,processors是 CPU 核心数,swap是交换空间。根据你的机器配置调整。改完后wsl --shutdown重启生效。

我一般设成物理内存的一半,比如 16G 内存设 8G,32G 设 16G。这样既够用,又不会把 Windows 拖垮。

6.2 磁盘空间不释放的解决办法

前面提到,WSL2 的虚拟磁盘只增不减。你删了文件,空间不会自动还给 Windows。手动压缩的步骤:

首先,在 WSL2 里清理无用文件:

sudo apt autoremove sudo apt clean

然后关闭 WSL2:

wsl --shutdown

找到虚拟磁盘文件,通常在C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx。用 diskpart 压缩:

diskpart select vdisk file="C:\path\to\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit

这个过程可能需要几分钟,压缩完后空间就释放了。我一般每个月做一次,能释放好几个 G。

6.3 文件系统性能:别在 /mnt/c 下跑训练

WSL2 访问 Windows 文件是通过/mnt/c、/mnt/d这样的挂载点。这个访问是跨文件系统的,性能很差。如果你把数据集放在/mnt/d/datasets,然后在这个目录下跑训练,数据加载速度会慢好几倍。

正确的做法是把数据放在 WSL2 自己的文件系统里,比如~/datasets。如果数据本来在 Windows 盘上,先复制进来:

cp /mnt/d/datasets/imagenet ~/datasets/

复制可能花点时间,但训练时的速度提升是值得的。我实测过,同样一个数据集,在/mnt/d下加载需要 2 秒一个 batch,在~/datasets下只要 0.3 秒。

6.4 网络代理和下载速度

WSL2 的网络是 NAT 模式,和 Windows 主机共享网络,但 IP 是独立的。如果你在 Windows 上配了代理,WSL2 里默认用不了。需要在 WSL2 里单独配。

不过这里不展开代理的配置,因为涉及的内容比较敏感。简单说,如果你下载 pip 包或 conda 包很慢,优先用国内镜像源,这是最稳妥的方案。pip 的镜像配置:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

conda 的镜像前面已经讲过了。

7. 让开发体验更顺滑的几个配置

7.1 VS Code Remote-WSL:无缝编辑 Linux 代码

这是 WSL2 最爽的功能之一。装 VS Code 和 Remote-WSL 插件后,你可以在 Windows 的 VS Code 里直接打开 WSL2 里的项目,编辑、调试、跑终端,全都无缝。

具体操作:在 WSL2 终端里进入项目目录,输入code .,VS Code 会自动在 Windows 端打开,并连接到 WSL2。左下角会显示 "WSL: Ubuntu-22.04"。这时候你装的 Python 插件、Jupyter 插件都是在 WSL2 环境里运行的,能直接调用 GPU。

我建议在 WSL2 里也装一下 VS Code Server 的依赖:

sudo apt install -y python3-pip python3-venv

这样 VS Code 的 Python 插件能更好地识别环境。

7.2 Jupyter Notebook 的远程访问

如果你习惯用 Jupyter Notebook,在 WSL2 里启动后,Windows 的浏览器可以直接访问。启动命令:

jupyter notebook --no-browser --port=8888

它会输出一个带 token 的 URL,复制到 Windows 浏览器就能打开。因为 WSL2 和 Windows 的网络是打通的,localhost 是共享的,所以不需要额外配置端口转发。

如果你想让 Jupyter 在后台跑,用nohup或者tmux:

tmux new -s jupyter jupyter notebook --no-browser --port=8888

按Ctrl+B然后D脱离会话,Jupyter 继续在后台运行。下次用tmux attach -t jupyter回来。

7.3 常用命令的别名配置

WSL2 里有些命令很长,配别名能省不少事。编辑~/.bashrc,加几行:

alias ll='ls -alF' alias gs='git status' alias gp='git pull' alias activate='conda activate' alias nv='nvidia-smi'

然后source ~/.bashrc。这些小配置看起来不起眼,但日积月累能省很多敲键盘的时间。

8. 跑通第一个 GPU 训练任务

8.1 用 MNIST 做一次完整的验证

环境搭好了,跑个简单的训练验证一下。创建一个test_gpu.py:

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(f"Using device: {device}") transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(784, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = x.view(-1, 784) x = torch.relu(self.fc1(x)) x = self.fc2(x) return x model = Net().to(device) optimizer = optim.Adam(model.parameters(), lr=0.001) criterion = nn.CrossEntropyLoss() for epoch in range(3): for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() if batch_idx % 100 == 0: print(f"Epoch {epoch}, Batch {batch_idx}, Loss: {loss.item():.4f}")

运行python test_gpu.py,如果看到 "Using device: cuda" 并且 loss 在下降,说明整个链路都通了。

8.2 性能对比:WSL2 vs 原生 Windows

我在这台机器上做过对比测试,配置是 i7-12700H + RTX 3060 Laptop + 32G 内存。同样的 MNIST 训练脚本,原生 Windows 下每个 epoch 大约 12 秒,WSL2 下大约 12.5 秒,差距在 4% 左右。对于更大的模型,比如 ResNet-50 在 ImageNet 上,差距会更小,因为 GPU 计算占主导,文件系统和 CPU 的开销占比降低。

这个性能损失换来的是完整的 Linux 生态和开发便利性,我认为是值得的。如果你追求极致性能,那还是装原生 Ubuntu,但对大多数人来说,WSL2 完全够用。

8.3 常见报错和排查思路

跑训练时可能遇到的报错,我整理了几个常见的:

报错信息原因解决办法
CUDA out of memory显存不够减小 batch size,或者用torch.cuda.empty_cache()
RuntimeError: CUDA error: no kernel image is availablePyTorch 的 CUDA 版本和显卡算力不匹配重装匹配的 PyTorch 版本
nvidia-smi: command not foundCUDA Toolkit 没装或路径没配检查~/.bashrc里的 PATH
torch.cuda.is_available() returns False装成了 CPU 版 PyTorch卸载重装 GPU 版
OSError: libcudart.so.12: cannot open shared object fileLD_LIBRARY_PATH 没配添加 CUDA 的 lib64 到 LD_LIBRARY_PATH

排查 CUDA 问题的通用思路是:先确认 Windows 主机的nvidia-smi正常,再确认 WSL2 里的nvidia-smi正常,然后确认nvcc -V正常,最后确认 PyTorch 的torch.cuda.is_available()正常。一层一层往下查,基本能定位到问题。

9. 长期使用中的维护建议

9.1 定期更新 WSL2 内核和驱动

WSL2 的内核会不定期更新,修复 bug 和提升性能。更新命令:

wsl --update

NVIDIA 驱动也建议保持较新版本,尤其是你打算用新出的 CUDA 版本时。但不要盲目追新,如果当前环境稳定,没必要频繁升级。我的习惯是每两三个月检查一次更新,确认新版本没有已知的严重问题再升。

9.2 环境备份和迁移

conda 环境可以导出成 yaml 文件,方便备份和迁移:

conda env export > environment.yml

在新机器上恢复:

conda env create -f environment.yml

但注意,这个 yaml 里包含了 CUDA 相关的包,如果新机器的 CUDA 版本不同,可能需要手动调整。更稳妥的方式是只导出 pip 包列表:

pip freeze > requirements.txt

然后在新的 conda 环境里pip install -r requirements.txt,CUDA 相关的包单独装。

9.3 什么时候该考虑换方案

WSL2 不是万能的。如果你遇到以下情况,可能需要考虑原生 Ubuntu 或者云服务器:

  • 需要长时间跑大规模训练,对稳定性要求极高
  • 需要用到 WSL2 不支持的内核模块或硬件直通
  • 需要多卡训练,WSL2 对多卡的支持有限
  • 磁盘 I/O 成为瓶颈,WSL2 的文件系统性能无法满足

但对我日常的开发、调试、小规模训练来说,WSL2 已经用了两年多,稳定性没问题。偶尔遇到 WSL2 卡死,wsl --shutdown重启一下就好,比双系统重启快得多。

最后分享一个小技巧:如果你在 WSL2 里跑训练,同时想在 Windows 上监控 GPU 状态,可以在 PowerShell 里跑nvidia-smi -l 1,每秒刷新一次,和 WSL2 里的训练互不干扰。这样你能实时看到显存占用和 GPU 利用率,方便调整 batch size。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 22:13:45

DeepSeek Harness桌面端上手:API Key配置、插件市场与内网部署避坑指南

1. 从命令行到桌面窗口:DSH 这次到底补上了哪块拼图 DeepSeek Harness(圈内一般直接叫 DSH)最早是以命令行工具形态出现的,用的人大多是习惯在终端里敲命令的那批开发者。它的定位很明确:把大模型能力封装成一套可编排…

作者头像 李华
网站建设 2026/10/12 5:27:10

上下文模式(context-mode)实战指南:从原理到工程落地

1. 为什么说"context-mode"是一种工程模式,而不是一个传参技巧先讲一件真事。去年我们上线了一个高并发的活动页,上线当晚就收到反馈:部分用户看到的订单详情是别人的。一开始以为是缓存key设计错了,查了半天缓存没问题…

作者头像 李华
网站建设 2026/10/13 0:33:07

Agent-Reach 实战:CLI 驱动的 AI Agent 开发与 Python 集成指南

1. 从"Agent-Reach"这个名字说起:它到底想解决什么问题第一次看到"Agent-Reach"这个项目名,我的直觉是:这大概率是一个围绕 AI Agent 能力边界做文章的工具。Reach 这个词在工程语境里通常有两层含义,一层是&…

作者头像 李华
网站建设 2026/10/16 23:13:02

MySQL SSL加密配置实战:自建CA、服务端开启与连接排查

前阵子给一家公司做数据库迁移后的安全加固,安全团队抓包巡检的结果直接把我给看愣了:3306端口上跑的全是明文,包括应用账号的密码。这里说的不是公网,而是内网。但只要有一个人误装抓包工具、存在被挂马的跳板机、或者网络设备做…

作者头像 李华
网站建设 2026/10/13 0:33:05

Agent-Reach:让多Agent真正协同的触达与编排框架

刚接触过一批做 Agent 应用的朋友,大家伙儿聊到最后几乎都会落到同一个问题上:我这个 Agent 单个跑起来挺聪明,但一让它对接别的系统、调动别的 Agent、去碰真实业务数据,就立刻变得又笨又脆。你要是也有同样的困惑,那…

作者头像 李华
网站建设 2026/10/13 0:33:15

模块划分与依赖治理实战:从边界封装到方向把控

刚开始做系统架构的时候,我把“模块划分”理解成“多建几个文件夹”,把“依赖关系”理解成“谁能调用谁”。几年下来,在几个大型后端项目里反复重构之后,我才意识到这两件事远不是目录和权限那么简单——模块划分的核心是边界封装…

作者头像 李华