☰
Windows 上搭建 WSL2 内核级 Linux AI 开发环境:GPU 直通与 CUDA 部署实战
2026/10/12 20:18:22 网站建设 项目流程

1. 为什么要在 Windows 上折腾一套内核级 Linux 开发环境

如果你平时主力用 Windows,但又躲不开 AI 开发这套工具链,大概率经历过这种割裂感:代码在 Windows 上写,训练得 SSH 到另一台机器,或者干脆装个双系统来回重启。早几年我也这么干过,后来发现最省事的方案其实就藏在系统里——WSL2。它不是一个虚拟机软件套壳,而是跑在轻量级虚拟化层上的完整 Linux 内核,系统调用是真实的,文件系统是真实的,进程模型也是真实的。换句话说,你在里面跑nvidia-smi、编译 CUDA 算子、起 PyTorch 训练脚本,和在一台原生 Ubuntu 机器上几乎没有区别。

这套环境解决的核心问题有三个。第一是工具链一致性,AI 生态里大量库对 Linux 的支持是第一优先级,Windows 原生轮子经常缺胳膊少腿,WSL2 直接绕开这个坑。第二是GPU 直通,这是 WSL2 相比早期版本最大的进步,显卡不再需要额外配置就能被 Linux 侧识别,CUDA 和 cuDNN 可以正常调用。第三是开发体验,你依然可以用 Windows 侧的编辑器、浏览器、截图工具,但所有计算和依赖都跑在 Linux 里,两边通过文件系统互通。

这篇文章适合三类人看:一是刚接触 AI 开发、想在本地跑通训练和推理的新手;二是从纯 Windows 环境迁移过来、被依赖问题折磨过的开发者;三是手里有 N 卡、想榨干本地算力但又不想放弃 Windows 日常使用的人。我会把整个部署过程拆成可复现的步骤,包括版本选择的理由、GPU 直通的验证方法、常见报错的排查路径,以及我自己踩过的几个坑。你不需要有很深的 Linux 功底,但基本的命令行操作得会。

2. 环境整体设计与版本选型思路

2.1 为什么是 WSL2 而不是虚拟机或双系统

先说清楚 WSL2 的定位。它底层用的是轻量级虚拟化技术,但和你在 VMware、VirtualBox 里装 Ubuntu 是两码事。传统虚拟机要模拟完整硬件,启动慢、资源占用高、GPU 直通配置复杂。WSL2 的虚拟化层是微软专门为 Linux 子系统做的,启动几乎是秒级,内存按需分配,最关键的是 GPU 直通是官方支持的,不需要你自己去折腾 PCI 设备透传。

双系统的问题更明显:切换成本高,两个系统之间的文件互访麻烦,而且 Windows 那边一旦有工作要处理,你就得重启。WSL2 的好处是两边同时活着,你在 Windows 终端里敲wsl就进去了,退出就回到 Windows,文件系统互相挂载,复制粘贴直接可用。

注意:WSL2 的 Linux 文件系统性能在跨系统访问时会有损耗。如果你把项目放在/mnt/c/下,IO 会明显变慢。正确做法是把代码放在 Linux 侧的家目录,比如~/projects/,需要和 Windows 交换文件时再走/mnt/c/。

2.2 版本选择:WSL2 与内核更新的关系

WSL2 的内核是可以独立更新的,微软会定期发布内核版本。你可以在 PowerShell 里用wsl --update拉取最新内核。这里有个经验:不要盲目追最新,尤其是 GPU 相关功能,新内核有时候会引入驱动兼容性问题。我一般会看两个东西,一是当前显卡驱动支持的 CUDA 版本,二是 WSL 内核更新日志里有没有提到 GPU 相关的改动。

查看当前 WSL 版本和内核信息:

wsl --version uname -r

wsl --version会显示 WSL 版本、内核版本、WSLg 版本等。uname -r在 Linux 侧看内核版本,通常会带microsoft-standard-WSL2后缀,说明你跑的是 WSL2 而不是 WSL1。

2.3 发行版选择:Ubuntu 还是别的

AI 开发场景下,我建议直接用 Ubuntu,而且优先选 LTS 版本。原因很实际:CUDA 官方文档、PyTorch 安装命令、各种教程默认都是 Ubuntu,遇到问题搜出来的答案也最多。Debian 也能用,但某些驱动包的版本会滞后。其他发行版不是不行,只是你会在依赖问题上多花很多时间。

