news 2026/10/26 8:27:35

Windows 11 上通过 WSL2 搭建 GPU 加速的 PyTorch 深度学习环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows 11 上通过 WSL2 搭建 GPU 加速的 PyTorch 深度学习环境

1. 为什么要在 Windows 上折腾 WSL2 跑 AI 开发

1.1 一个真实场景:双系统切换的痛

我最早做深度学习项目时,用的是 Windows + Ubuntu 双系统方案。每次要跑训练就得重启切到 Linux,想查个资料又得切回 Windows,一天下来光重启就浪费不少时间。后来试过纯 Windows 环境装 PyTorch,CUDA 版本、cuDNN 版本、Python 版本三者之间的兼容性问题能把人逼疯,而且 Windows 下某些库的编译支持确实不如 Linux 完善。

WSL2 的出现基本解决了这个矛盾。它本质上是跑在 Hyper-V 轻量级虚拟机里的完整 Linux 内核,不是早期 WSL1 那种系统调用翻译层。这意味着你在 WSL2 里跑的是真正的 Linux 内核,uname -r出来的是微软自己编译的内核版本号,系统调用、文件系统、网络栈都是原生的。对于 AI 开发来说,这一点至关重要,因为 PyTorch、TensorFlow 这些框架在 Linux 下的表现和 Windows 下完全是两回事。

1.2 WSL2 到底能做什么

简单说,WSL2 让你在 Windows 11 上拥有一个几乎完整的 Linux 环境,同时能和 Windows 文件系统互通、能直接用 Windows 的 GPU 驱动、能在 VS Code 里无缝编辑 Linux 下的代码。对于 AI 开发场景,核心能力包括:

  • GPU 直通:通过 WSLg 和 DirectX 底层支持,NVIDIA 显卡可以在 WSL2 里直接调用,CUDA 程序原生运行
  • 内核级兼容:完整的 Linux 内核意味着 Docker、systemd(需配置)、各类编译工具链都能正常工作
  • 文件互通:Windows 的 D 盘、E 盘可以挂载到/mnt/d、/mnt/e,数据不用来回拷贝
  • 资源可控:内存、CPU 核心数、交换分区都可以通过.wslconfig精细控制

适合谁来参考这篇文章?如果你是用 Windows 做开发但需要 Linux 环境跑 AI 训练、如果你受够了双系统切换、如果你在 Windows 下装 CUDA 反复失败,那这套方案就是为你准备的。即使你之前没接触过 Linux,跟着步骤走也能搭起来。

1.3 这套方案的核心思路

整体架构分三层:最底层是 Windows 11 的 Hyper-V 虚拟化平台,中间层是 WSL2 的轻量级 Linux 虚拟机,最上层是 Ubuntu 发行版 + CUDA Toolkit + PyTorch。GPU 直通的关键在于 Windows 侧的 NVIDIA 驱动会同时暴露给 WSL2,你不需要在 Linux 里再装一遍显卡驱动,只需要装 CUDA Toolkit 就行。这一点和纯 Linux 环境不同,很多人在这里踩坑,后面会详细说。

2. 环境准备与 WSL2 安装全流程

2.1 系统要求与前置检查

在动手之前,先确认你的环境满足以下条件:

项目最低要求推荐配置
Windows 版本Windows 10 2004+Windows 11 22H2+
显卡NVIDIA GTX 10 系以上RTX 20 系以上
显存4GB8GB 以上
内存8GB16GB 以上
磁盘空间40GB 可用100GB SSD
CPU支持虚拟化支持 SLAT

检查虚拟化是否开启:任务管理器 → 性能 → CPU → 看“虚拟化”是否为“已启用”。如果是“已禁用”,需要进 BIOS 开启 Intel VT-x 或 AMD-V。这一步很多人忽略,结果 WSL2 装完启动报错“WSL2 尚未准备就绪”,根源就在这里。

另外确认 Windows 功能里“虚拟机平台”和“适用于 Linux 的 Windows 子系统”两个可选组件已勾选。Win11 下可以用一条命令搞定:

wsl --install

这条命令会自动启用所需组件、下载内核更新、安装 Ubuntu 默认发行版。但我不建议完全依赖它,因为默认安装到 C 盘,后期 C 盘爆满会很麻烦。下面讲手动控制安装位置的方法。

2.2 把 WSL2 装到 D 盘的正确姿势

WSL2 默认把虚拟磁盘文件(ext4.vhdx)放在C:\Users\你的用户名\AppData\Local\Packages\下面,这个文件会随着你装包、下数据不断膨胀,几十 GB 很常见。C 盘空间紧张的话,必须迁移。

