系列文章目录

第一章 【WSL2 + Ollama】windows主机本地部署AI模型编程



前言

主机用着 i5-13490F + 32G + RTX 4070,日常 3A 不愁,但最近开始研究 LLM,总不想把所有思考都喂给云端的 GPT/Claude API,一来续命要钱,二来某些代码不太想往外发。翻箱倒柜发现家里还有一台几年前装的副机,塞着一张 RTX 2080Ti 11G。这张卡放 2026 年回头看,显存比 4070 还小 1G,推理性能也被 50 系按在地上摩擦,但11G 显存跑个 Qwen Coder 7B 完全没问题,丢在那吃灰太可惜了。

折腾的目标很明确:把这台副机变成一台 24 小时常驻的本地 AI 编程工作站,主机用 VS Code 跨网过来连,Continue.dev 当前端,Ollama 当后端,Qwen2.5-Coder 当大脑。整个工作流跑在 WSL2 里(Windows 装系统是因为这台副机偶尔还要打游戏,不想完全 Linux 化)。

这篇是系列的第一篇,聚焦把基础工作流跑通 —— 装系统、配 GPU 透传、装 Ollama、配 Continue.dev、Remote-WSL 跨机使用。后面两篇会讲进阶用法和升级到 Agent 模式的硬件门槛。

一、为什么用 WSL2 跑这套,而不是直接 Windows 原生

可能你会问:Ollama 不是 Windows 原生版也支持 GPU 吗?干嘛走 WSL2 绕一圈?

我自己折腾下来的几个理由:

  1. 本地 AI 工具链 90% 的最佳实践都是 Linux 优先 —— Continue.dev 的细节调优、Ollama 的 systemd 管理、未来想换 vLLM / llama.cpp 自己编译,Linux 都比 Windows 顺
  2. WSL2 已经支持 CUDA 直通,在 GPU 性能上几乎没有损失,只在跑模型时会多吃 500MB-1GB 的小开销,完全可以接受
  3. systemd 管理服务比 Windows 服务方便太多,改个环境变量重启一下就行
  4. VS Code Remote-WSL 体验很完美,本质上就是 VS Code Server 跑在 Linux 里,前端跑在 Windows 里,跟你直接用 Linux 几乎没差别

如果你完全不想用 WSL2,Windows 原生 Ollama 也能跑,但本系列不打算覆盖那条路 —— 想 follow 这篇,需要先确保你的 Windows 是 Win11 或 Win10 21H2+,WSL2 已经装好。

二、准备工作

(1) 硬件清单

副机的配置如下,作为参考:

配置项详情
CPUIntel Core i7-8700(6 核 12 线程,带 UHD 630 核显 👈 关键)
内存32 GB DDR4
显卡NVIDIA RTX 2080 Ti(11 GB GDDR6)
存储E 盘 SSD,WSL2 虚拟磁盘已迁移到此,剩余 400 GB
系统Windows 11 22H2

💡 关键洞察:CPU 自带核显 UHD 630。这意味着可以让 Windows 桌面跑在核显上,把 2080Ti 的 11G 显存全部留给 LLM,能多挤出 1-1.5GB 显存。对 7B 模型 + 长上下文来说是质变。

如果你的 CPU 没有核显(比如带 F 后缀的 Intel 或者 Ryzen 不带 G),跳过这个优化即可,损失约 1G 显存。

(2) 软件版本说明

明确版本是配置教程的命脉,本文用的是:

软件版本
WSL22(必须,WSL1 不支持 GPU 透传)
Ubuntu22.04 LTS(WSL 默认发行版)
NVIDIA Driver≥ 552.xx(WSL CUDA 透传最低要求)
Ollama0.5.x 及以上(自带 CUDA runtime)
Qwen2.5-Coder7B-Instruct Q6_K 主力 + 1.5B-Base Q8 补全
VS Code + Continue.dev最新版即可

Ollama 官方文档 | Continue.dev 官方文档

(3) 先确认 wmic 看到的显卡

PowerShell 里跑一下,确认硬件:

wmic path win32_videocontroller get name