安装命令很简单:

wsl --install -d Ubuntu-22.04

如果你已经装了 WSL 但没装发行版,这条命令会帮你搞定。装完之后第一次启动会让你设置用户名和密码,这个密码是 sudo 用的,记牢。

3. GPU 直通的核心原理与前置条件

3.1 GPU 直通到底是怎么实现的

很多人以为 WSL2 里的 GPU 是“模拟”出来的,其实不是。微软和显卡厂商合作,在 WSL2 的虚拟化层里做了一套 GPU 半虚拟化方案。简单说,Linux 侧看到的/dev/dxg设备是一个特殊接口,它把 GPU 调用转发给 Windows 侧的显卡驱动,由 Windows 驱动去操作真实硬件。所以你的显卡驱动必须装在 Windows 侧,Linux 侧不需要装完整的显卡驱动,只需要装 CUDA 工具链里的用户态部分。

这个设计带来一个直接结论:Windows 侧的显卡驱动版本决定了你能用的 CUDA 上限。比如你的驱动支持到 CUDA 12.4,那 Linux 侧就装 12.4 对应的工具包,装更高的版本会报错。

3.2 前置条件清单

在动手之前,先确认这几项:

检查项要求验证方法
Windows 版本Windows 10 21H2 以上或 Windows 11winver命令
显卡NVIDIA GTX 10 系及以上设备管理器查看
Windows 驱动支持 WSL 的版本NVIDIA 官网查驱动说明
WSL 版本WSL2wsl --list --verbose
虚拟化BIOS 中开启任务管理器性能页查看

提示:AMD 显卡在 WSL2 下也有 ROCm 支持,但生态成熟度不如 NVIDIA,AI 训练场景下还是建议 N 卡。Intel 核显主要用于 WSLg 图形显示,不参与 CUDA 计算。

3.3 驱动安装的坑

Windows 侧驱动一定要从显卡厂商官网下,不要用系统自动更新的版本。自动更新的驱动经常是精简版,可能不带 WSL 所需的组件。安装时选“自定义安装”,确保勾选了 CUDA 相关的组件。装完之后重启一次,然后在 PowerShell 里跑:

wsl --shutdown wsl nvidia-smi

如果nvidia-smi能输出显卡信息,说明直通成功。如果报command not found,那是 Linux 侧还没装 CUDA 工具包;如果报No devices were found,那多半是 Windows 驱动或 WSL 内核的问题。

4. Linux 侧 CUDA 与开发栈的完整部署

4.1 CUDA Toolkit 的安装策略

Linux 侧不需要装显卡驱动,但需要装 CUDA Toolkit。这里有个关键点:不要用apt install nvidia-cuda-toolkit,那个版本通常很旧,而且和 WSL 的直通机制不匹配。正确做法是去 CUDA 官方下载页,选 Linux 的 WSL-Ubuntu 选项,按提示的命令安装。

以 CUDA 12.4 为例,大致流程是:

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-get update sudo apt-get -y install cuda-toolkit-12-4

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

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

然后source ~/.bashrc,再跑nvcc --version验证。

4.2 cuDNN 的安装

cuDNN 是深度学习的加速库,PyTorch 和 TensorFlow 都依赖它。下载需要注册账号,选对应 CUDA 版本的包。安装方式有两种,一种是 deb 包,一种是 tar 包。我习惯用 tar 包,因为路径可控:

tar -xzvf cudnn-linux-x86_64-8.x.x.x_cuda12-archive.tar.xz sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include sudo cp cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

注意:cuDNN 版本必须和 CUDA 版本严格对应,装错了会在运行时报libcudnn.so找不到或版本不匹配。装之前先确认 CUDA 版本,再选对应的 cuDNN。

4.3 Python 环境管理

AI 开发强烈建议用 conda 或 miniconda 来管理环境,不要直接用系统 Python。系统 Python 被各种系统工具依赖,你乱装包容易把系统搞崩。Miniconda 装起来轻量,创建独立环境也方便:

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

装完初始化 shell,然后创建环境:

conda create -n ai python=3.10 conda activate ai

