先说我折腾这套环境踩出来的结论:在 WSL 里配置 Ollama,本质上不是为了“装一个软件”,而是为了让 Windows 这台日常用机,拥有一个和 Linux 服务器完全一致的本地大模型推理环境。我建议所有 Windows 用户都优先走这条路线,而不是直接在 Windows 安装包上双击下一步。下面这份笔记是我从 WSL 安装、磁盘迁移、Ollama 部署、模型目录改盘、GPU 验证到各种报错排查的完整记录,照着抄就行。
1. 为什么要在 WSL 里跑 Ollama,而不是直接用 Windows 版
1.1 三套方案的取舍
很多人一上来就问:Ollama 官方明明有 Windows 安装包,为什么还要绕一圈装 WSL?我刚开始也这么想,直到我同时跑过三套方案之后才明白差距在哪。
- Windows 原生版:安装最省事,双击 exe 就能用。但它的服务托管、GPU 调度、模型文件管理和 Linux 版不是一套逻辑,遇到问题你搜到的解决方案大部分是 Linux 的,得自己翻译一遍。
- WSL2 里的 Linux 版:这就是本文的主角。安装路径和 Linux 服务器完全一样,所有网上教程、脚本、社区方案直接复刻,几乎零误差。
- Docker 里的 Ollama:最干净,但 Docker Desktop 本身在 Windows 上也是跑在 WSL2 里的,等于多包了一层,性能和磁盘 IO 都有损耗,不适合作为主力方案。
我实测下来,WSL2 里直接跑 Ollama 是性能和折腾成本最平衡的选择。同一个模型,Windows 原生版和 WSL2 版的推理速度几乎没有差别,因为底层都是走 GPU 直通,但 WSL2 版的配置灵活度高太多。
1.2 WSL2 的关键机制:它是虚拟机,但又不完全是
WSL2 和传统虚拟机的区别在于它跑在一个轻量级实用工具虚拟机(utility VM)上。对普通用户来说,你只需要理解三个关键点:
- 磁盘是一个 VHD 文件:WSL2 的整个 Ubuntu 系统都装在一个固定大小的虚拟磁盘文件里。默认放在 C 盘,这也是很多人几天之后 C 盘爆掉的根本原因。
- 与 Windows 共享网络:WSL2 里的服务可以映射到 Windows 的 localhost,让你在浏览器里直接访问 WSL 里的服务。
- GPU 是直通的:只要 Windows 侧装好显卡驱动,WSL 里就能直接用 CUDA 或 ROCm 跑大模型,不需要在 WSL 里再装驱动。
搞清楚这三点,后面所有配置操作你都能明白背后的逻辑。
2. 环境准备:先把 WSL2 这块地基打牢
2.1 5 分钟装好 WSL2
前提条件:Windows 10 2004 以上版本或 Windows 11。如果是 Win10,建议先更新到最新补丁。
以管理员身份打开 PowerShell,执行:
wsl --install这个命令会自动完成三件事:启用 WSL 功能、启用虚拟机平台、下载并安装默认的 Ubuntu 发行版。装完重启电脑,然后设置 WSL 默认版本为 2:
wsl --set-default-version 2重启之后,首次进入 Ubuntu 会让你设置用户名和密码。这个用户名最好记住,后面改 WSL 默认用户时会用到。
验证一下当前状态:
wsl --status wsl -l -v看到 VERSION 那一列是 2,就说明用的是 WSL2。如果你之前装过 WSL1 想升级到 2:
wsl --set-version Ubuntu-22.04 22.2 把 Ubuntu 装到 D 盘,避开 C 盘爆炸
这一步是很多人问过我的:WSL 装到 D 盘怎么弄?如果你的 WSL 版本足够新,Windows 11 上可以直接指定安装位置:
wsl --install -d Ubuntu-22.04 --location D:\WSL\Ubuntu如果已经装好了 Ubuntu,再想迁到 D 盘,就用导出导入三连:
wsl --export Ubuntu-22.04 D:\ubuntu-backup.tar wsl --unregister Ubuntu-22.04 wsl --import Ubuntu-22.04 D:\WSL\Ubuntu D:\ubuntu-backup.tar --version 2注意wsl --unregister会把 WSL 里的所有文件清空,所以必须先导出再注销。我建议无论新装还是迁移,都直接把虚拟磁盘放到 D 盘一个专门目录里,比如D:\WSL\Ubuntu,方便后期备份和管理。
导入之后有个小坑:默认用户会变成 root,你需要手动改回来。双击打开 D 盘里的 Ubuntu 快捷方式,或者用命令:
ubuntu2204.exe config --default-user 你的用户名不改成普通用户的话,后面所有文件权限都会乱套,尤其你以后要在 WSL 里跑 VSCode 或写代码,root 用户会导致文件归属错乱。
2.3 进入系统后的基础初始化
进入 Ubuntu 终端,先做三件小事:
更新软件源:
sudo apt update && sudo apt upgrade -y这里你会发现默认源在国外,速度慢是正常的。建议把 apt 源换成国内镜像源。编辑/etc/apt/sources.list,把archive.ubuntu.com替换成你所在地区访问速度合适的镜像站,比如清华、阿里云的 Ubuntu 镜像。替换后再次sudo apt update。
安装常用工具:
sudo apt install -y curl git build-essential python3-pip检查 systemd 是否生效:
systemctl --versionWSL2 较新版本默认启用了 systemd,如果提示未运行,编辑/etc/wsl.conf:
[boot] systemd=true然后在 Windows PowerShell 里执行wsl --shutdown重启 WSL。
3. Ollama 安装:下载慢的坑我替你踩完了
3.1 官方脚本为什么动不动就卡死
绝大多数人第一反应是执行 Ollama 官方一键安装脚本:
curl -fsSL https://ollama.com/install.sh | sh这个脚本本身很小,问题在于它内部还要去 GitHub 拉取 Ollama 的 Linux 二进制安装包。在普通网络环境下,这个下载经常卡在Downloading ollama...或者进度条一动不动。这不是你网络坏了,而是到 GitHub 的链路不稳定。
我试过的正面刚方案效果都不理想,最后改成手动安装,稳定、可控、还能指定版本,推荐所有人直接用手动方案。
3.2 手动安装 Ollama 的完整流程
去 Ollama 的 GitHub Releases 页面下载对应架构的 Linux 包。绝大多数 Windows 的 CPU 是 AMD64,下载ollama-linux-amd64.tgz;如果是 ARM 设备就下载ollama-linux-arm64.tgz。
防止有人找错,我说明一下:这个文件包含 Ollama 的二进制文件、systemd 服务文件和一个 ollama 用户创建脚本,相当于官方安装脚本最终要落地的所有内容,只是不需要联网下载。
下载到 WSL 里之后,执行安装:
sudo tar -C /usr -xzf ollama-linux-amd64.tgz然后创建运行 Ollama 的专用用户:
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama接下来创建 systemd 服务文件/etc/systemd/system/ollama.service:
[Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/home/ollama/.ollama/models" [Install] WantedBy=default.target这里我提前把OLLAMA_HOST改成了监听所有网卡,这样后面用 Windows 浏览器或局域网设备访问时不需要再改配置。OLLAMA_MODELS指向了 ollama 用户目录,这一步和后面第 4 节密切相关。
启动服务:
sudo systemctl daemon-reload sudo systemctl enable --now ollama systemctl status ollama看到active (running)就成功了。验证一下:
ollama --version ollama list curl http://localhost:11434返回Ollama is running就说明服务正常。
3.3 为什么我不推荐直接改 PATH 硬跑
有些人偷懒,把ollama二进制解压后直接运行ollama serve,不创建 systemd 服务。这在临时体验时没问题,但一旦重启 WSL 或关闭终端,服务就断了。而且 Ollama 默认绑定的是127.0.0.1,出了 WSL 就访问不到,还得额外处理网络监听问题。
所以我强烈建议用 systemd 托管,一劳永逸。
4. 模型管理与存储:别让 C 盘被撑爆
4.1 模型默认存哪
Ollama 默认把模型存放在~/ .ollama/models目录下。以 root 用户运行就是/root/.ollama/models,以普通用户运行就是/home/你的用户名/.ollama/models。一个 7B 参数的模型大约要 4~6GB,一个 70B 模型要 40GB 以上,下载两三个模型,C 盘空间就告急。
我建议从一开始就把模型目录改到单独位置。最稳妥的是改 systemd 服务里的OLLAMA_MODELS环境变量,指向一个容量充足的目录。如果在虚拟磁盘上空间足够大,就放在 Linux 文件系统里,读写性能最好。
如果你确实想把模型放 D 盘 NTFS 分区,也可以通过/mnt/d/ollama/models这样的路径实现。但我要提醒你:WSL2 访问 NTFS 分区的跨文件系统 IO 性能明显比 ext4 差,而加载大模型时要读几个 GB 的权重文件,这个性能损失会直接反映在模型首次加载速度和运行时的换页表现上。我更推荐的做法是:把 WSL2 的虚拟磁盘文件放在 D 盘,模型目录保留在 WSL 内部,这样既省 C 盘空间又能拿到完整的 Linux 文件系统性能。说直白点,VHD 文件在 D 盘,里面的一切都在 D 盘,但给 WSL 的感觉还是本地磁盘。
4.2 高频环境变量速查
除了OLLAMA_MODELS和OLLAMA_HOST,这几个环境变量在调试时很常用:
| 环境变量 | 作用 | 我的建议值 |
|---|---|---|
OLLAMA_HOST | 监听地址和端口 | 0.0.0.0:11434 |
OLLAMA_NUM_PARALLEL | 并行处理请求数 | 默认即可,8G 显存别超过 2 |
OLLAMA_MAX_LOADED_MODELS | 最多同时加载的模型数 | 默认即可 |
OLLAMA_KEEP_ALIVE | 模型在内存/显存中的驻留时间 | 5m或-1(常驻) |
OLLAMA_DEBUG | 输出详细日志 | 排错时设为1 |
修改 systemd 服务文件的Environment=行后,执行:
sudo systemctl daemon-reload sudo systemctl restart ollama4.3 模型下载失败与中断怎么办
使用ollama run qwen2.5:7b或ollama pull qwen2.5:7b下载模型时,因为模型文件放在对象存储上,偶尔会中断或报错。
我的处理流程:先确认是不是完整下载失败,用ollama list看看模型状态。如果模型显示存在但一跑就报错,多半是文件损坏,直接删掉重下:
ollama rm qwen2.5:7b然后重新 pull。如果网络实在太慢,还有一个思路:在另一台网络环境好的机器上把~/.ollama/models整个目录打包拷贝过来,解压到新机器的相同路径下,再执行ollama list就能直接识别模型文件,不需要重新下载。这个方法在离线内网环境特别实用。
另外,Ollama 官方模型的下载域名在某些地区表现不稳定,国内有一些镜像站提供了 Ollama 模型的同步下载。你可以把模型文件的 URL 手动下载后放到指定目录,或者使用支持镜像的拉取工具。注意不要用来路不明的第三方整合包,一是模型文件可能被篡改,带恶意权重;二是版本不兼容会浪费更多时间。
5. GPU 加速:确认显卡真的在工作
5.1 驱动逻辑:Windows 装驱动,WSL 只调用
很多第一次在 WSL 里跑大模型的人都会问:我要不要在 Ubuntu 里装一遍 NVIDIA 驱动?不需要。WSL2 的 GPU 直通机制是 Windows 图形驱动栈直接把 CUDA 能力暴露给虚拟机,你只需要在 Windows 侧安装新版 NVIDIA 驱动即可。
进入 WSL 后运行:
nvidia-smi如果能正常输出显卡信息、驱动版本、CUDA 版本,说明直通没问题。我见过不少人卡在这一步,多半是因为 Windows 驱动版本太老,去 NVIDIA 官网更新到 Game Ready 或 Studio 驱动即可。
需要区分两个概念:nvidia-smi里的 CUDA Version 表示驱动支持的 CUDA 运行环境版本,并不代表你已经安装了 CUDA Toolkit。Ollama 的 Linux 版自带 CUDA runtime,所以一般情况下不需要手动安装 CUDA Toolkit。除非你还要在 WSL 里跑 PyTorch 训练脚本,才需要额外安装和 PyTorch 版本匹配的 CUDA Toolkit。
5.2 验证模型推理确实在用显卡
光看nvidia-smi有输出还不够,要验证 Ollama 推理时真的把计算加载到了 GPU 上。
先启动一个模型:
ollama run qwen2.5:7b "你好,简单介绍一下自己"另开一个终端窗口,运行:
nvidia-smi观察进程列表里有没有 ollama 的进程,以及显存占用是否明显上升。7B 模型通常是 4~6GB 显存占用,如果显存占用为 0 或者进程列表为空,说明 Ollama 在跑 CPU 模式。
排查思路按顺序来:
- 确认
nvidia-smi能识别 GPU。 - 检查系统日志里有没有 CUDA 相关报错:
journalctl -u ollama -e。 - 确认模型不是
:cpu版本,部分模型的特殊 tag 会强制走 CPU。 - 如果还是不行,设置调试日志再看:
OLLAMA_DEBUG=1 ollama serve。
5.3 AMD 显卡用户特别提醒
用 AMD 显卡(比如 7900XTX)的用户,我看到很多人在 WSL 里折腾 PyTorch 和 Ollama 的 ROCm 支持,说实话目前体验不算省心。WSL2 对 AMD ROCm 官方支持还不完善,Ollama 在 Linux 下的 ROCm 支持是有的,但在 WSL 里经常出现驱动识别不到、库文件加载失败的问题。
如果你用的是 AMD 显卡,我的建议是优先用 Windows 原生的 Ollama 安装包,ROCm 支持反而比 WSL 里更成熟。这也是少数我推荐放弃 WSL 方案的情形。
6. 把 Ollama 接进 Windows 工具链
6.1 从 Windows 直接访问 WSL 里的服务
最省心的一点是:WSL2 默认开启了 localhost 映射。你在 Windows 浏览器里直接访问:
http://localhost:11434就能看到 Ollama 的响应。这意味着 AnythingLLM、ChatBox、Open WebUI 这类桌面应用,填 API 地址时直接填http://localhost:11434就行,不用管 WSL 里的 IP 是多少。
如果你需要从局域网其他设备访问,比如手机或另一台电脑,那就得做端口转发。在 Windows PowerShell(管理员)里执行:
netsh interface portproxy add v4tov4 listenport=11434 listenaddress=0.0.0.0 connectport=11434 connectaddress=<WSL的IP>WSL 的 IP 用hostname -I获取。同时确认 Windows 防火墙放行了 11434 端口。
但这里有个坑:WSL2 的 IP 在每次重启后可能变化,所以动态 IP 场景需要写脚本定期更新 portproxy 规则。如果只是自己 Windows 上用,直接走 localhost 就够了,完全不用碰这个。
6.2 在 VSCode 里跑 Ollama
用 VSCode 连接 WSL 很简单,安装微软官方的WSL扩展后,左下角绿色按钮选择“连接到 WSL”,VSCode 就会以远程开发模式打开 WSL 里的工作区。
在 VSCode 的终端里直接就能用 ollama 命令。如果你想在编辑器里集成 AI 对话,可以用 Continue 这类插件,配置 Ollama 为 provider,API 地址填http://localhost:11434,模型选你本地已经 pull 的模型。
6.3 用 AnythingLLM 或 Open WebUI 搭个聊天界面
我自己一直用 AnythingLLM 作为 Ollama 的前端,原因很简单:它支持完整的工作区管理、文档库、多模型切换,且对中文界面友好。
如果你喜欢 Docker 一键部署,Open WebUI 也很稳:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main启动后浏览器访问http://localhost:3000,在设置里把 Ollama 的地址填http://host.docker.internal:11434就可以了。注意容器内不能直接写 localhost,要用host.docker.internal指向宿主机,再由宿主机映射到 WSL 里的 Ollama。
7. 高频报错排查记录
7.1ollama run报 500 internal server error: llama-server process
这个报错我遇到不下五次,典型的表面症状是:
Error: 500 internal server error: llama-server process这不是 Ollama API 挂了,而是启动模型时底层的 llama-server 进程崩了。按这个顺序查:
先看详细日志:
sudo journalctl -u ollama -e --no-pager或者用调试模式直接跑:
sudo systemctl stop ollama OLLAMA_DEBUG=1 ollama serve然后另开终端尝试ollama run,观察调试输出。我统计下来最常见的原因是内存不足。llama-server 加载模型时既吃显存也吃 CPU 内存,尤其 7B 以上模型在加载权重时瞬间内存占用会暴涨。如果你的电脑内存只有 16G,建议先关了浏览器再跑模型,或者加 swap:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile第二个常见原因是模型文件损坏。修复方式上文已经说了,ollama rm后重新 pull。
第三个原因是并发请求冲突。如果你同时开了多个窗口跑不同的模型,默认配置下一个 Ollama 实例能管理的并发有限,重启 Ollama 服务通常能解决:
sudo systemctl restart ollama7.2 WSL 安装时报 createvm/hcs/error_file_n
这类错误代码看起来吓人,比如wsl/installdistro/service/registerdistro/createvm/hcs/error_file_n,但原因其实很集中。
最常见的是 BIOS 虚拟化没开启。重启进 BIOS,找到Intel VT-x或AMD SVM,设为 Enabled。然后是 Windows 的虚拟机平台功能没启用完整:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完重启,再执行:
wsl --update还有一种情况是第三方杀毒软件或系统优化工具把 WSL2 的虚拟机管理程序给拦截了,报错日志会在 Windows 事件查看器里留下线索。遇到这种情况,先把安全软件的虚拟化防护暂时关掉试一次。
7.3 下载慢的终极解决思路
下载慢主要分两层:Ollama 程序本身的下载慢,和模型文件下载慢。
程序下载慢,直接出手动安装那条路,从国内能访问的镜像站点或加速下载渠道把ollama-linux-amd64.tgz拿来,本地解压。模型文件下载慢,可以换时段重试,或者用镜像站的方式拉取。
我个人的习惯是:把常用模型提前下载好,做成一个模型备份目录放在移动硬盘上,换机器时直接拷目录恢复,避免重复踩下载慢的坑。
最后说点我的实操体会
整套环境从零搭到稳定运行,我前前后后折腾了两天,最大的感悟是:WSL 2 里配置 Ollama,每一步看似独立,其实环环相扣。磁盘位置决定模型放哪,模型路径由 systemd 环境变量决定,而 systemd 又决定了服务能不能开机自启。建议你装好后把这些文件路径、环境变量写进自己的笔记,否则一个月后连自己都忘了当初配置了什么。
最后分享一个我一直在用的小技巧:在 Windows Terminal 里新建一个配置文件,命令行填wsl -d Ubuntu-22.04,启动目录设为 WSL 的工作区,这样每次一键就能进入带 Ollama 服务的 Linux 环境。配合sudo systemctl status ollama看一眼状态,基本上就不会再出现“服务没起来”这种尴尬局面了。