TinkerLab
跳转可下载配置
01 // HOMELABApple Silicon Mac流式 API阅读与复现约 11 分钟

Apple M6 MacBook Pro(16GB / 24GB / 32GB)跑本地大模型:选哪档内存、跑哪些模型,以及为什么双 Neural Engine 不会让 llama.cpp 变快

新款 2nm M6 带来了每个 GPU 核心内置的神经网络加速器、双 16 核 Neural Engine,以及 153 GB/s(16GB 版)或 170 GB/s(24/32GB 版)的内存带宽。对本地大模型来说,最关键的规格是内存档位:16GB 是 8B 级机器,24GB 是 14B 级机器,只有 32GB 能从容运行 Qwen3-30B-A3B。llama.cpp、Ollama、MLX 都不使用 Neural Engine——买内存,别为 NPU TOPS 买单。

[规格推算结论 / TL;DR]【证据等级:规格推算,非本站实机实测】「Apple M6 MacBook Pro(16GB / 24GB / 32GB)跑本地大模型:选哪档内存、跑哪些模型,以及为什么双 Neural Engine 不会让 llama.cpp 变快」(规格依据:规格依据(非本站实机实测):14 英寸 MacBook Pro,标准版 Apple M6(台积电 N2 · 12 核 CPU:2 超大核 + 4 性能核 + 6 能效核 · 12 核 GPU,每核内置神经网络加速器 · 双 16 核 Neural Engine · 16GB 版 153 GB/s,24GB/32GB 版 170 GB/s,据发布资料与媒体报道),建议复现软件栈:macOS 26.x (Metal 4) / llama.cpp master (2026-11, Metal backend) / Ollama (latest stable) / MLX + mlx-lm (latest, uses GPU Neural Accelerators via Metal 4 tensor ops) / Models: Qwen3-8B / Qwen3-14B / Gemma 3 27B / Qwen3-30B-A3B / Qwen3-32B (GGUF Q4_K_M or MLX 4-bit),规格核验日期:2026-11-05):新款 2nm M6 带来了每个 GPU 核心内置的神经网络加速器、双 16 核 Neural Engine,以及 153 GB/s(16GB 版)或 170 GB/s(24/32GB 版)的内存带宽。对本地大模型来说,最关键的规格是内存档位:16GB 是 8B 级机器,24GB 是 14B 级机器,只有 32GB 能从容运行 Qwen3-30B-A3B。llama.cpp、Ollama、MLX 都不使用 Neural Engine——买内存,别为 NPU TOPS 买单。 离线边界为「模型下载完成后可完全离线」(llama.cpp / Ollama / MLX 推理完全在本机运行。会转交私有云计算(Private Cloud Compute)的 Apple Intelligence 功能不在本文范围内。)。
REPRODUCIBILITY MANIFEST // 规格推算与复现协议
规格推算 · 非实机实测 · 规格核验:2026-11-05
规格依据硬件 (Spec Basis — Not Lab-Measured)

规格依据(非本站实机实测):14 英寸 MacBook Pro,标准版 Apple M6(台积电 N2 · 12 核 CPU:2 超大核 + 4 性能核 + 6 能效核 · 12 核 GPU,每核内置神经网络加速器 · 双 16 核 Neural Engine · 16GB 版 153 GB/s,24GB/32GB 版 170 GB/s,据发布资料与媒体报道)

锁定软件与模型版本 (Pinned Stack Versions)
macOS 26.x (Metal 4)llama.cpp master (2026-11, Metal backend) / Ollama (latest stable)MLX + mlx-lm (latest, uses GPU Neural Accelerators via Metal 4 tensor ops)Models: Qwen3-8B / Qwen3-14B / Gemma 3 27B / Qwen3-30B-A3B / Qwen3-32B (GGUF Q4_K_M or MLX 4-bit)
离线与外部连接核查 (Offline & Network Boundary)
模型下载完成后可完全离线

llama.cpp / Ollama / MLX 推理完全在本机运行。会转交私有云计算(Private Cloud Compute)的 Apple Intelligence 功能不在本文范围内。

