进阶端侧 / 本地 4 分钟阅读发布于 · 更新于

Windows WSL2 + Ollama GPU 透传

在 WSL2 内用 NVIDIA GPU 加速运行 Ollama — Windows 本地 LLM 最稳妥的路线。

面向的技术栈

Windows 11(或 Win10 21H2+)· WSL2 Ubuntu 22.04/24.04 · 较新的 NVIDIA Windows 驱动 · Ollama Linux 版 · GGUF Q4_K_M

最近一次修改后未重新实机运行 —— 命令请当作起点,而不是已验证的配方。

WSL2WindowsOllamaNVIDIACUDA

适用于谁

一台带 NVIDIA 显卡的 Windows 机器,你想用 Linux 那套工具(Ollama、llama.cpp、Python)又不想装双系统。如果你只是想聊天、完全不碰终端,Windows 原生的 Ollama 应用更简单 —— 这篇是写给同时还想要 Linux 环境的情况。

前置条件

Windows 11(或 Windows 10 21H2+)、一张 NVIDIA 显卡,以及 Windows 侧装好的较新 NVIDIA 驱动。唯一要紧的规则:不要在 WSL 里装任何 NVIDIA 驱动。NVIDIA 的 CUDA on WSL 指南写得很明确 —— Windows 驱动会以 libcuda.so 的形式映射进 WSL(/usr/lib/wsl/lib),在它上面再装 Linux 驱动就会把它覆盖掉。最容易误踩的是 apt install cuda(或 cuda-drivers):这两个元包会顺带装上 Linux 驱动。如果你确实需要在 WSL 里编译东西用的 CUDA 工具包,NVIDIA 的说法是只装 cuda-toolkit-12-x 这个包。

powershell
# PowerShell (Administrator)
wsl --install
wsl --update
wsl --status          # want: default version 2

# The check that matters — GPU visible from inside the WSL VM
wsl nvidia-smi

给 WSL 虚拟机足够内存

WSL2 跑在一个轻量虚拟机里,内存上限默认是主机内存的 50%(微软文档里 memory 设置的默认值)。这个上限平时看不见,直到模型需要 CPU 卸载时,虚拟机会比 Windows 先耗尽内存。在 %UserProfile%\.wslconfig 里显式设置,然后 wsl --shutdown 让它生效。给 Windows 自己留几 GB。

text
# %UserProfile%\.wslconfig   (example for a 32GB machine)
[wsl2]
memory=20GB
swap=8GB

# then, in PowerShell:
# wsl --shutdown

在 WSL 中安装 Ollama

在 Ubuntu 里装 Linux 版,而不是 Windows 应用 —— 两个都装会有两个服务同时抢 11434 端口和 GPU。在 WSL2 上安装脚本完全不装 GPU 驱动,只检查透传是否可用,nvidia-smi 正常时会打印 "Nvidia GPU detected.";如果没看到这一行,先修好透传再往下走。脚本还会把 Ollama 注册成 systemd 服务。WSL 文档里 systemd 默认是关闭的,没开的话脚本会警告 "systemd is not running",此时没有任何服务在运行 —— 在 /etc/wsl.conf 里开启它,或者在另一个终端里运行 ollama serve。模型放在 WSL 文件系统里(~/.ollama);放在 /mnt/c 下,每次读取都要跨到 Windows 文件系统,加载会慢得多。

bash
curl -fsSL https://ollama.com/install.sh | sh
# look for: "Nvidia GPU detected."

# If it warned "systemd is not running":
#   printf '[boot]\nsystemd=true\n' | sudo tee -a /etc/wsl.conf
#   then in PowerShell: wsl --shutdown

# Most library tags default to Q4_K_M
ollama pull qwen3:8b
ollama run qwen3:8b

确认真的用上了 GPU

Ollama 装不下或找不到 GPU 时会退回 CPU 而不是报错,所以"回答很慢"通常是透传坏了,而不是显卡慢。两个检查点:ollama ps 的 PROCESSOR 一列,整个模型都在显卡上时显示 100% GPU;WSL 里的 nvidia-smi 应该能看到 ollama 进程占着大约模型大小的显存。Qwen3 8B 在 Q4_K_M、Ollama 默认 4096 token 上下文下,本站计算器给出的是约 5.8 GB。如果一个本该装得下的模型 PROCESSOR 里出现了 CPU 占比,问题在透传,不在模型。