思路是:先正常安装发行版,然后用wsl --export导出为 tar 文件,再wsl --import导入到 D 盘指定目录,最后删除原发行版。具体操作:

# 查看已安装的发行版 wsl --list --verbose # 导出现有发行版到 D 盘 wsl --export Ubuntu-22.04 D:\wsl\ubuntu22.tar # 注销原发行版 wsl --unregister Ubuntu-22.04 # 导入到 D 盘指定目录 wsl --import Ubuntu-22.04 D:\wsl\Ubuntu-22.04 D:\wsl\ubuntu22.tar --version 2 # 设置默认用户(否则默认以 root 登录) ubuntu2204 config --default-user 你的用户名

导入完成后,D:\wsl\Ubuntu-22.04\ext4.vhdx就是新的虚拟磁盘文件。以后所有数据都写在这里,C 盘只占一个几百 MB 的内核文件。

注意:--import的目录必须是空目录,否则会报错。另外导入后原来的默认用户会丢失,必须用config --default-user重新指定,否则每次进去都是 root,权限会乱。

2.3 内存与 CPU 资源限制配置

WSL2 默认会占用最多 50% 的物理内存,如果你有 32GB 内存,它可能吃掉 16GB。跑大模型训练时这反而不够用,但日常开发时又太浪费。建议在C:\Users\你的用户名\.wslconfig里手动限制:

[wsl2] memory=24GB processors=12 swap=8GB localhostForwarding=true

这里memory设成 24GB 是给 32GB 物理内存留 8GB 给 Windows 本身。processors设成 12 是假设你有 16 核 CPU,留 4 核给系统。swap设成 8GB 是防止内存爆掉时直接 OOM,但注意 swap 是磁盘模拟的,速度慢,只能当保险用。

改完配置需要wsl --shutdown重启 WSL 才生效。验证是否生效:进 WSL 后free -h看内存总量,nproc看 CPU 核心数。

2.4 换国内镜像源加速

Ubuntu 默认的 apt 源在国外,装包速度可能很慢。换成国内镜像源能快很多。以 Ubuntu 22.04 为例,编辑/etc/apt/sources.list:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo sed -i 's|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y

这里用清华源是因为它同步频率高、覆盖全。换完源之后apt install的速度能从几百 KB/s 提到几 MB/s,装 CUDA 相关依赖时体感差别巨大。

3. GPU 直通与 CUDA 环境搭建

3.1 Windows 侧驱动:只装一个就够

这是最容易踩坑的地方。很多人以为 WSL2 里要单独装 NVIDIA 驱动,结果装完反而冲突。正确做法是:只在 Windows 侧装 NVIDIA 驱动,WSL2 里绝对不要装显卡驱动。

Windows 侧的驱动版本要求 470.76 以上(2021 年后的版本基本都满足)。装完之后,WSL2 会自动通过/usr/lib/wsl/lib/下的库文件访问 GPU。验证方法:进 WSL2 执行nvidia-smi,如果能看到显卡信息,说明直通成功。

如果nvidia-smi报“command not found”,先检查/usr/lib/wsl/lib/nvidia-smi是否存在。存在的话把它加到 PATH:

export PATH=/usr/lib/wsl/lib:$PATH echo 'export PATH=/usr/lib/wsl/lib:$PATH' >> ~/.bashrc

如果这个文件不存在,说明 Windows 驱动版本太旧或者没装对,回 Windows 重装最新驱动。

3.2 CUDA Toolkit 安装:版本选择是关键

CUDA 版本必须和 PyTorch 支持的版本对齐。截至我写这篇文章时,PyTorch 2.x 稳定支持 CUDA 11.8 和 12.1。选哪个?看你的显卡:

  • RTX 30 系、40 系:建议 CUDA 12.1,新特性支持更好
  • RTX 20 系、GTX 16 系:CUDA 11.8 更稳
  • 更老的卡:查 PyTorch 官网的兼容表

安装 CUDA Toolkit 有两种方式:apt 源安装和 runfile 安装。WSL2 下推荐 apt 方式,因为 runfile 会尝试装驱动,容易搞乱环境。

# 下载 CUDA keyring wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update # 安装 CUDA Toolkit 12.1 sudo apt install -y cuda-toolkit-12-1

注意包名是cuda-toolkit-12-1而不是cuda。装cuda会连带装驱动,在 WSL2 下会出问题。装完后配置环境变量:

echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc

验证:nvcc --version应该输出 CUDA 12.1 的版本信息。

3.3 cuDNN 安装

