部署过程博客:
Windows 手搓 WSL + Ollama + Qwen2.5 + OpenClaw 全记录
最后总结:WSL2 + Ollama 本地部署 Qwen3-4B 踩坑笔记
环境:Windows + WSL2 (Ubuntu 22.04),6GB 显存笔记本(RedmiG)
目标:在 WSL 里用 Ollama 跑本地 GGUF 模型,替换掉效果很差的 Qwen2.5-0.5B
一、整体流程概览
WSL2 里装 Ollama → 下载 GGUF 模型 → 写 Modelfile → ollama create → ollama run核心结论先行:
- 模型别贪大,也别太小:0.5B 会复读、能力弱;6GB 显存选4B 的 Q4_K_M最平衡
- GGUF 只需要下一个量化文件,不用全下
- Modelfile 必须有 TEMPLATE 和 stop,否则模型会无限复读
- 模型名不能带点号,否则
invalid model name
二、踩过的坑(按发生顺序)
坑 1:.sh脚本 Permission denied
从网上下载的脚本默认没有执行权限,./xxx.sh会报:
bash: ./ollama-modelscope-install.sh: Permission denied原因:文件权限是-rw-r--r--,没有x(执行位)。
解决:
chmod+x xxx.sh# 加执行权限./xxx.sh# 再运行# 或者不改权限,直接:bashxxx.sh安全提示:跑陌生脚本前先
less xxx.sh看一眼内容,尤其是用 root 跑的时候。
坑 2:cp复制文件夹报错
cpQwen2.5-0.5B-Instruct-GGUF/ /home/vscode_workspace/models/# cp: -r not specified; omitting directory原因:cp默认只复制文件,复制目录必须加-r。
解决:
cp-r源目录/ 目标目录/# 递归cp-a源目录/ 目标目录/# 归档模式,保留权限时间,更推荐cp-av源目录/ 目标目录/# 带过程输出坑 3:ollama create报invalid model name
echo"FROM ./Qwen2.5-0.5B-Instruct">Modelfile ollama create my-qwen2.5-0.5B-Instruct-fModelfile# Error: 400 Bad Request: invalid model name原因有两层:
FROM指向的是文件夹名,不是 GGUF 文件。Ollama 找不到文件,就把它当模型名解析。- 模型名里带点号
.等字符,不符合命名规则。
解决:
# FROM 必须指向具体的 .gguf 文件 FROM ./Qwen3-4B-Q4_K_M.gguf# 模型名只用字母、数字、连字符、下划线ollama create qwen3-4b-fModelfile坑 4:下的是 HuggingFace 原生格式,不是 GGUF
截图里看到config.json、model.safetensors、tokenizer.json等文件——这是 Transformers 格式,Ollama 不认。Ollama 只吃.gguf。
解决:重新下GGUF 版(文件名后缀是.gguf),或者用官方版:
ollama run qwen2.5:7b# 官方已配好模板参数坑 5:模型无限复读(重点坑)
问一句,模型把同一段自我介绍复读 5 遍停不下来。
原因:
- 模型太小(0.5B)本身容易复读
- Modelfile 缺 TEMPLATE,模型不知道一轮对话在哪结束
- 缺 stop 停止符
- 输入里本身就有大量重复内容,模型跟着模仿
解决:
- 换大一点的模型(≥ 4B)
- Modelfile 里补上
TEMPLATE+stop+repeat_penalty - 输入别塞重复段落
三、模型与量化选择
3.1 模型大小怎么选
| 显存 | 推荐模型 | 说明 |
|---|---|---|
| 6GB | Qwen3-4B / Qwen2.5-7B | 4B 最稳,7B 可跑 |
| 8GB+ | Qwen2.5-7B / Qwen2.5-Coder-7B | 甜点区 |
| 12GB+ | 14B 级 | 质量更好 |
0.5B 只适合学习/测试,别指望它答对逻辑题,还容易复读。
3.2 量化等级怎么选(以 4B 为例)
| 量化 | 权重体积 | 预计显存占用 | 评价 |
|---|---|---|---|
| Q2_K | ~1.6GB | ~2.5GB | 质量太差,不推荐 |
| Q3_K_M | ~2.0GB | ~3GB | 省显存,质量下降可感 |
| Q4_K_M | ~2.5GB | ~3-4GB | ⭐ 6GB 显存最佳平衡 |
| Q5_K_M | ~2.9GB | ~4GB | 质量稍好,余量变小 |
| Q6_K | ~3.3GB | ~5GB | 6GB 下偏紧 |
| Q8_0 | ~4.3GB | >6GB | 基本超显存 |
| FP16 | ~8GB | 远超 | 跑不动 |
结论:6GB 显存,只下Q4_K_M这一个文件就够了。其他量化是互斥的备选,不用全下。
四、完整部署指令
4.1 确认 / 安装 Ollama
ollama--version# 有输出说明已装ollama list# 看现有模型4.2 下载 GGUF 模型
用 ModelScope 下载(国内快):
modelscope download--model=xxx/yyy-GGUF-_dir./Qwen3-4B-GGUF--revision某版本或从 HuggingFace / 其他源下Qwen3-4B-Q4_K_M.gguf。
4.3 把模型放到 Linux 原生路径
# 从 /mnt/d 复制到 /home,性能好、权限清晰cp-a/mnt/d/code/Qwen3-4B-GGUF/ ~/models/cd~/models/Qwen3-4B-GGUFls-lh*.gguf# 确认只有 Q4_K_M 那个强烈建议:模型、代码放
/home/用户名/,别放/mnt/c、/mnt/d。
4.4 写 Modelfile
nanoModelfile内容见下一节。
4.5 创建并运行
ollama create qwen3-4b-fModelfile ollama run qwen3-4b4.6 常用管理命令
ollama list# 列出模型ollamarmqwen3-4b# 删除模型(不动 GGUF 原文件)ollama show qwen3-4b# 看模型信息ollama run qwen3-4b--verbose# 带性能信息运行五、Modelfile 编写(核心)
Ollama官方说明
5.1 完整模板(Qwen 系通用)
FROM ./Qwen3-4B-Q4_K_M.gguf TEMPLATE """{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant {{ .Response }}<|im_end|> """ SYSTEM """你是一个乐于助人的中文助手。回答简洁、准确、有条理,不要重复用户的话。""" PARAMETER stop "<|im_start|>" PARAMETER stop "<|im_end|>" PARAMETER temperature 0.7 PARAMETER top_p 0.8 PARAMETER top_k 20 PARAMETER repeat_penalty 1.1 PARAMETER repeat_last_n 64 PARAMETER num_predict 1024 PARAMETER num_ctx 81925.2 每个指令的作用
| 指令 | 作用 | 关键点 |
|---|---|---|
FROM | 指定 GGUF 权重 | 必须指向具体.gguf文件,路径相对 Modelfile |
TEMPLATE | 对话模板 | 防复读的核心,Qwen 用<|im_start|>格式 |
SYSTEM | 人设提示词 | 加"不要重复用户的话"能缓解复读 |
stop | 停止符 | 必须设,遇到就停,防无限生成 |
temperature | 采样温度 | 别设 0,0.7 左右;太低反而易循环 |
top_p/top_k | 采样范围 | 0.8 / 20 比较稳 |
repeat_penalty | 重复惩罚 | 1.1~1.3,太高会胡言乱语 |
repeat_last_n | 惩罚回看长度 | 64 够用 |
num_predict | 单次最大生成 token | 防无限写,512~1024 |
num_ctx | 上下文窗口 | 越大越吃显存,显存紧就降到 4096 |
5.3 显存紧张时怎么调
PARAMETER num_ctx 4096 # 从 8192 降下来,省 KV Cache 显存 PARAMETER num_predict 512 # 缩短最大输出或运行时临时覆盖:
ollama run qwen3-4b--parameternum_ctx4096--parameterrepeat_penalty1.2六、做成快捷启动脚本
6.1 建文件夹 + 脚本
mkdir-p~/launchers&&cd~/launcherscat>qwen.sh<<'EOF' #!/bin/bash exec ollama run qwen3-4b "$@" EOFchmod+x qwen.sh以后运行:
~/launchers/qwen.sh6.2 加进 PATH,全局可用
echo'export PATH="$HOME/launchers:$PATH"'>>~/.bashrcsource~/.bashrc之后任意目录直接敲qwen.sh。
6.3 更省事的 alias 方案
echo'alias qwen="ollama run qwen3-4b"'>>~/.bashrcsource~/.bashrc以后敲qwen即可。
七、测试与验证
启动后测这几类题,重点看还复不复读:
你好,请用一句话介绍你自己。(防复读验证)中国的首都是哪里?(基本常识)请只回答两个字:你好。(指令遵循)笼子里有鸡兔共 35 个头,94 只脚,各几只?(应用题)- 多轮:先说"我叫小明",再问"我叫什么?"(上下文记忆)
判断标准:
- ✅ 一问一答、不复读、简单常识对 = 部署成功
- ⚠️ 复杂推理/长记忆差 = 正常,4B 就这水平
- ❌ 还复读 = 回头查 TEMPLATE 和 stop
八、经验总结(一句话版)
| 问题 | 一句话解法 |
|---|---|
| 脚本跑不了 | chmod +x或bash 脚本 |
cp目录报错 | 加-r/-a |
invalid model name | FROM 指向.gguf文件;模型名别带点号 |
| Ollama 不认模型 | 必须是 GGUF,不是 safetensors |
| 无限复读 | TEMPLATE + stop + repeat_penalty,或换 ≥4B |
| 显存不够 | 降 num_ctx、用更低量化、别跑超显存模型 |
| 模型名找不到 | 先ollama list抄准 |
| 路径选择 | 放/home,别放/mnt/c、/mnt/d |
最终推荐配置(6GB 显存):Qwen3-4B 的Q4_K_M.gguf+ 上面的 Modelfile + 模型名qwen3-4b。这套能稳定跑、不复读、质量足够日常使用。