localaiforum
登入
指南 › 模型運用實務

疑難排解:症狀 → 原因 → 解法

本機推論的失敗有模式。同樣十幾個症狀涵蓋了幾乎所有求救文,而每一個都有無聊的原因與兩分鐘的解法。掃表格、套解法、然後讀數字確認真的修好了。

診斷表

症狀 可能原因 解法
輸出含角色 token(user:、`< im_start >`)
立即空回覆 模板渲染出「已完成」的對話,或 EOS token 錯誤 修模板;檢查 EOS:提示詞
複誦你的問題而不是回答 base 模型,不是 instruct 模型 改用 instruct/chat GGUF
載入時記憶體不足 權重+量化超過 VRAM 更小的量化或更小的模型:VRAM 用量計算
生成中記憶體不足 KV 快取長過餘裕 更短上下文、KV 快取 q8_0:KV 快取
有 GPU 卻 1–3 tok/s 層還在 CPU 上 完整卸載(n_gpu_layers):引擎參數
首 token 慢、之後串流快 預填受限:提示詞太長 縮短提示詞、批次、更快的預填:速度
無盡重複、片語迴圈 取樣器太寬鬆、懲罰沒開 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 + VRAM
ls -lh model.gguf                                                   # 大小 vs VRAM
llama-server --version                                              # 引擎建置版本

如果模型檔比可用 VRAM 大,第 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 ≈ 記憶體頻寬 (GB/s) ÷ 模型大小 (GB)
需要 VRAM   ≈ 權重 + KV 快取 + 1–2 GB 開銷

4.5 GB 的 7B 量化在 288 GB/s 卡上理論上限接近 64 tok/s;實際預期約 45–55。如果你在表的 2 倍以內,你的硬體不是 bug。

短提示詞的首 token 時間(TTFT)應該遠低於一秒;它隨提示詞長度÷預填吞吐量增長(預填吞吐是解碼速度的 10–100 倍)。10k token 的提示詞要 20 秒才出第一個 token,是預填受限,不是壞了。

VRAM 帳目:權重載入正常但之後 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+VRAM(或 Mac+RAM),若有層在 CPU 上也要寫。
  • 觀察到的數字:tok/s、TTFT、VRAM 用量,以及確切的錯誤文字(若有)。
  • 已經試過什麼、以及結果有什麼變化。

複製貼上骨架:

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

有這六項事實,多數問題一則回覆就能對到上面的表格。這個論壇正是為了這種貼文而存在——帶著實驗室報告來,你就會得到解法。

相關章節: 引擎參數 · VRAM 用量計算 · KV 快取 · 取樣