应看到类似如下输出,Intel 核显 + NVIDIA 独显都被识别:
在这里插入图片描述

三、部署步骤

(1) WSL2 前置检查

PowerShell 执行:

wsl -l -v

看到的发行版版本号必须是 2(不是 1)。如果是 1,要先升级:

wsl --set-version Ubuntu 2

在这里插入图片描述

确认磁盘空间充足:

wsl -d Ubuntu -- df -h

WSL 根分区至少有 50 GB 余量(模型文件加起来约 8GB,再加 VS Code Server、各种工具,留点富裕)。

(2) 让 Windows 桌面跑核显(关键优化,可选)

这一步如果做对,多腾出 1-1.5GB 显存

最干净的做法:显示器从 2080Ti 拔下来,接到主板的 HDMI/DP(核显输出)。接好后桌面继续显示,但所有渲染走核显,2080Ti 完全空载。

接好后开机,PowerShell 验证 2080Ti 处于空闲状态:

nvidia-smi

关键看:

  • Memory-Usage 应该是 0-200 MB(完全空闲)

  • Pwr:Usage 应该是 10-30W(空闲功耗)

    在这里插入图片描述

如果你不方便换线(比如多显示器都接在 2080Ti),跳过这步,接受 1GB 显存损失就行。

(3) 在 WSL 内验证 GPU 透传

进入 WSL:

wsl

WSL 终端里执行:

nvidia-smi

WSL 不需要在 Linux 里再装显卡驱动,Windows 的驱动会自动透传 GPU 进 WSL。
在这里插入图片描述
如果这步报错 command not found,说明 Windows 驱动版本不够新(< 552.xx)。去 NVIDIA 驱动下载 更新 GeForce Game Ready Driver 即可。

(4) 安装 Ollama

一行命令搞定,Ollama 自带所需的 CUDA runtime,不需要单独装 CUDA Toolkit。

curl -fsSL https://ollama.com/install.sh | sh

验证安装:

ollama --version
systemctl status ollama

在这里插入图片描述

如果 systemctl 报错 System has not been booted with systemd,说明 WSL 没启用 systemd,需要补一步:

sudo vim /etc/wsl.conf

i 进入插入模式,粘贴:

[boot]
systemd=true

Esc,输入 :wq 保存退出。然后在 PowerShell 里:

wsl --shutdown

再次 wsl 进来,systemctl 就可用了。

(5) 配置 Ollama(systemd + 环境变量)

这一步是整篇最关键的一步。编辑 systemd 配置:

sudo systemctl edit ollama

在打开的编辑器里粘贴(注意 [Service] 这行不要重复,如果原文件已有就接着写):

[Service]
# 模型文件存在 WSL 内(WSL 虚拟磁盘已经在 E 盘)
Environment="OLLAMA_MODELS=/home/你的用户名/ollama-models"

# 监听所有网卡(让 Windows 主机和局域网都能连)
Environment="OLLAMA_HOST=0.0.0.0:11434"

# 模型在显存里保留 30 分钟,避免反复加载
Environment="OLLAMA_KEEP_ALIVE=30m"

# 启用 Flash Attention 省显存(11G 显存场景关键!)
Environment="OLLAMA_FLASH_ATTENTION=1"

# KV Cache 用 Q8 量化,再省一点显存
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"

# 单并发,避免显存爆
Environment="OLLAMA_NUM_PARALLEL=1"

# 最大同时加载模型数
Environment="OLLAMA_MAX_LOADED_MODELS=2"

⚠️ 避坑提示:OLLAMA_FLASH_ATTENTION=1OLLAMA_KV_CACHE_TYPE=q8_0 这两个变量是 2080Ti(11G)能舒适跑 7B 模型的关键。我第一次没设置,跑 16K 上下文直接 OOM 退出。设置后同样 16K 上下文,显存占用从 11G 满 → 8.5G,稳定运行。

记得把 你的用户名 改成你 WSL 里 whoami 的结果

创建模型目录、重启服务:

mkdir -p ~/ollama-models
sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl status ollama

在这里插入图片描述

验证网络监听:

curl http://localhost:11434/api/tags

