WSL2 部署 AI 开发环境:内核级 Linux + GPU 直通
系列第 4 篇。Windows 上装 CUDA、装 PyTorch 能跑,但不少模型工具(Ollama 的 Linux 脚本、vLLM、docker 全家桶)在 Linux 上更顺滑;而 Windows 里装虚拟机又笨重、还常拿不到 GPU 加速。WSL2 是两全其美的方案 :一条
wsl --install装好"真 Linux",GPU 还能直接给 WSL 用。对在国内组环境的读者,WSL2 还有一层现实好处:Linux 侧的依赖与模型缓存全部留在自己的文件系统里,配合国内镜像源,整个链路(驱动在 Windows 装、环境在 WSL 装、模型从镜像下)都是可控的。本篇覆盖 WSL1/WSL2 区别、一键安装、.wslconfig资源限制、GPU 直通原理、WSL 内装 PyTorch 验证、与 Windows 互访文件的性能取舍,以及日常运维命令。

一、为什么需要它:WSL1 和 WSL2 到底差在哪
先建立心智模型:WSL 不是虚拟机,是在 Windows 内核里"翻译"Linux 系统调用的层。
- WSL1 :纯"翻译层"。Linux 进程直接在 Windows 内核上跑,启动快、占内存少,但很多依赖真 Linux 内核行为的功能是缺失的:部分系统调用行为不一致,GPU 加速基本用不上。
- WSL2 :跑在一个轻量级虚拟机里的真 Linux 内核。它有独立的根文件系统、自己的内核,兼容几乎所有 Linux 发行版和内核模块,还能直通 GPU。代价是占一点额外内存(默认不设上限,WSL2 可能把 Windows 物理内存吃得比较多------这正是本篇第三章要配置的原因)。
一句话:WSL1 是"Linux 应用跑在 Windows 上",WSL2 是"Windows 上跑了一个小 Linux 机器"。做 AI 开发要 GPU、要 docker、要装各种 .so 依赖,必须 WSL2。
一个常见的误区先说破:有人以为 WSL2 是"更快的 WSL1",其实它是另一个物种------WSL1 进程用的是 Windows 内核,WSL2 进程用的是 Linux 内核(运行在轻量虚拟机里)。这决定了:WSL2 里 uname -r 看到的是 linux 版本号,apt 装的包、内核模块的行为与真 Linux 一致,绝大多数 AI 工具链在 WSL2 里的表现和服务器上没有区别。
WSL2 在 AI 场景的额外好处:很多大模型工具链的官方安装脚本就是给 Linux 写的(例如 Ollama 官方 Linux 安装脚本),在 WSL2 里直接照抄文档即可,少踩 Windows 路径与权限的坑,也不用为"Windows 上跑 Linux 工具链"单独开一台虚拟机------Hyper-V 或第三方虚机跑 Linux 的 GPU 直通要单独配置、启动慢、占资源多,日常开发不划算;WSL2 恰好把"Linux 工具链 + GPU 直通 + 轻量"三者凑齐了。
二、环境要求
| 项目 | 要求 | 说明 |
|---|---|---|
| 系统 | Windows 10 21H2+ 或 Windows 11 | 老版本 Win10 需手动启用"适用于 Linux 的 Windows 子系统" |
| 硬件虚拟化 | CPU 虚拟化开启 | BIOS 里开 VT-x / AMD-V;没开则 wsl --install 会报虚拟化未启用;开没开可以在"任务管理器 → 性能 → CPU"的"虚拟化"一栏确认,不必进 BIOS 瞎摸 |
| 内存 | 建议物理内存 ≥ 16 GB | WSL2 默认无上限,建议用 .wslconfig 限到 8 GB 左右 |
| GPU | NVIDIA 卡 + Windows 侧游戏驱动 | WSL 内不需要再装驱动,这是 WSL2 GPU 直通的核心 |
| 磁盘 | 建议 ≥ 100 GB 空闲 | 一个 Ubuntu + Python + PyTorch 环境 + 模型,轻松几十 GB |
三、安装与部署
3.1 一键安装 WSL2 + Ubuntu
以管理员身份打开 PowerShell,执行:
powershell
wsl --install
这条命令会一次性完成:启用必要 Windows 功能、下载 WSL2 内核、安装默认的 Ubuntu 发行版。装完重启电脑。
想直接指定发行版也可以:
powershell
wsl --install -d Ubuntu-22.04
重启后打开 Ubuntu,会提示设置用户名和密码,照提示操作即可。Ubuntu 自带的 python3 版本(3.10.x)已经够本系列所有篇目使用,无需另装。确认你已经在 WSL2 上:
powershell
wsl --list --verbose
输出里 Ubuntu 那一行的 VERSION 列应为 2 (若为 1,用 wsl --set-version Ubuntu-22.04 2 升级,见第五章运维命令)。
3.2 配置 .wslconfig 资源限制(必做)
WSL2 默认能占用物理内存的一大半。跑大模型时 Windows 本身还要留内存,不限制的话容易把 Windows 拖到卡死 。在 Windows 用户目录 C:\Users\<你的用户名>\.wslconfig 新建/编辑(注意是 Windows 侧文件,不是 WSL 内):
[wsl2]
memory=8GB
processors=4
swap=2GB
memory:WSL2 可用物理内存上限,按机器内存设(16 GB 内存设 8GB 是稳妥值);processors:WSL2 可见的 CPU 核心数,设成物理核心数或稍少;swap:WSL2 自己的交换空间。内存不够时它顶一下------如果 WSL 内进程被Killed(OOM),先把这里加大的思路之一(见故障排查)。
改完必须执行 wsl --shutdown 再重启 WSL 才生效 ------这是新手最常漏的一步。.wslconfig 只在 WSL 冷启动时读取。
3.3 GPU 直通原理(关键:Windows 侧装驱动,WSL 内不用装)
WSL2 GPU 直通的机制:
- Windows 侧 :安装 NVIDIA 官方游戏/创意驱动(新版驱动自带 WSL 支持,驱动包里就包含面向 WSL 的组件);
- WSL 内核侧 :WSL2 内核通过专用组件把 GPU 直通给 Linux,WSL 内能直接执行
nvidia-smi; - WSL 内 :不需要、也不应该再装 NVIDIA 驱动。你只需要装 CUDA Toolkit(可选)或直接装 PyTorch 的 cuXXX 版 wheel,运行时自动找到显卡。
一句话:驱动只装在 Windows 上,WSL 里装的是"工具链",不是"驱动" 。很多人照 Linux 教程去 WSL 里 apt install nvidia-*,结果反而装坏,别这么干。
3.4 WSL 内装 Python + PyTorch 并验证 GPU
进入 Ubuntu 后:
bash
python3 -V
输出 Python 3.10.x(Ubuntu 22.04 自带),无需另装。版本选择原则与 venv/conda 用法同《AI-03 Python环境与虚拟环境》------建议照该篇建一个 venv 再装 PyTorch,避免弄脏系统 Python。下面命令假定已在激活的虚拟环境内:
bash
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
验证(期望输出 2.x.x+cu124 True):
bash
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
True 说明 WSL 内已直通 GPU;False 按"六、故障排查"第 1、3 条定位。nvidia-smi 在 WSL 内直接能跑,输出与 Windows 侧一致。我一般按固定顺序验证 WSL 侧:先 nvidia-smi 出表(驱动层),再 torch.cuda.is_available()(框架层),最后才怀疑模型与应用------顺序反了,排查时间翻倍。
四、验证
三关全过才算部署成功:
- WSL2 身份 :
wsl --list --verbose中 Ubuntu 的 VERSION 列为 2; - 资源限制 :
.wslconfig配置后wsl --shutdown,再进 WSL 执行free -h,看到的总内存约等于memory=的值(不是 Windows 全量内存); - GPU 直通 :WSL 内
nvidia-smi出表(驱动版本 + GPU + 显存),且torch.cuda.is_available()为True。
五、进阶技巧
-
Windows ↔ WSL 互访文件。两个方向:
- Windows 侧:资源管理器地址栏输
\wsl$\Ubuntu-22.04可像访问网络共享一样进 WSL 文件系统(或\wsl.localhost\Ubuntu-22.04); - WSL 侧:Windows 的 C 盘挂载在
/mnt/c,例如ls /mnt/c/Users。
性能建议 :跨文件系统访问走 9P 协议,比本机原生慢不少。模型权重、数据集、venv 一律放 WSL 内部 (如~/models、~/projects/xxx/.venv),/mnt/c只用来取放临时文件。把整个项目放 C 盘再进 WSL 跑,训练/推理 IO 会明显拖慢。判断一个文件在哪一侧很简单:~/开头在 WSL 内,/mnt/c/...开头在 Windows 盘------项目目录、.venv、~/.cache(模型缓存)、~/.ollama都应该落在~/下面。
- Windows 侧:资源管理器地址栏输
-
运维三命令。
wsl --shutdown:关掉所有 WSL 实例,释放内存;改.wslconfig后必做;wsl --list --verbose:看发行版、VERSION、状态(Running / Stopped);wsl --update:WSL 内核/组件出兼容问题(如新显卡驱动后 nvidia-smi 异常)时,在 PowerShell 执行升级 WSL 本体。
-
WSL2 跑 Ollama 。WSL 内照官方 Linux 脚本安装 Ollama(详见《AI-07 Ollama本地部署大模型》),模型存 WSL 内(
~/.ollama),Windows 侧浏览器直接访问http://localhost:端口即可------WSL2 的 localhost 会自动转发到 Windows(前提是服务监听在127.0.0.1或0.0.0.0)。
六、故障排查
同样走分层定位:网络层 → 驱动层 → 框架层 → 显存层 → 应用层。WSL2 特有的坑集中在驱动层与内存层:
| # | 症状(报错原文) | 层 | 原因 | 解决 |
|---|---|---|---|---|
| 1 | WSL 内 nvidia-smi 报错 The NVIDIA driver on your system is too old |
驱动层 | Windows 侧驱动太老不支持 WSL2 GPU 直通 | 升级 Windows 侧 NVIDIA 驱动到最新版(注意:升级 Windows 驱动,不是去 WSL 里装驱动) |
| 2 | WSL 内 Could not load libcuda.so.1 |
驱动层 | WSL 内未找到 GPU 用户态库(通常根因同上:Windows 侧驱动问题) | 升级 Windows 侧驱动后 wsl --shutdown 重启;不要手动往 WSL 装驱动 |
| 3 | torch.cuda.is_available() 返回 False |
框架层 | 装了 CPU 版 PyTorch;或驱动过老 | 重装 cuXXX 版 wheel(--index-url https://download.pytorch.org/whl/cu124);nvidia-smi 先确认驱动 |
| 4 | WSL 内进程突然消失 / Killed(dmesg 见 oom-kill) |
内存层 | 物理 RAM 不足(非显存),WSL2 被内存限制杀掉 | 检查 .wslconfig:加大 memory= 与 swap=,改完 wsl --shutdown 生效 |
| 5 | HuggingFace 下载卡住 / ConnectionError / 超时 |
网络层 | 国内访问 huggingface.co 受限 | WSL 内 export HF_ENDPOINT=https://hf-mirror.com 或改用 ModelScope |
| 6 | pip install 慢 / 超时 |
网络层 | 直连 pypi.org 慢 | 清华镜像:pip install <pkg> -i https://pypi.tuna.tsinghua.edu.cn/simple |
三条实战经验:
-
WSL 内一切 GPU 异常,先看 Windows 侧驱动版本 ,再看 WSL 内组件。顺序反了会白折腾半天:
wsl --update解决不了驱动太老的问题,apt install nvidia-*只会把环境搞乱。 -
改
.wslconfig后忘了wsl --shutdown是高频事故:配置只在冷启动时读取,改完不 shutdown,free -h看到的还是旧值,会误以为"没配置成功"。 -
先算好 WSL 的内存预算再跑大模型 。显存管 GPU 侧,
.wslconfig的memory管 WSL 的 CPU 侧内存:7B 级推理主体在显存里,但数据预处理、CPU offload、并发请求都吃 WSL 内存;内存限得太小,进程被 OOM 杀掉(Killed)是典型表现------先确认memory/swap给够了,再怀疑别的。
七、本篇自检清单
- 能说出 WSL1 与 WSL2 的本质区别(翻译层 vs 真 Linux 内核)
-
wsl --list --verbose显示 Ubuntu 为 VERSION 2 -
.wslconfig已配置 memory/processors/swap,且改完执行过wsl --shutdown -
free -h中总内存 ≈ memory 配置值 - WSL 内
nvidia-smi出表,torch.cuda.is_available()为True - 会双向互访文件(
\wsl$\Ubuntu-22.04与/mnt/c),且模型/环境都放在 WSL 内 - 掌握
wsl --update/wsl --list --verbose/wsl --shutdown三个运维命令
一句话收尾:WSL1 是翻译层、WSL2 是真内核,AI 开发必选 WSL2;驱动只装 Windows 侧,WSL 里装工具链不装驱动;.wslconfig 限好内存,改完必 shutdown;模型与环境全放 WSL 内。 这四点守住,WSL2 就是一个长期稳定的 AI 开发底座。
下一篇:《AI-05 显存计算与模型选择》------先算清楚你的显存能跑多大的模型,再决定下载什么。
参考
- Microsoft 官方文档:WSL 2 简介(https://learn.microsoft.com/zh-cn/windows/wsl/)
- Microsoft 官方文档:在 WSL 中使用 CUDA 与 GPU(https://docs.nvidia.com/cuda/wsl-user-guide/index.html)
- WSL 命令行参考(wsl --install / --list / --shutdown / --update):https://learn.microsoft.com/zh-cn/windows/wsl/wsl-commands
- 清华大学 TUNA pip 镜像:https://pypi.tuna.tsinghua.edu.cn/simple