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 htopbuild-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=2GBmemory是最大内存,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/simpleconda 的镜像前面已经讲过了。
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 available | PyTorch 的 CUDA 版本和显卡算力不匹配 | 重装匹配的 PyTorch 版本 |
nvidia-smi: command not found | CUDA Toolkit 没装或路径没配 | 检查~/.bashrc里的 PATH |
torch.cuda.is_available() returns False | 装成了 CPU 版 PyTorch | 卸载重装 GPU 版 |
OSError: libcudart.so.12: cannot open shared object file | LD_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 --updateNVIDIA 驱动也建议保持较新版本,尤其是你打算用新出的 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。