注意:这篇文章上次更新于341天前,文章内容可能已经过时。
背景
工作学习要用 Ubuntu,打游戏要用 Windows,双系统的方案开关机不太方便,而且也不是很稳定,这一点在读研期间就尝试过。
听说 WSL2 可以在 Hyper-V 上直接运行 Linux(微软定制版 kernel),性能比 WSL1 有了很大提升。
所以本文要测试一下在 Windows 11 上的 WSL2 和原生 Windows 11 系统上进行深度学习训练的性能差异。
B 站视频中也查到了相关的测试,基本上是 WSL2 比 Windows 11 快很多,百分之25?
但本着求真务实的态度,还是自己测试一下。
测试环境
硬件配置
参考这里关于配置选择的内容。
系统环境
- Windows 11
Windows 11 系统信息
- WSL2(Ubuntu 24.04)
wsl 版本:
1 | PS C:\Users\wgxls> wsl --version |
Linux 版本:
1 | root@wgxls-desktop:~# neofetch |
软件环境
- python 环境
python 版本使用的是 3.10,没有使用更高的版本是担心我的老代码可能不兼容。
cuda 版本都使用的 12.8,没有在系统环境中安装什么 cuda 和 cudnn,直接使用 pytorch 的包管理器安装。
1 | pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128 |
- 测试代码
测试代码使用我的毕业论文代码,我手上可以拿来直接跑的就只有这一份。
我总共进行了 2 次测试,分别是 1 个 epoch 和 50 个 epoch 的训练。
测试一: 测试 50 个 epoch 的训练时间
训练的过程其实就是 2 个 for 循环,外层循环是 epoch,内层循环是每个 batch 的训练。
训练数据总共是 800 张图像,每个 batch 的大小是 8,所以每个 epoch 有 100 次迭代。
我在代码中记录了开始和结束时间。
1 | def train(config): |
测试二: 测试 1 个 epoch 的训练时间
同样的代码,只是将 config.num_epochs 改为 1。
更改了记录开始和结束时间的位置如下:
1 | def train(config): |
下文介绍结果时会解释为什么我还要测试 1 个 epoch 的训练时间。
注: 按网上的说法,WSL2 访问 Windows 文件系统的速度很慢,所以在测试WSL2 时,我将数据集放在了 WSL2 的文件系统中,而不是 Windows 的文件系统中。
测试结果
测试一: 测试 50 个 epoch 的训练时间
结果如下:
- Windows 11: Total training time for 50 epochs: 1298 seconds
- WSL2: Total training time for 50 epochs: 944 seconds
WSL2 比 Windows 11 快 37.5%
测试过程中我发现在 Windows 11 系统中,在每个 epoch 结束时,GPU 的使用率会下降到 0%,并且要等待较长一段时间(相比每个 batch 的时间)才会恢复到正常的使用率。
Windows 11 GPU占用
而在 WSL2 中,也有 GPU 使用率下降的情况,但下降的幅度和时间都比 Windows 11 短很多。
WSL2 GPU占用
我没有深入调查这个现象的原因,但我猜测可能是 Windows 11 在每个 epoch 结束时会进行一些额外的操作,所以我又进行了测试二,只测试一个 epoch 的训练时间。
测试二: 测试 1 个 epoch 的训练时间
结果如下:
- Windows 11: Total training time for 1 epochs: 25.83 seconds
- WSL2: Total training time for 1 epochs: 18.86 seconds
WSL2 比 Windows 11 快 36.95%
结果竟然和测试一的结果差不多,WSL2 依然比 Windows 11 快很多。
2025-08-03 补充:
在 放弃 WSL,转向『LSW』 中,我使用 Ubuntu 24.04 原生 Linux 系统测试了深度学习训练性能,结果显示原生 Linux 系统的性能最好。
总结
WSL2 在深度学习训练性能上确实比 Windows 11 快很多,约为 37% 左右。
考虑到 WSL2 和 Windows 11 之间的交互非常丝滑,如果你平时对 Linux 的需求主要在于一些应用层的开发和测试,WSL2 是一个非常不错的选择。基本上是开箱即用。
但如果你对 Linux 的需求是在系统层面工作,比如驱动开发、内核模块开发等,WSL2 可能就不太适合了。
因为我发现这个 kernel 里面 lsmod 竟然什么都没有。
1 | root@wgxls-desktop:~# lsmod |
要么放弃 Windows,用原生 Linux 系统。


