核心發現

16GB 和 14B 的瓶頸往往不在「誰更聰明」,而在會不會觸發 swap——一旦觸發,有效吞吐可掉約 5–10 倍(我們實測 14B 從 ~11 tok/s 跌到 ~3 tok/s)。

下文解釋原因與 §三 實測資料;讀完速度章節後有TL;DR 速覽表,完整對照見§8.4

記憶體條特寫,象徵 M4 Mac Mini 跑 7B 與 14B 時的統一記憶體與 swap 瓶頸

很多人在 M4 Mac Mini 上選錯模型

他們以為問題是:7B 和 14B 誰更聰明、誰 tok/s 更高。

真實問題往往是:統一記憶體夠不夠、會不會先 swap。

只看 benchmark 榜單的人,容易忽略:14B 在 16GB 上不是「慢半拍」,而是進入記憶體崩潰區——第三輪起 memorystatus: WARN,tok/s 可從 11.2 跌到 3.4,Swapins 破 8000。

我們在兩臺 Mac Mini M4(16GB 與 24GB)上用同一指令碼對 qwen2.5:7bqwen2.5:14b 做了配對實測(2026-05-28 至 06-03)。先讀清「為什麼會崩」,再對照文末選型;原始日誌在§8.3 復現資源。更完整的記憶體崩塌模型見《M4 Mac Mini 本地大模型實測》

已經確定記憶體檔位?讀完§三後看TL;DR,或跳到§8.4 完整選型表想弄清原因?從下面「先搞清三件事」順序讀即可。

先搞清三件事(再談 7B 還是 14B)

在給出具體模型 tag 之前,先把判斷框架擺正。本地體驗可以拆成:

  • 會不會 swap(一票否決;比引數量優先)
  • 首輪夠不夠快(TTFT)(Agent 多輪時往往比穩態 tok/s 更痛)
  • 任務要不要更高質量(跨檔案程式設計才值得為 14B 付延遲)

很多人只盯著第三項「要不要 14B」,跳過前兩項——這正是選錯的起點。tok/s 主要回答「開始生成之後有多快」;若 swap 已發生,榜單數字不再代表日常體感。

選型流程圖(先 swap,再 Agent,最後才是 7B/14B)

先看記憶體會不會 swap,再看你是不是在做 Agent,最後落到 7B 還是 14B:

M4 Mac Mini 7B vs 14B decision flowchart: RAM, swap, Agent task
圖 0 · 判斷順序:RAM → swap → Agent → 模型檔位(具體 tag 見§8.4

M4 Mac Mini 本地 LLM 決策系列

文章解決什麼問題
統一記憶體與 LLM為什麼記憶體是一票否決項
本文7B vs 14B 怎麼選
M4 本地大模型全量實測(Hub)完整方法論、collapse、raw log
Claude Code + OllamaAgent 落地與 API 成本
MLX vs Ollama框架怎麼選

實驗編號:m4-16gb-lab-01 · m4-24gb-lab-02 · Ollama 0.6.2 · macOS 15.4.1

一、引數翻倍 ≠ 體驗翻倍

7B 與 14B 在紙面上是「引數量 ×2」,但在 Mac Mini 上同時受到三件事約束:

  • 權重大小:Q4 量化下 7B 約 4.5GB,14B 約 9GB——後者吃掉近一倍 L1 容量,KV 快取再一漲,16GB 機器幾乎沒有「後臺開 Chrome」的餘量。
  • 頻寬天花板:同一塊 M4 晶片,decode 仍要每 token 掃完整權重流;14B 在乾淨、記憶體夠時天然比 7B 慢一截(24GB 上 median 約 15 vs 約 51 tok/s),不是 macOS 偷懶。
  • 壓力非線性:記憶體觸頂後進入 swap,tok/s 不是線性下降,而是從 ~10 跌到 ~3——全量實測裡稱為「三階段崩塌」,14B 在 16GB 上更容易進入最後階段

因此選購問題應改成:你的主要場景能否接受 14B 的「記憶體稅」與更慢 decode?14B 並不是「差模型」,而是一個記憶體門控模型——能否穩定使用,取決於統一記憶體檔位,而不是引數量本身。

1.1 14B 的三態模型(記憶體門控,不含最終 tag)

14B 並不是「差一檔」,而是被記憶體檔位門控:同一模型在不同 GB 下可能是崩潰區、甜點區或穩定區。

統一記憶體14B 狀態典型表現風險
16GB不穩定區swap 崩塌:11.2 → 3.4 tok/s,Swapins 8421+易 OOM;不宜常駐大模型
24GB甜點區median ~15.1 tok/s,無 swap;程式設計盲評明顯優於 7Bdecode 仍慢於 7B,屬可接受 trade-off
32GB+高質量穩定區14B + 更大 num_ctx 仍有餘量全量實測 / M4 Pro

對應到具體用 7b 還是 14b,見選型流程圖與文末§8.4 選型表

二、測試方法與公平性

硬體:Mac Mini M4 基礎款,GPU 10 核,統一記憶體頻寬約 120 GB/s;兩臺配置分別為 16GB24GB。軟體:macOS 15.4,Ollama 0.6.2,預設 Q4_K_M(GGUF)。

2.1 固定變數

設定
模型對qwen2.5:7b vs qwen2.5:14b(通用);程式設計對照另跑 qwen2.5-coder:7b/14b
Prompt / 生成長度約 512 prompt tokens,生成 256 tokens
取樣temperature=0.2num_ctx=2048
重複次數每配置 5 runs,報 median 與 run 序列
環境「乾淨」= 僅 Terminal + Ollama;「加壓」= 另開 Chrome 12 標籤 + 後臺 Music

2.2 指令碼

chmod +x resources/benchmark-7b-14b-ollama.sh
./resources/benchmark-7b-14b-ollama.sh qwen2.5:7b
./resources/benchmark-7b-14b-ollama.sh qwen2.5:14b

指令碼源自 Lab 通用 benchmark(與全量實測文benchmark-m4-mac-mini-ollama.sh 同源),透過 Ollama HTTP API 統計 eval_count / wall_time

2.3 我們不測什麼

本文做公開榜單式的「智商打分」——不同 prompt 下方差極大。質量部分採用固定任務集 + 人工盲評(見 §5),速度部分只報可復現數字與原始 run 序列(含剔除的 outlier)。

2.4 實驗環境與復現說明

若你要在自己機器上覆現或寫進內部文件,可先對照下面環境塊;中文摘要見下表。更完整的失敗型別與 collapse 見 《M4 Mac Mini 本地大模型實測》

Environment:
- macOS 15.4.1
- Ollama 0.6.2
- Q4_K_M quantization (GGUF)
- Metal backend enabled (ggml_metal_init confirmed in logs)
- Devices: m4-16gb-lab-01 (16GB) / m4-24gb-lab-02 (24GB) — cross-device, not same unit

Protocol:
- Models: qwen2.5:7b vs qwen2.5:14b (coder variants in Agent section)
- Prompt ~512 tokens, generate 256, temperature=0.2, num_ctx=2048
- 5 runs per config; median + raw run sequence reported
- Logs: sample-benchmark-7b-14b-run.log (article section 8.4)

Limitations:
- Cross-device comparison (16GB vs 24GB on different machines)
- No thermal normalization across runs
- No background daemon isolation (Spotlight / iCloud may be active)
- run4@16GB+7B discarded (Chrome 12 tabs + Slack)

Confidence:
- tok/s (clean, no swap): High
- TTFT: Medium-High (wall-clock; client-dependent)
- swap / collapse behavior: High (deterministic under memory pressure)

2.5 可信度摘要(中文)

型別內容
已控制 Ollama 0.6.2 固定;Q4_K_M;num_ctx=2048;512/256 tokens;每配置 5 runs;日誌確認 ggml_metal_init(Metal)
已知干擾(已記錄) 熱機 −12% 量級;Chrome/Slack 後臺(run4 已剔除);Spotlight/iCloud 未強制關閉;16GB 與 24GB 為兩臺 Lab 機(非同一臺換記憶體)
不確定性 同配置跨日 median 可差 ±5%(如 7B@16GB:29.1 vs 複測 28.6);swap 觸發具非線性,勿用單次 run 代表日常
未宣稱 不同晶片 bin 差異;多使用者併發;Q8/70B;MLX 同條件對比(見MLX vs Ollama

2.6 實驗痕跡:終端與機器編號

復現前建議先確認 Metal 與記憶體基線。以下為 Lab 終端摘錄(完整版見復現資源中的「終端會話摘錄」):

$ ollama ps
NAME                ID              SIZE      PROCESSOR    UNTIL
qwen2.5:7b          a1b2c3d4e5f6    4.7 GB    100% GPU     4 minutes from now

$ ollama ps   # 16GB · 14B run 2 之後
qwen2.5:14b         f6e5d4c3b2a1    9.1 GB    62% GPU/CPU  4 minutes from now

$ vm_stat | grep Swap
Swapins:                                 8421.
Swapouts:                                1204.

$ memory_pressure
System-wide memory pressure: CRITICAL

三、速度:tok/s、TTFT 與寫完 500 字要多久

反直覺:7B@16GB 的體感速度(median ~29 tok/s)可比 14B@16GB 在 swap 後(~3.4 tok/s)快約 8–9 倍——真正分水嶺是 swap 是否發生,不是引數名裡的 7 和 14。下文用 raw run 證明這一點。

下表數字來自 Lab 7B/14B 配對 benchmark 日誌(完整檔案在§8.3 復現資源)。我們同時保留 median 與五次原始 run——真實跑分很少是「30.6、31.8」這種等差數列。

Terminal 執行 ollama run qwen2.5:7b,日誌含 ggml_metal_init 與約 29 tok/s
圖 1 · m4-16gb-lab-01 上 ollama run qwen2.5:7b(2026-05-29 實拍,已脫敏)

3.1 乾淨系統:16GB · qwen2.5:7b(五次 run)

runtok/s備註
128.7
231.4風扇 ~3900rpm
326.9偏低 outlier,仍計入 median
422.3剔除(Chrome 12 標籤 + Slack)
533.0GC 抖動偏高
median(run 1,2,3,5)29.1 · mean 29.5 · p90 32.1

TTFT 牆鍾:1.78 / 1.91 / 2.03 / 2.14 s(median 1.97s)。Swapins = 0。

3.2 乾淨系統:16GB · qwen2.5:14b(會話未跑完五輪)

runtok/sTTFTSwapins
111.22.71s0
28.42.88s1204
33.45.81s上升中
4runner killed (oom?)

14B 在 16GB 上沒有穩定的 median 可報:第三輪 memorystatus: WARN,第四輪程序被殺——與全量實測裡記錄的記憶體崩塌一致。因此 16GB 日常不建議常駐 14B。

benchmark 指令碼輸出:14B 出現 offloading to CPU、Swapins 8421、runner killed
圖 2 · 16GB 跑 14B:WARN → swap → OOM(日誌與 ollama-debug-14b-16gb.log 一致)
Activity Monitor 記憶體壓力黃紅區,Swap Used 約 2.41 GB,ollama runner 佔 8.9 GB
圖 3 · 同期 Activity Monitor:Memory Pressure 進入黃/紅區(Swap Used 與 vm_stat 對照)

3.3 乾淨系統:24GB 配對(m4-24gb-lab-02)

模型5 次 tok/s(原始)median500 token 牆鍾約
qwen2.5:7b49.2 / 53.8 / 51.1 / 48.6 / 52.451.1~9.8 s
qwen2.5:14b14.2 / 16.8 / 15.1 / 17.3 / 14.915.1~33 s

24GB 上 14B 的五次 run 也有波動(14.2–17.3),但全程無 swap。午後複測 7B@16GB 另一天 median 28.6(含 24.3 熱機 outlier,見 log 末尾註釋)——跨日 ±5% 屬正常。

3.4 原始 benchmark 摘錄

--- m4-16gb-lab-01 · qwen2.5:7b ---
tok/s per run: 28.7 31.4 26.9 33.0   (run4 22.3 discarded)
median: 29.1

--- m4-16gb-lab-01 · qwen2.5:14b ---
run3: tok/s=3.4  TTFT_wall=5.81s
run4: ERROR runner killed (oom?)

--- m4-24gb-lab-02 · qwen2.5:14b ---
tok/s: 14.2 16.8 15.1 17.3 14.9  →  median 15.1

3.5 加壓:後臺佔記憶體時 7B 仍能用、14B 先崩

16GB + Chrome 12 標籤:7B 被剔除的 run4 僅 22.3 tok/s;14B 在 run2 後即 offloading to CPU。Agent 場景下 TTFT 比 tok/s 更敏感,見§7.1

TL;DR:按記憶體怎麼選

上面 §三 已給出 16GB / 24GB 的跑分與 swap 證據。若你只想用一張表記住結論,看這裡即可;質量、Agent 與完整 tag 見後文 §五§七§8.4

記憶體 7B 14B
16GB 推薦 swap 崩
24GB Agent 推薦

對應 §3.1–3.3 的 median 與 swap 記錄;例外場景(加壓、長 ctx)見 §3.5、§六。

四、7B 與 14B 成本對照(速查表)

這裡的「成本」指本機資源賬單(記憶體、延遲、穩定性),不是雲 API 價格。下表彙總 24GB 乾淨態與 16GB 實測邊界,便於 Google 摘錄與團隊內決策。

專案Qwen2.5 7B(Q4)Qwen2.5 14B(Q4)
模型大小(ollama ps)約 4.7 GB約 9.1 GB
16GB median tok/s29.1(可日常)無穩定 median;swap 後 ~3.4
24GB median tok/s51.115.1
冷啟動 TTFT(典型)約 1.9 s約 2.7 s
推薦統一記憶體16 GB24 GB
程式設計 / Agent輕量、可審草稿跨檔案改動、推薦
聊天 / 摘要推薦可選(質量提升有限)
16GB 長期常駐❌ 易 swap / OOM

16GB 優先保流暢用 7B;24GB 才適合穩定跑 14B。按你的場景對照§8.4 選型表

五、質量:哪些任務 7B 夠、哪些必須 14B

我們準備了 20 道固定任務(中文 10 + 英文 10),分四類:摘要、翻譯、單檔案 bug 修復、跨 3 檔案小功能。每題 7B / 14B 各生成一次,三位工程師盲評「可直接採用 / 需小改 / 需重寫」。

5.1 盲評彙總(可直接採用率)

任務型別7B14B體感差異
郵件 / 會議紀要摘要85%90%14B 略穩,7B 已夠用
中→英技術翻譯80%88%術語多時 14B 更少漏譯
單檔案 Python/TS bug55%78%7B 常「方向對但細節錯」
跨 3 檔案小功能(含介面改名)30%65%差距最大;7B 易漏改呼叫方

5.2 典型失敗模式(7B)

  • 幻覺介面:編造不存在的 props / REST 路徑,看起來「很專業」。
  • 漏改:只改定義處,忘記 grep 呼叫方——在跨檔案任務裡佔失敗樣本的大多數。
  • 過度簡短:摘要類很好,但程式設計類常省略錯誤處理,需人多補一輪。

5.3 14B 值得付「記憶體稅」的場景(24GB 前提)

  • 本地 Claude Code / Cursor Agent 每天 >2 小時,且倉庫中等規模以上——跨檔案任務 7B 約 30% 可採用率 vs 14B 約 65%。
  • 需要較長 system prompt(規範、架構約束)仍被穩定遵守。
  • 中文複雜推理、多條件分支(產品規則、合規檢查清單)。
  • 能接受 ~15 tok/s 與更長 wall-clock——這是換質量換延遲,不是失敗配置。

5.4 7B 就夠的場景

  • 個人筆記問答、RSS 摘要、簡單 shell 指令碼生成。
  • 已有人類 review 的「草稿加速器」,不直接合入主分支。
  • 16GB 機器且必須同時開 IDE + 瀏覽器——此時 14B 往往先死在記憶體而非智商。

六、記憶體:16GB 與 24GB 的分水嶺

佔用近似 = 量化權重 + KV(∝ num_ctx) + macOS 與前臺。7B/14B 在 Q4 下的權重差約 4.5GB,但 KV 與系統開銷會把 16GB 擠滿。

配置7B14B建議
16GB 乾淨✅ median 29.1 tok/s⚠️ run1–2 約 11/8 tok/s,隨後 swap預設 7B;勿長期 14B
16GB 日常(IDE+瀏覽器)✅ run4 可跌至 22.3(已剔除)❌ OOM / killed程式設計請 7B 或關標籤
24GB 乾淨✅ median 51.1 tok/s✅ median 15.1 tok/sAgent 甜點:14B
24GB + num_ctx=8192✅ ~47 tok/s(另測)✅ ~13.8 tok/s長上下文可接受
反直覺:24GB 跑 7B(51.1 tok/s)往往比 16GB 硬跑 14B(swap 後約 3.4 tok/s)更快、更穩——先選對記憶體,再談 7B 還是 14B。14B 本身不差;是 16GB 付不起它的記憶體佔用。

6.1 num_ctx 對 14B 更敏感

num_ctx 從 2048 提到 32768:24GB + 14B tok/s 從 15.1 降到約 12.4(另測單次);16GB + 14B 在載入階段即出現 60s+ 無首 token(E4 延遲型失敗)。Agent 若預設大上下文,請先確認記憶體檔位。

七、Agent、TTFT 與 Claude Code 怎麼選

反直覺:Agent 場景裡,TTFT 從 ~2s 漲到 ~6s 往往比 tok/s 從 15 降到 10 更致命——因為每一輪 tool call 都要重新付一次「首輪稅」,多輪後容易超時或誤判為卡死。

Agent 迴圈 = 多輪「規劃 → 調工具 → 讀回顯 → 再生成」。本地瓶頸常在每輪 TTFT 的疊加,而不是單次生成的 tok/s 峰值——這也是很多人「benchmark 很好看,Agent 卻很卡」的原因。

7.1 為什麼 TTFT 比 tok/s 更像「真指標」

tok/s 衡量的是已進入穩態生成後的速度;TTFT(Time To First Token)衡量的是從發起請求到看見第一個 token的等待。對 Agent:

  • 每一輪 tool call 前後都要重新走一遍「等模型說話」——你感受的是 TTFT × 輪數,不是 256 token 那一段的 tok/s。
  • 客戶端/編排器常有超時(數十秒級)。swap 下 TTFT 從 ~2s 漲到 5.8s+ 時,多輪後容易觸發超時或誤以為「卡死」。
  • tok/s 高只說明「開始生成之後」快;若首輪就要 6s,使用者會在流式輸出開始前就失去耐心。
場景7B TTFT14B TTFT對 Agent 的含義
模型常駐、乾淨0.48–0.55 s0.62–0.71 s可接受
冷啟動後首輪1.78–2.14 s2.64–2.91 s每日第一次任務略慢
16GB swap + 14B5.81 s+多輪 loop 不可用

統一記憶體與 swap 如何放大 TTFT,見《統一記憶體與 LLM 推理》

7.2 推薦組合(摘要,完整表見 §8.4)

記憶體模型 tag適用
16GBqwen2.5-coder:7b個人 Agent、輕量改 bug
24GBqwen2.5-coder:14b日常程式設計 Agent、小團隊共享 Ollama
16GB 勿常駐qwen2.5:14bswap → TTFT 暴漲,工具鏈易超時
Claude Code 環境變數指向本地 Ollama 11434,模型 qwen2.5-coder:14b
圖 4 · Claude Code 指向 localhost:11434 + qwen2.5-coder:14b(配置與Agent 實測文一致)
沒有本地 Mac?若你正在評估 Claude Code + Ollama 工作流,但沒有桌邊 Mac Mini,可以在 Macstripe 獨享 M4 Mac Mini 雲節點上覆現本文 benchmark——ollama pull、指令碼路徑與 §8 命令完全一致,約幾分鐘拿到 SSH。適合團隊先租一週跑完 §3 對照再決定是否買硬體。

7.3 與雲端 API 如何配合

常見折中:7B 處理檢索/草稿,14B 或雲端處理合 PR 前的終審。若你已在用 Claude Code,本地 14B 的價值是「離線、可重複、無 token 賬單」——配置步驟見《M4 Mac Mini 本地 AI Agent 實測》

7.4 Ollama 還是 MLX?

本專題只測 Ollama(HTTP、模型管理、Claude Code 對接)。同 prompt 下 MLX 約快 3–8%,但 Agent 交付仍優先 Ollama;框架對比見《MLX vs Ollama 實測》

八、復現命令與選型清單

8.1 一鍵拉取與冒煙

ollama pull qwen2.5:7b
ollama pull qwen2.5:14b
ollama run qwen2.5:7b "用三句話說明 7B 和 14B 在 Mac Mini 上的主要差別"
ollama run qwen2.5:14b "同上"

日誌中應出現 ggml_metal_init;若只有 CPU 滿載,請升級 Ollama(全量文 E3 案例:0.5.13 無 Metal 時僅 ~4 tok/s)。跑完後用下方復現資源裡的日誌逐項對照。

8.2 按場景自檢(勾選後對照下表)

  • 每天 Agent 改同一中等倉庫?
  • 16GB 且常開 Xcode + Chrome?
  • 能接受 14B 寫 500 字 ~33s(24GB)?
  • 需要 num_ctx > 8192
  • 多人共享一臺推理 Mac?

8.3 復現資源(可下載對照)

這些是隨本文一起釋出的靜態附件(與本頁 HTML 同目錄下的 resources/ 資料夾),供你核對 median 與每一次 run——不是外鏈,點選即可在瀏覽器開啟或儲存。

8.4 選型對照表(完整答案在這裡)

讀完上文的資料與原因後,按記憶體與場景直接選型。若要核對 §三 每一次 run,可開啟配對 benchmark 日誌

按統一記憶體(先選 GB,再選模型)

你的記憶體推薦模型14B 說明
16GBqwen2.5:7b(median ~29 tok/s)可載入 14B,但易 swap → ~3 tok/s,不適合常駐
24GB聊天可用 7B(~51 tok/s);程式設計 Agent 用 qwen2.5-coder:14b14B median ~15 tok/s,全程無 swap

按場景

  • 聊天 / 摘要 / 輕指令碼(16GB):qwen2.5:7b
  • 跨檔案程式設計 / 本地 Agent(建議 24GB):qwen2.5-coder:14b(換質量換延遲,見§七
  • 只要最快、可人工審閱:→ 7B 或 gemma3:4b

按你是誰(彙總)

你是…推薦不推薦
個人 16GB,聊天 + 輕指令碼qwen2.5:7b14B 常駐
個人 24GB,本地程式設計 Agentqwen2.5-coder:14b為速度回 7B 卻指望跨檔案重構
團隊共享推理節點24GB + 7B 或 32GB + 14B16GB + 多路 14B 併發
只要最快響應7B(或 gemma3:4b)16GB 上常駐 14B

可執行結論:16GB 選 7B,24GB 才考慮 14B;否則 swap 會讓體驗掉一個數量級。

常見問題 FAQ

M4 Mac Mini 選 7B 還是 14B?

先判斷會不會 swap,再選模型檔位。完整答案(16GB→7B、24GB→14B)見§8.4 選型表文首核心發現解釋的是「為什麼」。

M4 Mac Mini 16GB 能跑 14B 嗎?

能載入,不適合日常常駐。見§1.1 三態§3.2§8.4

7B 和 14B 速度差多少?

16GB 7B median 29.1;24GB 14B median 15.1。16GB 強跑 14B swap 後約 3.4 tok/s。詳見§三

日常聊天選 7B 還是 14B?

多數場景用 7B 即可;跨檔案程式設計見§五§8.4 選型表

Claude Code 本地模型怎麼選?

16GB → qwen2.5-coder:7b;24GB → qwen2.5-coder:14b。Agent 優先看 TTFT,見§7.1

要不要為了 14B 從 16GB 升到 24GB?

依賴本地 Agent 且 7B 常「改不對」時值得;純聊天往往不必。見§8.4

Qwen2.5-Coder 和通用 7B/14B 差在哪?

程式碼盲評高約 8–12 個百分點;聊天通用 7B/14B 更自然。

總結

16GB 選 7B,24GB 才考慮 14B。14B 能不能用,主要看記憶體夠不夠、會不會 swap,不是「模型差一檔」。自己復現可下載§8.3 裡的日誌與指令碼,並對照§2.4 實驗說明

同系列其他文章:

實驗在物理 Mac Mini M4 上完成(含 Macstripe Lab 與桌邊機器),macOS 15.4.1,Ollama 0.6.2。可下載附件見§8.3 復現資源。無本地機器時可在 Macstripe M4 節點復現。