应返回 {"models":[]}。然后切到 Windows PowerShell 测试 localhost 转发:

curl http://localhost:11434/api/tags

Windows 这边访问 WSL 的 localhost:11434WSL2 的自动端口转发,不用额外配置。

(6) 下载模型

# 主力代码模型 (~6GB,Q6_K 质量好速度快)
ollama pull qwen2.5-coder:7b-instruct-q6_K

# 自动补全用的小模型 (~1.6GB)
ollama pull qwen2.5-coder:1.5b-base-q8_0

# codebase 检索用的嵌入模型 (~270MB)
ollama pull nomic-embed-text

在这里插入图片描述

下载完成后验证:

ollama list

应该看到三个模型:

NAME                                   SIZE      
qwen2.5-coder:7b-instruct-q6_K         6.3 GB
qwen2.5-coder:1.5b-base-q8_0           1.6 GB    
nomic-embed-text:latest                274 MB

在这里插入图片描述

(7) 测试模型推理

ollama run qwen2.5-coder:7b-instruct-q6_K "用 Python 写一个斐波那契数列函数,带详细注释"

模型应该开始流式输出代码。
在这里插入图片描述

另开一个 WSL 终端跑:

nvidia-smi

成功的标志:

  • 显存占用 约 7-8 GB
  • GPU-Util 在 80%+
  • 推理速度肉眼可见地比打字快(实测约 45-55 tok/s)

在这里插入图片描述
如果速度低于 30 tok/s 或显存占用 < 5GB,说明模型跑在 CPU 上了,跳到 故障排除 章节看怎么处理。

(8) VS Code Remote-WSL 集成

Windows 上 装 VS Code(已经有就跳过):https://code.visualstudio.com/

打开 VS Code,Ctrl + Shift + X 进扩展商店,搜索 WSL,装 Microsoft 官方的 WSL 扩展(注意是新版的 WSL,不是老的 Remote-WSL)。
在这里插入图片描述
装好后,在 WSL 终端里:

mkdir -p ~/projects/test
cd ~/projects/test
code .

第一次执行会自动下载 VS Code Server 到 WSL,等几分钟。完成后 VS Code 会自动打开,左下角必须显示 WSL: Ubuntu —— 这是你处于 WSL 模式的标志。
在这里插入图片描述

(9) 配置 Continue.dev

在 WSL 模式的 VS Code 里,Ctrl + Shift + X 进扩展,搜索 Continue

⚠️ 避坑提示:看到的按钮可能是 “Install” 也可能是 “Install in WSL: Ubuntu”。一定要点 “Install in WSL: Ubuntu” —— 装在 WSL 内的 Continue 才能用 localhost:11434 直连 Ollama。装在 Local 的 Continue 跨 WSL/Windows 边界会有奇奇怪怪的问题。

在这里插入图片描述

装好后点左侧 Continue 图标,引导界面全部 Skip,右下角 ⚙️ 齿轮 → Open Config File。打开的应该是 ~/.continue/config.yaml(在 WSL 内)。

把内容全部替换为:

name: Local Coder
version: 0.0.1
schema: v1

models:
  # 主力对话/编辑模型
  - name: Qwen Coder 7B
    provider: ollama
    model: qwen2.5-coder:7b-instruct-q6_K
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit
      - apply
    defaultCompletionOptions:
      contextLength: 16384
      temperature: 0.2
      topP: 0.9
      topK: 40
      maxTokens: 4096

  # Tab 自动补全模型
  - name: Qwen Coder 1.5B Autocomplete
    provider: ollama
    model: qwen2.5-coder:1.5b-base-q8_0
    apiBase: http://localhost:11434
    roles:
      - autocomplete


  # 嵌入模型(用于 codebase 检索)
  - name: Nomic Embed
    provider: ollama
    model: nomic-embed-text
    apiBase: http://localhost:11434
    roles:
      - embed

autocompleteOptions:
  useCopyBuffer: false
  maxPromptTokens: 2048
  prefixPercentage: 0.5
  debounceDelay: 250
  multilineCompletions: auto
  