cuDNN 是 NVIDIA 的深度神经网络加速库,PyTorch 底层会调用它。从 CUDA 11 开始,cuDNN 也可以通过 apt 装:

sudo apt install -y libcudnn8 libcudnn8-dev

装完验证:dpkg -l | grep cudnn能看到版本号即可。cuDNN 版本不需要和 CUDA 严格一一对应,大版本匹配就行。

3.4 一个容易忽略的点:WSL2 的 GPU 显存是动态分配的

WSL2 下 GPU 显存不是独占的,而是和 Windows 共享。这意味着如果你 Windows 侧开着游戏或者浏览器占用了显存,WSL2 里能用的显存会变少。跑大模型训练前,建议关掉不必要的图形程序。另外nvidia-smi在 WSL2 下显示的显存总量可能和 Windows 侧不一致,这是正常的,以实际可用为准。

4. PyTorch 环境搭建与验证

4.1 Python 环境管理:Miniconda 还是 venv

我推荐 Miniconda,原因是 AI 开发经常需要切换不同版本的 Python 和 CUDA 组合,conda 的环境隔离更彻底。venv 虽然轻量,但处理 CUDA 相关依赖时不如 conda 省心。

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3 $HOME/miniconda3/bin/conda init bash source ~/.bashrc

装完创建专用环境:

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

Python 3.10 是当前 PyTorch 支持最稳的版本,3.11 和 3.12 部分库还没跟上。

4.2 PyTorch 安装:pip 还是 conda

PyTorch 官方推荐 pip 安装,因为 conda 源的更新往往滞后。用官方提供的索引地址:

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

这里cu121对应 CUDA 12.1。如果你装的是 CUDA 11.8,改成cu118。注意不要用默认的pip install torch,那样装的是 CPU 版本,白折腾。

安装完成后验证:

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

torch.cuda.is_available()返回True才算成功。如果返回False,按下面的排查表逐项检查。

4.3 常见安装失败排查表

现象可能原因解决方法
nvidia-smi找不到PATH 未配置添加/usr/lib/wsl/lib到 PATH
torch.cuda.is_available()为 False装了 CPU 版 PyTorch用--index-url重装
CUDA 版本不匹配PyTorch 和 Toolkit 版本不对应查官网兼容表重装
libcudart.so找不到LD_LIBRARY_PATH 未配置添加 CUDA lib64 路径
显存不足报错Windows 侧占用显存关闭图形程序或减小 batch size
conda: command not foundconda 未初始化执行conda init bash后重开终端

4.4 实测性能对比

我在 RTX 4070 Ti + i7-13700K + 32GB DDR5 的配置上做了个简单对比,跑 ResNet-50 训练,batch size 64:

环境单 epoch 耗时GPU 利用率
纯 Windows + CUDA42s85%
WSL2 + CUDA38s92%
纯 Ubuntu 双系统36s95%

WSL2 的性能损失大约在 5% 左右,主要来自虚拟化层的开销。对于大多数开发场景,这个损失完全可以接受,换来的是不用重启切换系统的便利。

5. 日常开发中的实用技巧与避坑经验

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

WSL2 访问 Windows 文件系统(/mnt/c、/mnt/d)走的是 9P 协议,性能比原生 ext4 差很多。我实测过,同样读一个 10GB 的数据集,从/mnt/d读比从~/data读慢 3 到 5 倍。所以训练数据一定要放在 WSL2 自己的文件系统里,也就是~/下面。

如果数据在 Windows 侧,先拷进来:

cp -r /mnt/d/datasets/coco ~/data/coco

拷一次虽然花时间,但训练时每个 epoch 都省时间,总体是赚的。

5.2 VS Code 远程开发:最舒服的写代码方式

在 Windows 侧装 VS Code,然后装 “WSL” 扩展。在 WSL2 终端里进到项目目录,执行code .,VS Code 会自动以远程模式打开 WSL2 里的项目。这样你用的是 Windows 的图形界面,但代码运行在 Linux 环境里,两全其美。

Python 解释器要选 WSL2 里 conda 环境的那个,路径大概是~/miniconda3/envs/pytorch/bin/python。选对了解释器,调试、补全、Jupyter 都能正常工作。

5.3 几个我踩过的坑

坑一:WSL2 时间不同步。Windows 休眠后 WSL2 的时间会漂移,导致 pip 安装时报 SSL 证书错误。解决方法是sudo hwclock -s同步时间,或者直接wsl --shutdown重启。

坑二:磁盘空间不释放。删了 WSL2 里的大文件,但 ext4.vhdx 文件在 Windows 侧看还是那么大。这是虚拟磁盘的特性,需要手动压缩:

wsl --shutdown diskpart # 在 diskpart 里执行: select vdisk file="D:\wsl\Ubuntu-22.04\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit

坑三:端口转发失效。WSL2 里的服务(比如 Jupyter)默认 Windows 侧可以通过localhost访问,但有时候会失效。检查.wslconfig里localhostForwarding=true是否开启,或者直接用 WSL2 的 IP 访问。

坑四:conda 激活慢。每次开终端 conda 初始化要好几秒。可以在.bashrc里把 conda 初始化块改成延迟加载,或者干脆用conda activate手动激活。

5.4 大模型微调场景的额外配置

如果你要在 WSL2 里微调大模型(比如 7B 参数的 LLM),显存是瓶颈。几个实用建议:

  • 用bitsandbytes做 4bit 量化,7B 模型显存占用能从 28GB 降到 6GB 左右
  • 用gradient_checkpointing换显存,代价是训练速度慢 20% 左右
  • batch size 设小一点,配合gradient_accumulation_steps模拟大 batch
  • 监控显存用watch -n 1 nvidia-smi,实时看占用变化

另外 WSL2 下nvidia-smi显示的显存占用可能包含 Windows 侧的共享部分,实际可用显存以 PyTorch 报的为准。

5.5 备份与迁移

WSL2 环境搭好一次不容易,建议定期备份。用wsl --export导出 tar 文件,换电脑时wsl --import导入即可。tar 文件可以压缩,20GB 的环境压完大概 8GB 左右。备份频率看你的折腾程度,装完 CUDA 和 PyTorch 后备份一次,之后每月一次就够。

我个人在实际操作中的体会是,WSL2 这套方案最大的价值不是性能,而是把 Linux 的开发体验和 Windows 的日常使用无缝融合了。你不用再为了跑一个训练脚本重启电脑,也不用在 Windows 下忍受各种兼容性问题。GPU 直通这块虽然初次配置有点绕,但一旦跑通,后续使用和原生 Linux 几乎没区别。唯一要记住的就是那条铁律:Windows 侧装驱动,WSL2 侧只装 CUDA Toolkit,两边都装驱动必出问题。

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

遗传算法驱动的自适应生产线平衡方法

简介:本资源是一份面向智能制造领域工程师与高校工业工程/自动化专业学生的生产线平衡优化实践代码,聚焦于用自适应遗传算法解决实际产线节拍分配与工位负荷均衡问题。压缩包仅含1个MATLAB源文件(haojinpeng.m),大小1K…

作者头像 李华
网站建设 2026/10/26 8:24:46

Agent-Reach实战:智能体注册发现与协作调度全解析

1. Agent-Reach是什么:重新定义“智能体触达”这件事 先说结论:Agent-Reach是一个面向AI智能体(Agent)的注册、发现与协作调度项目,核心解决的是“一个智能体怎么找到另一个智能体、怎么调用它的能力、怎么在多个智能体…

作者头像 李华
网站建设 2026/10/26 8:24:36

四层AI应用架构设计:从分层逻辑到生产落地

1. 这不是PPT画饼,而是能跑通的AI应用骨架 “图解AI应用架构设计”——这六个字最近在技术社区里反复刷屏,但很多人点进去发现,要么是几张模糊的分层示意图配几句空泛定义,要么是堆砌术语的PPT截图,连个数据流向箭头都…

作者头像 李华
网站建设 2026/10/26 8:24:13

LaSt-ViT:改进视觉Transformer的前景注意力机制

1. 项目概述:重新思考ViT训练范式在计算机视觉领域,Vision Transformer(ViT)已经成为继CNN之后的新一代骨干网络架构。然而近期来自CVPR 2026的研究成果《LaSt-ViT:让模型真正"看懂"前景》指出,当…

作者头像 李华
网站建设 2026/10/26 8:23:39

QuickSay:提升办公效率的文本管理工具

1. 项目概述:QuickSay如何重塑办公效率 在信息爆炸的数字化办公场景中,重复性文本输入已成为时间黑洞。根据微软研究院的调查数据,普通职场人每天平均需要重复输入相同内容37次,其中包含邮件模板、常用回复、表单字段等标准化文本…

作者头像 李华
网站建设 2026/10/26 8:23:17

基于BS架构的驾校管理系统设计与实现

1. 项目概述:基于BS架构的驾校管理系统设计 这个驾校管理系统采用经典的Browser/Server架构,后端使用Java技术栈实现。作为驾校日常运营的核心平台,系统需要处理学员管理、教练调度、车辆分配、考试安排等核心业务流程。相比传统C/S架构&…

作者头像 李华