WSL2 AI开发环境搭建指南:从安装到GPU直通CUDA实战
发布时间:2026/10/27 6:37:00 锦皓数字建站

1. 为什么 AI 开发我最终选定了 WSL2先说结论如果你的主力机器是 Windows又想正经搞 AI 开发、跑大模型推理、训练或者折腾 CUDA 生态WSL2 是目前最接近完美的过渡方案甚至对很多人来说它就是最终方案。我过去一年多里把主要开发环境从双系统逐渐迁移到了 WSL2踩过不少坑但也确实把这套环境用成了日常主力。不少刚接触的同学会纠结一个问题既然要跑 AI为什么不直接装个双系统或者干脆用 Docker Desktop我的经历是——双系统的问题是切换成本太高你写博客、回微信、改 PPT 时在 Windows跑实验时又要重启进 Linux一天折腾七八次非常消磨耐心。Docker Desktop 则是在虚拟化之上再套一层容器GPU 直通的链路比较绕很多时候缩略地能用但性能损耗和配置复杂度并不理想。WSL2 的定位完全不同。它本质上是 Windows 内置的一个轻量级虚拟机跑的是完整的 Linux 内核而不是模拟层。微软把整套东西做成了系统组件你可以直接在里面跑 PyTorch、TensorFlow、CUDA还能通过 WSLg 直接在 Windows 桌面弹出 Linux GUI 程序比如跑个 TensorBoard 或者可视化调参工具无缝衔接非常顺手。更关键的一点是WSL2 天生对开发者友好。它是随 Windows 10/11 内置的不需要额外安装 VMware 或 VirtualBox命令行管理起来也方便。而且微软和英伟达合作做了 WSL 的 CUDA 支持GPU 直通性能非常接近原生 Linux这一点在 AI 开发场景下是致命优势。适合谁用我觉得这四类人尤其合适主力机是 Windows但学习或工作需要 Linux 环境的 AI 初学者需要在 Windows 和 Linux 工具链之间频繁切换的算法工程师想用 GPU 跑实验但又不想折腾双系统的深度学习爱好者团队协作时需要尽量复现服务器 Linux 环境的开发者。下面我直接讲怎么把这套环境从零搭起来包括很多人踩坑的下载慢、迁移到 D 盘、WSL2 无法启动、CUDA 配置等细节。2. 搭建前的必要检查和系统准备这一步很基础但决定了你后面的体验。WSL2 虽然是 Windows 组件但不同 Windows 版本对它的支持力度不一样GPU 直通更是有版本要求。2.1 确认你的 Windows 版本和支持状态我的建议是最好用 Windows 11 或者 Windows 10 的较新版本至少 21H2 及以上。WSL 目前其实已经可以作为独立功能更新微软现在把 WSL 也做成一个可以通过 Microsoft Store 更新的独立组件这比老版本系统里固定的 WSL 组件要灵活得多修复 bug 和新增特性也更快。检查你的系统信息时同时看两个东西系统版本号和是否已开启虚拟化支持。# 在 Windows PowerShell 或 CMD 中查看版本号 winver # 查看 WSL 状态如果你已经装过 wsl --statuswsl --status会直接告诉你默认版本是 WSL1 还是 WSL2以及默认发行版是什么。如果是 WSL1后面需要手动转换。2.2 开启虚拟机平台和 Windows 虚拟机监控程序WSL2 和 WSL1 最大的区别在于WSL1 是翻译层不需要虚拟化WSL2 是真正的轻量虚拟机必须有虚拟化支持。很多人的WSL2 无法启动报错根源就在这里——主板 BIOS 里或者 Windows 功能里没开启虚拟化。以管理员身份打开 PowerShell执行# 启用虚拟机平台和 Linux 子系统功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完这两条命令后重启系统。重启后最好再确认一下虚拟化是否真的启用了。打开任务管理器切到性能标签页看左下角是否显示虚拟化已启用。如果显示已启用但 WSL 还是报错那就需要去 BIOS 里把 Intel VT-x 或 AMD SVM 打开。这里插一句很多人以为我开了 BIOS 虚拟化就万事大吉其实 Windows 功能里的 VirtualMachinePlatform 没开启同样会报错。两个条件缺一不可这也是我遇到过最频繁的假故障之一。2.3 安装 WSL2 本体和 Ubuntu 发行版微软现在推出了超级简化的安装命令# 以管理员身份运行安装 WSL2 并默认安装 Ubuntu wsl --install如果你想指定 Ubuntu 22.04 LTS我推荐的长期稳定版可以这样wsl --install -d Ubuntu-22.04这一步完成后系统会提示你重启。重启后第一次启动 Ubuntu会要求你设置 Linux 用户名和密码。这个用户名不需要和 Windows 用户名一致你可以随意设但密码一定要记住后面 sudo 操作会经常用到。如果wsl --install遇到网络问题或下载极慢先别急着重试往下看我专门讲的下载慢的解决办法。3. 解决 WSL2 下载慢和发行版安装失败的问题说实话在国内网络环境下WSL2 最大的体验瓶颈就是下载发行版镜像慢。wsl --install有时候能卡在正在下载半天不动然后报错。这个不是你的电脑有问题而是默认下载源在境外网络波动大。3.1 手动下载 Appx 包安装 Ubuntu我试过的可靠办法是绕开wsl --install自动下载手动去微软官网拉安装包。打开微软的 WSL 发行版列表页面找到 Ubuntu 22.04 的 Appx 下载链接后缀是 .appx 或 .msixbundle。下载后用管理员 PowerShell 执行# 进入下载目录后执行 Add-AppxPackage .\Ubuntu_2204.1.7.0_x64.appx装完之后你会在开始菜单里看到 Ubuntu 的图标点开就能初始化。这个方法的好处是下载过程可以走浏览器下载工具支持断点续传速度比系统内置下载要稳定不少。3.2 修改 WSL 源为国内镜像阿里云/清华Linux 装好后第一件事就是换软件源。默认的 Ubuntu 源同样是境外服务器apt install python3-pip都能卡到你怀疑人生。这里直接给一份我用的清华源配置。先备份原始源文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后编辑源文件把内容替换成如下Ubuntu 22.04 的版本代号是 jammysudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update这样apt的速度会瞬间从龟速变成起飞。注意不同 Ubuntu 版本的代号不一样比如 24.04 代号是 noble命令里的源路径会变但替换思路完全一致。3.3 把整个 WSL 发行版迁移到 D 盘WSL2 的虚拟磁盘文件vhd默认放在 C 盘而且会随你安装的依赖越来越多而膨胀。一个装满 PyTorch、CUDA、各种 Python 包的环境轻松能到二三十 GB对 C 盘是很大的压力。迁移方法其实很简单不需要重新安装。先把发行版导出成 tar 文件再导入到 D 盘# 关闭 WSL wsl --shutdown # 查看当前发行版名称 wsl -l -v # 导出当前发行版到 D 盘的临时目录 wsl --export Ubuntu-22.04 D:\wsl_backup\ubuntu2204.tar # 从 tar 文件重新导入到 D 盘指定目录 wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl_backup\ubuntu2204.tar --version 2这里有个容易忽略的坑wsl --import之后默认用户会变成 root。恢复你原来的用户名需要额外设置默认用户。在 PowerShell 里执行ubuntu2204.exe config --default-user your_username或者直接在 Linux 里改/etc/wsl.conf[user] defaultyour_username编辑/etc/wsl.conf时需要 root 权限保存后重启 WSL 生效。我自己是把 WSL 放在了一块独立的 NVMe 固态上比如D:\WSL\Ubuntu-22.04这样即使重装 Windows 也不会丢掉 Linux 环境备份整目录就行。4. GPU 直通配置让 WSL2 用上 NVIDIA 显卡跑 CUDA到了这篇博文的核心环节。很多人装好 WSL2 后第一件事就是敲nvidia-smi结果发现命令不存在或者报“NVIDIA-SMI has failed”。别慌这基本都是驱动或 CUDA 没配置对。4.1 在 Windows 侧安装 NVIDIA 驱动WSL2 的 GPU 直通设计里Linux 侧不需要单独安装 NVIDIA 显卡驱动而是通过 Windows 侧驱动实现直通。所以第一个关键动作就是确保 Windows 侧已经安装了支持 WSL 的 NVIDIA 驱动。有两条路可以走直接安装最新的 GeForce Game Ready 驱动或 NVIDIA Studio 驱动近两年版本的驱动都自带 WSL 支持如果你要跑的还是老显卡建议去 NVIDIA 官网下载对应型号支持 WSL 的驱动不要用 Windows 更新自动推送的万年老驱动。Windows 侧驱动装好后先别急着进 Linux重启一次 WSL 让驱动层生效wsl --shutdown wsl然后进到 Linux 里验证nvidia-smi如果看到类似下面的输出就说明 GPU 直通已经打通了----------------------------------------------------------------------------- | NVIDIA-SMI 525.85.05 Driver Version: 525.85.05 CUDA Version: 12.0 | -----------------------------------------------------------------------------里面的 Driver Version 和你 Windows 侧的版本号是对应的。4.2 在 WSL2 内安装 CUDA Toolkit驱动直通只是第一步AI 框架PyTorch/TensorFlow真正跑 GPU 还需要 CUDA 运行时和 cuDNN。这里我强烈建议不要直接用 apt 装老版本 CUDA而是走 NVIDIA 的官方 apt 源。以下几个命令就是标准的官方配方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 sudo apt install cuda-toolkit-12-2装完之后把 CUDA 的 bin 和 lib 目录加进环境变量编辑~/.bashrcexport PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc验证 CUDA 编译器nvcc --version如果显示的是你安装的 CUDA 版本号就说明工具链齐全了。4.3 为什么在 WSL 里装 CUDA 特别强调“不要装驱动包”有一个很多人会踩的坑在 Linux 侧执行sudo apt install nvidia-driver-xxx。这在 WSL2 里是错误操作。因为 WSL2 的显卡驱动并非由 Linux 侧提供强行安装会导致内核模块冲突甚至可能让整个 WSL 起不来。记住一句话WSL2 里只需要 CUDA Toolkit编译器、运行时库、工具链不需要 NVIDIA 内核驱动——驱动已经通过 Windows 侧透传进来了。4.4 验证 GPU 是否真实参与计算跑一个 PyTorch 小 demo环境配置完别急着跑大模型先做一个 CPU/GPU 对比的冒烟测试import torch # 检查 CUDA 是否可用 print(CUDA available:, torch.cuda.is_available()) # 创建两个随机张量并做矩阵乘法 a torch.randn(1024, 1024, devicecuda) b torch.randn(1024, 1024, devicecuda) c torch.matmul(a, b) # 确认张量确实在 GPU 上 print(Tensor device:, c.device) print(GPU name:, torch.cuda.get_device_name(0))如果输出CUDA available: True并且 GPU 名称是你的显卡型号那说明整个 WSL2 GPU 直通链路已经完整跑通了。我第一次跑通时看到nvidia-smi里出现 WSL 进程的 GPU 占用心里还是挺开心的毕竟这意味着 Windows 和 Linux 壁垒在 AI 开发场景下被彻底打破了。5. WSL2 常见启动问题排查从尚未准备就绪到无法启动这套环境再顺也难免遇到 WSL2 自己闹脾气的时候。我把这一年多里遇到的最典型的问题和解决思路整理出来你可以按照这个顺序排查。5.1 WSL2 尚未准备就绪的排查链路这个问题在我刚接触 WSL2 时非常常见报错的大概意思是说当前系统不支持 WSL2 或者未启用虚拟化。我的排查建议按下面五步走检查 Windows 版本是否达到 21H2 及以上确认 Windows 功能里 适用于 Linux 的 Windows 子系统 和 虚拟机平台 都已经勾选打开任务管理器确认虚拟化已经启用如果没有去 BIOS 开启在管理员 PowerShell 执行bcdedit /set hypervisorlaunchtype auto确保 Hypervisor 自启以上都做完后重启系统再运行wsl --set-default-version 2。大部分情况下第五步做完问题就消失了。5.2 WSL2 无法启动因为此计算机上未启用虚拟化这个报错比尚未准备就绪更直白就是明确告诉你虚拟化没开。这里有个容易忽略的场景如果你电脑里装了老版本 VMware 或第三方沙盒软件它们可能会关闭 Hyper-V。比如某些安全软件默认禁用了内存完整性或虚拟化也会影响 WSL2。我的建议是先看任务管理器 性能 虚拟化是否为已启用。如果显示未启用但在 BIOS 里开了 VT-x那大概率是 Windows 开启 Hyper-V 相关功能后没重启或者被第三方软件禁用了。可以临时执行bcdedit /set hypervisorlaunchtype off看能否恢复但正常的最终状态应该是auto。5.3 WSL 启动后 IP 地址变化 / localhost 访问问题WSL2 因为是基于虚拟机的网络模式IP 地址是动态分配的。有时在 Windows 浏览器里访问 WSL2 里的 Jupyter Notebook 会失败这其实不是环境坏了而是 IP 变了。最省心的方案是直接用 localhost 转发。WSL2 在较新版本里默认支持 localhost 转发也就是你在 WSL 里启动jupyter lab --port 8888Windows 浏览器访问http://localhost:8888也能通。如果遇到不通的情况可以在 WSL 里手动加上端口转发规则但我实测过新版本基本不需要。如果希望保持 WSL2 的 IP 固定可以在 WSL 里配置镜像网络模式。编辑C:\Users\你的用户名\.wslconfig[wsl2] networkingModemirrored改成镜像模式后WSL2 会共享 Windows 的 IP 和网卡很多网络代理、端口访问问题会直接消失。不过这个模式需要较新的 WSL 版本支持老版本可能不识别该配置。5.4 镜像网络模式下代理失效的坑如果你开了镜像网络模式同时又喜欢在 Windows 侧挂代理工具那你可能会遇到 WSL2 里访问外网比如 Hugging Face 下载模型失败的情况。原理不复杂镜像网络模式下WSL2 的流量默认走 Windows 的防火墙策略如果代理工具的 TUN 模式没对 WSL 虚拟网卡生效流量就会被卡住。我的处理方案是Windows 侧代理工具开启允许来自局域网的连接然后在 WSL 里配置好代理地址为 Windows 主机 IP。在镜像模式下主机 IP 通常就是localhost或宿主机器 IP具体看代理工具的监听地址。# 临时设置代理比如代理工具监听在 7890 端口 export http_proxyhttp://localhost:7890 export https_proxyhttp://localhost:7890等你下载完模型记得unset http_proxy unset https_proxy清掉代理否则后面访问本机服务也可能被代理截胡。6. 构建一个可复用的 AI 开发环境Python 3.11 PyTorch Jupyter跑通了 GPU 直通剩下就是把日常开发需要的全家桶装齐。这里分享一套我用了半年的组合稳定、不折腾。6.1 Python 版本管理为什么我用 miniconda 而不是系统 PythonWSL2 自带的 Ubuntu 22.04 系统 Python 是 3.10但对 AI 开发来说用 conda 管理环境是标配。原因很简单AI 生态里有些包的依赖冲突非常厉害今天装 TensorFlow 可能要 Python 3.9明天装某个新库可能又要 3.11用系统级 Python 管理这些是灾难。我推荐安装 minicondawget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh安装过程中会提示是否把 conda 加到 PATH选择 yes。装完重新打开终端执行conda create -n ai python3.11 -y conda activate ai之后所有 AI 相关的包都装在这个环境里想怎么折腾都不会弄坏系统 Python。6.2 安装 PyTorch 的 GPU 版本PyTorch 的 GPU 版安装官方给了一条非常简洁的命令pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121注意这里的cu121代表 CUDA 12.1 版本。在你的 CUDA Toolkit 是 12.x 的情况下选 cu121 或 cu122 都行兼容性没什么大问题。如果装完发现 PyTorch 虽然能 import 但torch.cuda.is_available()返回 False优先检查你的 CUDA 版本是否低于 PyTorch 编译要求的版本以及有没有误装了 CPU 版。6.3 Jupyter LabWSL2 里的远程开发体验Jupyter Lab 在 WSL2 里跑起来体验非常好尤其在 WSLg 的支持下可以直接从 Windows 开始菜单里看到 Linux 的 GUI 窗口。但我个人更推荐用浏览器方式访问因为这样你可以把同样的工作流迁移到远程服务器上。conda activate ai pip install jupyterlab jupyter lab --no-browser --port8888启动后终端会打印一个带 token 的 URL在 Windows 浏览器里访问http://localhost:8888输入 token 就能进入。如果你配了镜像网络模式甚至可以直接用http://localhost:8888访问非常顺滑。6.4 顺手装一些 AI 开发常用工具除了 PyTorch 和 Jupyter下面这些工具我建议一并装好transformers和datasetsHugging Face 生态的核心库跑 LLaMA、BERT 系列模型必备accelerate多 GPU 训练和推理加速工具sentencepiece和protobuf很多分词模型依赖它们huggingface_hub用来下载和管理模型权重tensorboard配合 PyTorch 的SummaryWriter做训练可视化。pip install transformers datasets accelerate huggingface_hub sentencepiece tensorboard装这些包时如果有依赖报错不要强行pip install去覆盖已有包建议用conda install先试试conda 的依赖解析比 pip 更稳健。7. Windows 和 WSL2 的文件系统互操作一些额外的体验优化最后聊几个提升日常使用幸福感的小技巧都和文件互操作有关。7.1 跨系统访问文件的最佳姿势WSL2 中访问 Windows 文件可以直接通过/mnt/c/、/mnt/d/等路径。反过来Windows 访问 WSL 内部文件可以用\\wsl$\Ubuntu-22.04\home\用户名\这个 UNC 路径。但我要提醒一个性能陷阱尽量不要在/mnt/c/下面跑大模型训练。因为跨文件系统的 I/O 性能损耗很明显尤其是大量小文件读写时比在 WSL 原生文件系统ext4里慢一个数量级。我的建议是把项目代码放在 WSL 原生文件系统内比如~/projects/,而把数据集的原始大文件放在 Windows 盘需要训练时通过软链接指向/mnt/d/。这样既省空间又提速。7.2 VS Code 连接 WSL2 的无缝体验VS Code 的 WSL 扩展是我用过最顺手的 Windows Linux 混合开发方案。在 Windows 侧装上 VS Code 和 WSL 扩展然后在 WSL 里执行code .VS Code 会自动启动一个服务端连接到 WSL2左侧文件树显示的是 Linux 文件系统终端也直接是 Linux 终端Python 解释器可以选择 conda 环境。你可以毫无感知地在 Windows 界面里写 Linux 代码调试时 GPU 资源也完全正常。7.3 内存和 CPU 资源限制避免 WSL2 吃满整机WSL2 默认会占用主机所有空闲内存这在同时跑 Windows 侧应用时可能造成卡顿。你可以在.wslconfig文件里限制资源[wsl2] memory12GB processors8 swap4GB我的 32GB 内存机器上分配给 WSL 12GB 完全够跑大多数 AI 实验Windows 侧留 20GB 保证日常使用流畅。调整配置后记得wsl --shutdown再启动 WSL 才会生效。写在最后的几句经验这套环境我实际使用了超过一年从最初的 Ubuntu 20.04 迁移到 22.04又从 C 盘迁到独立固态盘。整体感受是WSL2 已经把Windows 上搞 AI 开发的门槛降到了非常低。你不需要为了跑个 PyTorch 就重启进另一个系统也不需要忍受双系统之间切换的割裂感。如果你也是 Windows 主力机我个人的建议是别犹豫按这篇的顺序搭一套 WSL2 环境试试。先跑通nvidia-smi再跑通 PyTorch 的 GPU 冒烟测试后面的路基本就平坦了。真遇到问题多半也是国内网络下载的问题或者虚拟化未启用这种基础配置都有成熟解法。最后分享一个小技巧把 WSL 的配置文件和常用安装命令记在一个笔记里重装系统后恢复环境时能省一晚上的时间。我自己就是靠一份 Markdown 笔记在两小时内从裸系统恢复到能跑大模型推理的完整状态。这套方法论比任何工具都值钱。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。