Python 版本选 3.10 或 3.11 比较稳,太新的版本有些库还没跟上。

4.4 PyTorch 的安装与 GPU 验证

PyTorch 官网有安装命令生成器,选好 CUDA 版本会给你对应的 pip 命令。比如 CUDA 12.4:

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

装完之后验证 GPU 是否可用:

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

如果is_available()返回True,说明整条链路通了。get_device_capability返回的是算力版本,比如(8, 6)表示 8.6,这个值在编译自定义算子时会用到。

5. 实操过程中的关键环节与现场记录

5.1 从零开始的完整部署流程

我把整个流程按顺序列一遍,你可以照着走:

  1. Windows 侧准备:确认系统版本,安装显卡驱动,重启。
  2. 启用 WSL2:wsl --install,装完重启。
  3. 安装 Ubuntu:wsl --install -d Ubuntu-22.04,设置用户名密码。
  4. 更新系统:sudo apt update && sudo apt upgrade -y。
  5. 安装 CUDA Toolkit:按官方 WSL 指引操作。
  6. 配置环境变量:编辑~/.bashrc,source 生效。
  7. 安装 cuDNN:下载对应版本,复制文件到 CUDA 目录。
  8. 安装 Miniconda:下载脚本,执行安装,初始化。
  9. 创建 Python 环境:conda create -n ai python=3.10。
  10. 安装 PyTorch:用官方命令,指定 CUDA 版本。
  11. 验证 GPU:跑torch.cuda.is_available()。

每一步都有验证点,不要跳步。我见过有人一口气装完,结果报错不知道是哪一步出的问题,回头排查更费时间。

5.2 内存与交换空间的配置

WSL2 默认会占用大量内存,因为它会按需分配但不太主动释放。如果你机器内存不大,训练时容易把 Windows 侧拖卡。解决办法是在 Windows 用户目录下建一个.wslconfig文件:

[wsl2] memory=16GB swap=8GB processors=8

这个文件放在C:\Users\你的用户名\下。改完之后wsl --shutdown再启动生效。内存给多少取决于你机器总内存,一般给一半左右。swap 给内存的一半,防止 OOM。

提示:.wslconfig里的processors是给 WSL 用的 CPU 核心数,不要给满,留几个给 Windows 侧,不然系统会卡。

5.3 文件系统性能优化

前面提过,跨系统访问文件慢。具体有多慢?我实测过,同样一个读写成千上万个小文件的 Python 脚本,放在/mnt/c/下比放在~/下慢三到五倍。原因是跨系统访问要走 9P 协议,每次文件操作都有额外开销。

所以项目代码、数据集、模型权重都放 Linux 侧。如果数据集本来在 Windows 盘里,先复制过去:

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

复制的时候用-r递归,大文件可以加-v看进度。复制完在 Linux 侧操作,速度就正常了。

5.4 图形界面与 WSLg

WSL2 自带 WSLg,可以跑 Linux 的图形程序。比如你想用 matplotlib 显示图片,或者跑一个带界面的标注工具,不需要额外配置 X Server。验证方法:

sudo apt install x11-apps -y xeyes

如果弹出一个眼睛窗口,说明图形界面正常。不过 AI 开发大部分时候用命令行就够了,WSLg 更多是锦上添花。

6. 常见问题排查与避坑经验

6.1 GPU 相关报错速查

报错信息可能原因解决方法
nvidia-smi: command not foundLinux 侧没装 CUDA安装 CUDA Toolkit
No devices were foundWindows 驱动问题重装官网驱动,重启
CUDA driver version is insufficient驱动版本低于 CUDA 要求升级 Windows 驱动
libcudnn.so not foundcuDNN 未装或路径不对检查 cuDNN 安装路径
torch.cuda.is_available() FalsePyTorch 版本与 CUDA 不匹配重装对应版本 PyTorch

6.2 网络与代理问题

WSL2 的网络是 NAT 模式,默认和 Windows 共享网络。但有时候 pip 或 conda 下载慢,需要配置镜像源。pip 的配置在~/.pip/pip.conf:

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple

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

注意:镜像源要选可靠的,有些同步不及时会导致包版本对不上。如果遇到奇怪的依赖冲突,先换回官方源试试。

6.3 磁盘空间管理

