localaiforum
登录
指南 › 使用模型

故障排查:症状 → 原因 → 修法

本地推理按模式失败。同样十来个症状占了几乎每个求助请求、每个都有一个无聊的原因和一个两分钟的修法。扫表、应用修法、然后读数字确认你真的修好了。

诊断表

症状 可能原因 修法
输出包含角色词元(user:、`< im_start >`)
瞬间空回复 模板渲染出“已完成”的对话、或 EOS 词元错了 修模板;查 EOS:提示词
重复你的问题而不回答 基座模型、不是 instruct 模型 用 instruct/chat GGUF
加载时内存不足 权重 + 量化超过显存 更小的量化或更小的模型:显存计算
生成中途内存不足 KV 缓存长过余量 更短上下文、KV 缓存 q8_0:KV 缓存
明明有 GPU 却 1–3 tok/s 层还在 CPU 上 全量卸载(n_gpu_layers):引擎参数
首词元慢、之后流快 预填充受限:提示词很长 缩短提示词、批处理、更快预填充:速度
无尽重复、短语循环 采样器太宽松、惩罚关着 temp ≤ 0.8、repeat_penalty 1.05–1.1:采样
韩语输出乱码或生硬 模型韩语弱 多语种家族(Qwen、Gemma):模型家族
输出句中截断 上下文窗口满或 max_tokens 太低 修剪上下文或抬高输出上限
好模型出非法 JSON 自由形式采样 约束解码:结构化输出
模型无视你的指令 长提示词的迷失中段 目标在前、载荷在后、重复请求:提示词
加载即崩溃或 coredump 下载损坏 校验校验和、重新下载

按症状先读、不按原因先读:对上你看到的、应用修法、再测一次。多数“我的模型坏了”的帖子止步于第 1、2、6 行。

五分钟起飞前检查

深入调试之前、收集事实:

nvidia-smi --query-gpu=name,memory.total,memory.used --format=csv   # GPU + 显存
ls -lh model.gguf                                                   # 尺寸 vs 显存
llama-server --version                                              # 引擎构建

如果模型文件大于空闲显存、第 4 行就是你的答案、任何标志都救不了你。如果 memory.used 在生成期间稳步爬升、那是 KV 缓存、不是泄漏。

正常长什么样

调试性能之前、先知道大概范围。7–8B Q4_K_M 模型、批 1 的解码速度:

硬件 解码 tok/s
中档 GPU(RTX 3060/4060 级) 30–60
高端 GPU(RTX 3090/4090 级) 100–150
Apple M 系列(统一内存) 20–40
仅 CPU(现代 8 核) 3–8

两条公式解释其中大部分:

decode tok/s ≈ memory bandwidth (GB/s) ÷ model size (GB)
VRAM needed  ≈ weights + KV cache + 1–2 GB overhead

288 GB/s 卡上 4.5 GB 的 7B 量化理论上封顶在 64 tok/s 附近;现实预期 ~45–55。如果你在表的 2 倍以内、你的硬件不是 bug。

首词元时间(TTFT)短提示词应远低于一秒;它随提示词长度除以预填充吞吐增长(预填充跑解码速度的 10–100 倍)。一个 10k 词元提示词在首词元前花 20 秒是预填充受限、不是坏了。

显存记账:权重加载得好好的但之后 OOM、那是 KV 缓存或上下文长度、不是量化——KV 缓存。

工作流:一次换一个变量

一次改两样东西时 bug 会藏起来。沿这条链隔离——模型 → 引擎 → 配置 → 提示词:

  1. **基线。**已知好的模型、已知好的引擎、默认标志。聊天能用吗?那栈没问题。
  2. 换模型(同引擎、同标志)。坏了?是文件或它的模板。
  3. 换引擎(同模型)。坏了?引擎 bug 或标志翻译。
  4. **二分你的标志。**恢复默认、一次加回一个标志直到它坏。
  5. **转储渲染后的提示词。**当输出怪但能跑、渲染后的模板是真相所在。

边走边记笔记——“temp 0.8 能用、min_p 0.2 就坏”是诊断;“试了一堆、还是坏”不是。

如何好好求助

一个好的求助帖是一份实验报告。包括:

  • 模型文件:确切名字、量化、和来源(qwen2.5-7b-instruct-q4_k_m.gguf、哪个仓库)。
  • 引擎和版本:llama.cpp 构建日期、Ollama 版本、vLLM 发布——引擎每周在变。
  • 确切的标志或 API 调用:整条命令行或请求体、不是转述。
  • 硬件:GPU + 显存(或 Mac + 内存)、如果 CPU 在扛层也写上。
  • 观察到的数字:tok/s、TTFT、显存占用、和确切的错误文本(如有)。
  • 你已经试过什么、结果变了什么。

复制粘贴骨架:

Model:    qwen2.5-7b-instruct-q4_k_m.gguf (bartowski repo)
Engine:   llama.cpp b4321 (llama-server)
Flags:    -ngl 99 -c 8192 --temp 0.7
Hardware: RTX 4060 8GB / Ryzen 7 / 32GB RAM
Observed: loads in 21s, ~35 tok/s, TTFT ~1.2s, then OOM at ~6k ctx
Tried:    -c 4096 → no crash; q8_0 KV → no crash

有这六个事实、多数问题一次回复就能映射到上表的某一行。本论坛正是为这类帖子存在的——带上实验报告、你会得到修法。

相关: 引擎参数 · 显存计算 · KV 缓存 · 采样