已知限制与失败案例 (Known Limits)
  • 证据等级:规格推算估算。tok/s 数字由公开带宽(× 0.68 效率系数)计算得出,并非本站在 M6 上实测。请运行附带脚本,用你的数据替换。
  • macOS 默认把 GPU 可锁定内存限制在内存总量的约 2/3 到 3/4。在 32GB 机型上调高 `iogpu.wired_limit_mb` 有帮助,但会压缩系统、浏览器和 IDE 的可用空间,且重启后失效。
  • 双 16 核 Neural Engine 只能通过 Core ML / Apple Foundation Models 调用。llama.cpp、Ollama、MLX 都跑在 GPU 上,速度由内存带宽(生成)和 GPU 神经网络加速器(预填充,MLX / Metal 4 路径)决定。
遇到环境异常?打开排障诊断树 →

1. NPU TOPS、GPU 神经网络加速器、内存带宽:各自到底加速了什么

Apple 为 M6 宣传了三项 AI 能力,它们对本地大模型的意义差别很大。**内存带宽(153 / 170 GB/s)**决定生成速度上限——每生成一个 token 都要把模型权重重新读一遍。**GPU 神经网络加速器**(每个 GPU 核心内的矩阵单元,从 M5 开始引入)主要在运行时调用 Metal 4 张量运算时加速提示词处理(预填充)——MLX 已支持,llama.cpp 的 Metal 后端正在跟进。**双 16 核 Neural Engine** 是独立的 NPU,llama.cpp、Ollama、MLX 完全不使用它,它服务于 Apple Intelligence 和 Core ML 应用。实际结论:买标准版 M6,本质上是在选**内存档位**;24/32GB 版多出的约 11% 带宽(170 对 153 GB/s)只是锦上添花。
表 1:M6 各项能力分别影响本地大模型的哪个指标
M6 能力llama.cpp / Ollama 是否使用MLX 是否使用影响指标
统一内存容量(16/24/32GB)是是能装下哪些模型;最大上下文长度
内存带宽(153 / 170 GB/s)是是生成速度 tok/s
GPU 神经网络加速器(每核)部分(取决于 Metal 后端版本)是(Metal 4 张量运算)预填充 / 首 token 延迟
双 16 核 Neural Engine否否仅 Apple Intelligence 与 Core ML 应用

2. 内存档位选型:能装下什么,以及估算的生成速度

可用 GPU 内存 = macOS 允许 Metal 锁定的内存,再减去浏览器和 IDE 占用的部分。粗略的实用预算:**16GB → 约 10.5GB**,**24GB → 约 17GB**,**32GB → 默认约 22GB,调高锁定上限后约 26GB**。下表按「带宽 × 0.68 ÷ 每 token 读取的权重」估算生成速度,KV Cache 为 Q8_0、上下文 8K。标注「紧张」的组合意味着只有关掉其他应用才能跑。
表 2:标准版 M6 装载情况与生成速度估算(GGUF Q4_K_M,8K 上下文,Q8_0 KV)。非实测。
模型权重大小(Q4_K_M)M6 16GB(153 GB/s)M6 24GB(170 GB/s)M6 32GB(170 GB/s)
Qwen3-8B约 5.0 GB可装下 · 约 21 tok/s可装下 · 约 23 tok/s可装下 · 约 23 tok/s
Qwen3-14B约 9.0 GB紧张(需关闭其他应用)· 约 11 tok/s可装下 · 约 13 tok/s可装下 · 约 13 tok/s
Gemma 3 27B约 16.5 GB装不下紧张 / 有交换风险 · 约 7 tok/s可装下 · 约 7 tok/s
Qwen3-30B-A3B(MoE,约 3B 激活)约 18.6 GB装不下装不下(溢出到交换)可装下 · 约 55 tok/s
Qwen3-32B(稠密)约 19.8 GB装不下装不下紧张(需调高锁定上限)· 约 6 tok/s
[提示]如果你在 24GB 和 32GB 的 M6 之间犹豫,32GB 档能解锁 Qwen3-30B-A3B——这个 MoE 模型比 14B 稠密模型更聪明,在这个带宽下生成速度还快约 4 倍。光这一个模型通常就值回升级差价。

3. 在你自己的 M6 上复现:锁定上限、固定基准测试、交换检查