WSL2 的虚拟磁盘会随着使用不断增长,但不会自动收缩。你删了文件,磁盘占用可能还是那么大。查看占用:

df -h

收缩磁盘需要在 Windows 侧操作:

wsl --shutdown diskpart # 在 diskpart 里 select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\...\ext4.vhdx" compact vdisk

路径可以在%LOCALAPPDATA%\Packages\下找带Ubuntu的文件夹。这个操作有风险,操作前备份重要数据。

6.4 我踩过的几个坑

第一个坑是驱动版本和 CUDA 版本不匹配。我一开始装了最新驱动,然后按教程装了 CUDA 12.4,结果nvidia-smi显示驱动支持的 CUDA 版本是 12.2,跑 PyTorch 就报错。后来降级驱动才解决。所以装之前一定先看nvidia-smi右上角显示的 CUDA 版本。

第二个坑是在/mnt/c/下跑训练。当时图方便,代码放 Windows 盘里,结果数据加载慢得离谱,GPU 利用率一直上不去。后来把代码和数据都挪到 Linux 侧,训练速度直接翻倍。

第三个坑是conda 环境没激活就装包。有次装完 PyTorch 发现torch.cuda.is_available()是 False,排查半天才发现装到了 base 环境,而 base 环境的 Python 版本和 CUDA 不匹配。所以每次装包前先conda activate确认环境。

7. 性能调优与日常使用建议

7.1 训练时的资源监控

跑训练的时候,开两个终端,一个跑训练,一个监控资源:

watch -n 1 nvidia-smi

这个命令每秒刷新一次显卡状态,能看到 GPU 利用率、显存占用、温度。如果 GPU 利用率长期低于 50%,说明数据加载是瓶颈,可以增加 DataLoader 的num_workers。

CPU 和内存监控用htop:

sudo apt install htop -y htop

7.2 多环境隔离

不同的项目依赖不同版本的库,建议一个项目一个 conda 环境。环境名用项目名,方便识别:

conda create -n project_a python=3.10 conda create -n project_b python=3.11

切换环境用conda activate project_a。导出环境配置:

conda env export > environment.yml

别人拿到这个文件就能复现你的环境:

conda env create -f environment.yml

7.3 备份与迁移

WSL2 的发行版可以导出成 tar 文件,方便备份或迁移到另一台机器:

wsl --export Ubuntu-22.04 D:\backup\ubuntu_backup.tar

恢复:

wsl --import Ubuntu-22.04 D:\wsl\ubuntu D:\backup\ubuntu_backup.tar

这个操作在换电脑或者重装系统时特别有用。我一般配好环境后就导出一份,省得下次重装再折腾一遍。

7.4 与 Windows 侧的协作

虽然开发在 Linux 侧,但有时候需要和 Windows 交换文件。除了/mnt/c/挂载,还可以用explorer.exe直接打开当前目录:

explorer.exe .

这个命令会在 Windows 资源管理器里打开当前 Linux 目录。反过来,在 Windows 里访问 Linux 文件,可以在资源管理器地址栏输入\\wsl$\Ubuntu-22.04\home\你的用户名\。

提示:\\wsl$访问方式在文件多的时候会卡,大批量文件操作还是用命令行cp更靠谱。

8. 写在最后的一点个人体会

这套环境我从早期 WSL1 时代就开始用,一路看着 GPU 直通从不可用到可用再到稳定。现在这套方案已经足够成熟,日常开发、小规模训练、模型推理都能胜任。唯一需要注意的是,WSL2 毕竟不是原生 Linux,某些底层操作比如内核模块加载、特定硬件访问还是会有限制。如果你的工作涉及这些,那还是得考虑原生环境或者远程服务器。

但对于绝大多数 AI 开发场景,WSL2 的性价比是最高的。你不需要额外买机器,不需要维护双系统,Windows 的日常使用和 Linux 的开发环境可以无缝切换。我现在的习惯是,Windows 侧只留浏览器和编辑器,所有命令行操作、代码运行、模型训练全在 WSL2 里,两边通过文件系统互通,效率比之前折腾双系统高太多了。

如果你在部署过程中遇到本文没覆盖的问题,建议先去 WSL 的 GitHub 仓库搜 issue,大部分坑都有人踩过。实在搞不定就wsl --shutdown重启大法,很多时候能解决玄学问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询