# 上下文提供者(@xxx 引用源)
context:
  - provider: code
  - provider: docs
  - provider: diff
  - provider: terminal
  - provider: problems
  - provider: folder
  - provider: codebase

# 自定义 Prompts(在 Chat 里输入 /xxx 触发)
prompts:
  - name: test
    description: 为选中代码生成测试
    prompt: |
      为下面选中的代码写单元测试,要覆盖正常情况、边界情况和异常情况,
      使用合适的测试框架(优先 pytest)。

  - name: explain
    description: 中文详细解释代码
    prompt: |
      用中文详细解释下面选中的代码:
      1) 整体作用
      2) 关键步骤
      3) 设计思路
      4) 潜在问题

  - name: refactor
    description: 重构选中的代码
    prompt: |
      重构下面选中的代码,要求:
      1) 保持功能不变
      2) 提升可读性
      3) 改善命名
      4) 用 diff 格式输出并说明每处改动的原因

  - name: docstring
    description: 补全文档字符串
    prompt: |
      为下面的代码生成符合 Google 风格的 docstring,包含:
      Args、Returns、Raises(如适用)、Examples(如适用)。

  - name: review
    description: 代码审查
    prompt: |
      审查下面的代码,从以下角度给出意见:
      1) 潜在 bug 或边界问题
      2) 性能可优化点
      3) 可读性问题
      4) 安全隐患(如适用)
      请按严重程度排序。

Ctrl + S 保存。Continue 会自动重连,点开 Continue 面板下方应显示 “Qwen Coder 7B”

在这里插入图片描述

(10) 测试完整工作流

测试 1:自动补全

新建 test.py,输入:

def quick_sort(arr):
    """对数组进行快速排序"""

光标停在新行,等 1-2 秒,应该出现灰色提示文字。按 Tab 接受。
在这里插入图片描述

测试 2:Chat 对话 + codebase 检索

Ctrl+L 打开 Continue 聊天面板,输入:

@codebase 这个项目是做什么的,主要的类有哪些?

第一次会建索引(几秒到几分钟),然后给出答复。
在这里插入图片描述

测试 3:选中改造代码

随便选中一段代码,按 Ctrl+I,输入 加上 type hints 和 docstring,等 1-2 秒看到 diff 出现,按 ✓ 接受。
在这里插入图片描述

三个测试全过 → 部署完成! 🎉

四、避坑提示(踩坑实录)

下面这些是我自己亲手踩过的坑,按出现概率排序。

(1) 模型跑在 CPU 上不是 GPU

症状:推理速度只有 5-10 tok/s,nvidia-smi 看不到显存大量占用。

排查:

ollama ps
# 看 PROCESSOR 列,应该 100% GPU。如果是 CPU 或混合,有问题

解决:

# 重启 Ollama 服务
sudo systemctl restart ollama

# 检查 GPU 透传是否正常
nvidia-smi  # 应该有完整输出

# 偶尔模型缓存损坏,重新拉模型
ollama rm qwen2.5-coder:7b-instruct-q6_K
ollama pull qwen2.5-coder:7b-instruct-q6_K

(2) 显存爆 OOM

症状:报错 CUDA error: out of memory,Ollama 进程崩溃。

解决:

  1. 确认 OLLAMA_FLASH_ATTENTION=1 已经设上(第 5 步)
  2. 降低上下文长度:改 config.jsoncontextLength 从 16384 → 8192
  3. 用更小的量化版本:
ollama rm qwen2.5-coder:7b-instruct-q6_K
ollama pull qwen2.5-coder:7b-instruct-q5_K_M  # 体积从 6.3GB → 5.4GB

然后改 config.json 里的模型名。

(3) Windows 访问不到 WSL 的 Ollama

症状:WSL 内 curl localhost:11434 OK,Windows PowerShell 内 curl localhost:11434 报 Connection refused。

解决:WSL2 的 localhost 转发偶尔失效,先重启:

wsl --shutdown
# 等 8 秒
wsl
# 进 WSL 后:
sudo systemctl start ollama