三步就能把上面的估算变成你自己的数据。第一,读取当前的锁定上限,并(仅限 32GB 机型)临时调高。第二,运行固定参数的 `llama-bench`,让结果可以和本站其他指南中的机器对比。第三,确认测试期间没有发生内存交换——如果 `Swapins` 增长了,这次结果对该内存档位无效。
M6 local-LLM reproduction steps (macOS Terminal)
# 1) Inspect / raise the GPU wired-memory limit (resets on reboot)
sysctl iogpu.wired_limit_mb                 # 0 = macOS default (~2/3–3/4 of RAM)
sudo sysctl iogpu.wired_limit_mb=26624      # 32GB M6 only: allow ~26GB for Metal

# 2) Fixed benchmark: prompt 2048 / generate 128, 3 reps, flash attention, Q8_0 KV
vm_stat | grep -E "Swapins|Swapouts"        # record BEFORE
./llama-bench -m Qwen3-30B-A3B-Q4_K_M.gguf -ngl 99 -fa 1 \
  -ctk q8_0 -ctv q8_0 -p 2048 -n 128 -r 3 -o md
vm_stat | grep -E "Swapins|Swapouts"        # record AFTER — must not grow

# 3) Optional: compare MLX on the same model (uses GPU Neural Accelerators for prefill)
pip install -U mlx-lm
mlx_lm.generate --model mlx-community/Qwen3-30B-A3B-4bit \
  --prompt "Summarize the trade-offs of unified memory for local LLMs." --max-tokens 256
FIELD Q&A // 常见实测疑问与边界解答

复现常见疑问与深层原理解答

Q: 跑本地 AI 是不是应该等 M6 Pro / M6 Max,而不是买标准版 M6?

如果目标是 30B 级 MoE 或 14B 稠密模型,32GB 标准版 M6 是一台合理的便携机器。如果想跑 70B 稠密或 100B+ MoE,标准版芯片没有任何内存档位够用——你需要 Max 级芯片(更宽的总线、64–128GB)或 Mac Studio 这类台式机。相关档位请参阅本站 M5 Max 和 M3 Ultra 指南。

Q: M6 跑本地大模型比 M5 快很多吗?

生成阶段最多提升约等于带宽差距(24/32GB 版约 10%),因为生成速度受带宽限制。预填充的提升取决于运行时对 GPU 神经网络加速器的利用程度,MLX 受益最大。如果你已有一台 32GB 的 M5 机器,仅为本地大模型速度而升级很难说值得。

REPRODUCIBLE ARTIFACT // 配套可参数化附件

Apple M6 MacBook Pro 内存档位基准脚本(锁定上限 + 交换检测)

记录芯片与内存档位,可选调高 iogpu.wired_limit_mb,以 Q8_0 KV Cache 运行固定参数的 llama-bench,若测试期间 macOS 发生内存交换则将结果标记为无效。

bench-m6-memory-tier.sh ↗
修改上方参数将实时更新下方配置内容
#!/usr/bin/env bash
# Tinker AI — Apple M6 MacBook Pro Memory-Tier Benchmark (Guide #38)
set -euo pipefail

MODEL="./models/Qwen3-14B-Q4_K_M.gguf"
WIRED="0"
PROMPT_TOKENS="2048"

echo "=== [1/4] Chip & memory tier ==="
system_profiler SPHardwareDataType | grep -E "Chip|Memory"

echo "=== [2/4] GPU wired-memory limit ==="
if [ "$WIRED" != "0" ]; then
  sudo sysctl iogpu.wired_limit_mb="$WIRED"
fi
sysctl iogpu.wired_limit_mb

swapins() { vm_stat | awk '/Swapins/ {gsub("\\.","",$2); print $2}'; }
BEFORE=$(swapins)

echo "=== [3/4] llama-bench pp$PROMPT_TOKENS / tg128 x3, Q8_0 KV ==="
llama-bench -m "$MODEL" -ngl 99 -fa 1 -ctk q8_0 -ctv q8_0 -p "$PROMPT_TOKENS" -n 128 -r 3 -o md

AFTER=$(swapins)
echo "=== [4/4] Swap guard ==="
if [ "$AFTER" -gt "$BEFORE" ]; then
  echo "[INVALID] macOS swapped $((AFTER - BEFORE)) pages during the run — this model is too large for this memory tier."
else
  echo "[OK] No swap during benchmark — result is valid for this memory tier."
fi

更多可复现工程指南

查看全部 42 篇指南 →