bash
ollama ps
# NAME        ID     SIZE    PROCESSOR   UNTIL
# qwen3:8b    <id>   ...     100% GPU    4 minutes from now

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

从 Windows 访问 API

WSL2 默认会转发 localhost,所以在 Windows 浏览器或 PowerShell 里访问 http://localhost:11434 就能连到 WSL 内的服务,不需要额外配置。在 WSL 默认的 NAT 网络模式下,局域网里的其他机器访问不到这个服务 —— 微软文档写明局域网访问需要配一条 netsh portproxy 规则。换成镜像网络模式(networkingMode=mirrored,Windows 11 22H2+)就不一样了:WSL 直接接入局域网,绑定在 0.0.0.0 上的 Ollama 对网络里每台机器都可见,而且前面没有任何鉴权。除非你确实想这样,否则 OLLAMA_HOST 保持默认。

powershell
# From Windows PowerShell (curl.exe — plain curl is an alias there)
curl.exe http://localhost:11434/api/tags

常见问题

wsl nvidia-smi 失败:更新 Windows 驱动,然后 wsl --update 与 wsl --shutdown;不要在 WSL 里装驱动。原本好好的,一次 apt upgrade 之后不行了:检查是不是装进了 cuda 或 cuda-drivers 包 —— 那是 Linux 驱动把映射进来的驱动覆盖了。"could not connect to ollama app":服务没在运行,几乎都是因为 systemd 没开(见安装一节)。nvidia-smi 正常但 Ollama 走 CPU:通常是另一份 Ollama(Windows 应用)占着端口,或者模型对这张卡太大 —— 用 ollama ps 看。磁盘被占满:WSL 虚拟磁盘会为拉取的模型扩容,但不会自己缩回去;ollama rm 能删模型,要真正回收空间得压缩 vhdx(.wslconfig 里的 sparseVhd=true 只对新建的磁盘生效)。首次加载极慢:模型多半放在 /mnt/c 下。

下一步

拉取更大的模型之前,先把你的显卡放进显存计算器,看看在你实际使用的上下文长度下还能装下什么 —— 在 Windows 上,记得减去桌面已经占用的 0.5–1.5GB。

常见问题

在 WSL 里跑 Ollama 需要装 CUDA 工具包吗?

不需要。Ollama 自带 CUDA 运行库,用的是 Windows 映射进 WSL 的驱动。工具包只在你要自己编译 CUDA 代码时才需要 —— 真要装的话只装 cuda-toolkit-12-x,千万别装 cuda 或 cuda-drivers 元包,它们会带上 Linux 驱动,把透传弄坏。

WSL2 会比在 Windows 上原生跑 Ollama 慢吗?

本站没有实测过两者的差距,所以不给数字。能说的是:模型进了 GPU 之后,两种方式都是同一张卡、同一个驱动在生成。WSL2 真正的代价在边缘 —— 模型溢出到 CPU 时才会碰到的 50% 内存上限,以及模型放在 /mnt/c 下时的慢加载,上文都讲了。

局域网里的其他机器能用这个 Ollama 服务吗?

在 WSL 默认的 NAT 模式下不能 —— 需要在 Windows 上配 netsh portproxy 规则。在镜像网络模式下,只要 Ollama 监听 0.0.0.0 就能访问,而这个 API 没有任何鉴权。如果需要局域网访问,在前面加一层带鉴权的反向代理,不要直接暴露 11434 端口。

这篇指南用到了什么

格式
GGUF

接下来

看看 🟢 RTX 4060 Ti 16G 还能跑哪些模型反向查询 —— 16GB、4096 上下文,按质量排序

本文涉及的模型

它真的跑起来了吗?

复制命令并不等于它能用,所以站内只在这里问一次。除了你的这个回答之外,不收集任何东西。

相关指南

部署指南仅供学习参考。每个模型均有独立许可协议 — 下载或部署前请阅读 Hugging Face 官方模型卡。