如果反复出问题,推荐在 C:\Users\你的用户名\ 下创建 .wslconfig 文件,启用 mirrored 网络模式(Win11 22H2+ 才支持):

[wsl2]
networkingMode=mirrored
firewall=true
dnsTunneling=true
autoProxy=true

[experimental]
hostAddressLoopback=true

wsl --shutdown 重启后,WSL 和 Windows 共享网络栈,跨网络问题大幅减少。

(4) Continue 装错位置(装到 Local 不是 WSL)

症状:Continue 显示 “Failed to fetch”,连不上 Ollama。

解决:卸载 Local 版的 Continue,在 WSL 模式的 VS Code 内重新装,要选 “Install in WSL: Ubuntu”

(5) 自动补全不出现

症状:打字时没有灰色提示文字。

解决:

  1. Ctrl+Shift+P,搜索 “Continue: Toggle Tab Autocomplete Enabled”,确保是 Enabled
  2. 等 5-10 秒(首次需要加载 1.5B 模型)
  3. 在小文件里测试,大项目首次索引会较慢

(6) WSL2 资源被默认限得太死

症状:跑模型时 WSL 频繁卡顿,但宿主 Windows 资源还很富裕。

解决:.wslconfig 加入资源限制:

[wsl2]
memory=24GB        # 32GB 内存的机器给 WSL 24GB
processors=10      # 12 线程的机器给 WSL 10 个
swap=8GB

wsl --shutdown 重启生效。

五、最终架构

部署完成后整体的样子:

┌─────────────────────────────────────────────┐
│         Windows 11 (i7-8700 副机)            │
│                                             │
│  ┌──────────────┐    ┌──────────────────┐  │
│  │ Intel UHD630 │    │  RTX 2080Ti 11G  │  │
│  │  (跑桌面)    │    │  (LLM 专用)      │  │
│  └──────────────┘    └──────────────────┘  │
│                              ▲              │
│                              │ GPU 透传     │
│  ┌────────────────────────────────────┐    │
│  │ WSL2 Ubuntu (E 盘)                 │    │
│  │  ├─ Ollama service (systemd)       │    │
│  │  │   └─ ~/ollama-models/           │    │
│  │  │      ├─ qwen2.5-coder:7b   6GB  │    │
│  │  │      ├─ qwen2.5-coder:1.5b 1.6G │    │
│  │  │      └─ nomic-embed-text  270MB │    │
│  │  ├─ VS Code Server                 │    │
│  │  └─ Continue.dev (插件)             │    │
│  └────────────────────────────────────┘    │
│                              ▲              │
│           localhost:11434    │              │
│  ┌────────────────────────────────────┐    │
│  │ VS Code (Windows) ←Remote-WSL→     │    │
│  └────────────────────────────────────┘    │
└─────────────────────────────────────────────┘

整套架构的几个亮点:

  • 核显跑桌面:2080Ti 11G 全部留给 LLM,挤出关键的 1.5GB
  • systemd 管 Ollama:开机自启,异常自动重启,改配置只需 daemon-reload
  • WSL 内全栈跑:VS Code Server + Continue + Ollama 都在 Linux 里,Windows 只做窗口

总结

这一篇把基础工作流从 0 跑通,核心做了几件事:

  1. WSL2 + GPU 透传打通,确认 nvidia-smi 在 Linux 里能看到 2080Ti
  2. 用 systemd 管理 Ollama,把关键的省显存参数都配上
  3. 拉 Qwen2.5-Coder 7B(主对话)+ 1.5B(自动补全)+ 嵌入模型
  4. VS Code Remote-WSL + Continue.dev,一套现代 AI 编程体验

整套跑下来,2080Ti 主机变成了一台 24 小时可用的本地 AI 编程小服务器

下一篇会讲 Continue.dev 的进阶用法 —— Ctrl+I 的 Edit 模式、Chat 里的 Apply 按钮、多文件批量改造的实战姿势,还有为什么 7B 模型在 Agent 模式下不行,什么时候才该升级硬件上 Agent 路线。链接见文章开头的"系列文章目录"。

有任何踩坑或者优化建议欢迎评论区交流,我会持续维护这个系列。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