入门Mac / 苹果 3 分钟阅读发布于 · 更新于

Mac M3 Pro:真实的模型上限

统一内存并不全归你用 —— 18GB 与 36GB 的 M3 Pro 实际能装下什么,以及决定这一点的 Metal 上限。

面向的技术栈

macOS 14+ · M3 Pro 18GB / 36GB 统一内存 · Ollama Metal · GGUF Q4_K_M · 单路推理

最近一次修改后未重新实机运行 —— 命令请当作起点,而不是已验证的配方。

MacM3 ProApple SiliconOllamaMetal

真正限制你的那个数字

统一内存要与 macOS 以及你打开的一切共享,而且 Metal 不允许单个进程锁定全部内存 —— 默认上限约为已装内存的 75%。所以 18GB 的 M3 Pro 大约能给模型 13.5GB,36GB 的机器约 27GB。Mac 上任何“装不装得下”的问题,比的都是这个数字,而不是机身标称的那个。它可以用 iogpu.wired_limit_mb 调整,但调高之后变成 macOS 开始换页、而不是模型加载失败,那更糟。

bash
# What Metal will currently wire down (0 = system default, ~75% of RAM)
sysctl iogpu.wired_limit_mb

# 18 GB machine → ≈ 13.5 GB usable
# 36 GB machine → ≈ 27   GB usable

18GB 的 M3 Pro

比本指南早先版本所说的更多。14B 的 Q4_K_M 在 8K 上下文下约 11.0GB,确实装得下 —— 之前这里写的是“需要 36GB 以上”,那是错的。7–8B 模型约 6GB,加载着也还能继续干别的活。真正装不下的是 30B:即便是 MoE 的 Qwen3 30B-A3B,在 8K 下也约 20GB,既超过 75% 上限也超过整机内存。

text
Llama 3.1 8B    Q4_K_M  @8K   ≈  6.2 GB   comfortable
Qwen3 8B        Q4_K_M  @8K   ≈  6.4 GB   comfortable
Qwen2.5 14B     Q4_K_M  @8K   ≈ 11.0 GB   fits, watch what else is open
GPT-OSS 20B     MXFP4   @8K   ≈ 12.9 GB   tight — 95% of the 13.5 GB ceiling
Qwen3 30B-A3B   Q4_K_M  @8K   ≈ 20.1 GB   does not fit

36GB 的 M3 Pro

32B 的 Q4_K_M 在 8K 下约 22.8GB,能放进约 27GB 的上限内 —— 早先“32B 需要 Q3 或大幅缩减上下文”的说法过于保守。14B 在 8K 下则会让整机大部分内存仍然空闲。这一档真正的限制是速度而非容量:让 32B 在 M3 Pro 上显得慢的是内存带宽,不是显存,生成每个 token 都要把全部权重读一遍,所以 M3 Pro 的 150 GB/s 就是速度上限:32B 的 Q4_K_M 约 8 tok/s,14B 约 18,8B 约 32。这些是上限而不是实测 —— 实际速度会低于它们,本站也没有 M3 Pro 的实测数据。值得知道的例外是混合专家模型 Qwen3 30B-A3B:8K 下约 20.1GB(在这一档可以从容运行),但每个 token 只读取少数激活的专家,所以不受稠密模型那条上限的约束。

bash
ollama pull qwen2.5:14b     # ≈ 11 GB at 8K — plenty of room
ollama pull qwen2.5:32b     # ≈ 23 GB at 8K — fits; ceiling ≈ 8 tok/s
ollama pull qwen3:30b-a3b   # ≈ 20 GB at 8K — fits; MoE, not bound by that ceiling

确认它实际占用了多少

ollama ps 会报告驻留大小以及模型跑在哪里;在苹果芯片上应显示 100% GPU。当模型超出 Metal 允许 GPU 使用的上限时,Ollama 并不会拒绝加载 —— 它会把放不下的层放到 CPU 上,这一列会显示类似 25%/75% CPU/GPU,生成速度也随之下降。超限的信号是这种拆分,而不是报错。一旦机器开始换页,你会先在整机体验上感觉到,而不是在任何模型指标里看到,所以请看活动监视器里的“内存压力”,而不是可用内存。

bash
ollama ps
# NAME           ID     SIZE    PROCESSOR   UNTIL
# qwen2.5:14b    <id>   ...     100% GPU    4 minutes from now
#
# Over the limit, the same column reads e.g.  25%/75% CPU/GPU

常见问题

模型加载后 Mac 变得极卡:说明超出了 wired 上限、macOS 正在换页 —— 关掉一些应用或换更小的模型,而不是去调高 iogpu.wired_limit_mb。是长上下文把你顶出去的:只有 KV 缓存随上下文增长,所以先把上下文减半,再考虑换模型。Ollama 拉下来的文件比预期大:裸标签给的是该标签的默认构建(通常是 Q4_K_M),不是按你的内存挑的档位。

下一步

在显存计算器里选择你的 Mac —— 统一内存机型都在列表里 —— 并按你实际使用的上下文比较。记得用整机内存的约 75% 而不是 100% 去判断结果。

常见问题

18GB 的 M3 Pro 能跑 14B 模型吗?

日常上下文长度下可以。Qwen2.5 14B 的 Q4_K_M 在 8K 下约 11.0GB,而 18GB 机器上 Metal 允许 GPU 使用的大约是 13.5GB —— 占 81%,本站算作从容运行。会让它装不下的是长上下文:32K 时同一个模型约 15.9GB,超过上限,Ollama 就会开始把一部分层放到 CPU 上。

要不要调高 iogpu.wired_limit_mb 来装下更大的模型?

通常不要。默认设置给 macOS 和你打开的应用留了大约四分之一的内存;把它划给模型,只是把紧张转嫁到系统其他部分,一旦 macOS 开始换页,所有东西都会变慢,模型也不例外。换一档更小的量化或者缩短上下文,就能让同一个模型装下,而不必做这种取舍。

32B 模型在 M3 Pro 上能跑多快?

Q4_K_M 下最多约每秒 8 个 token,实际会更低。每生成一个 token 都要把全部权重读一遍,而 M3 Pro 的内存带宽是 150 GB/s,权重约 20GB —— 这个比值就是任何运行时都突破不了的上限。本站没有在 M3 Pro 上实测过,所以给出的是上限而不是实测值。像 Qwen3 30B-A3B 这样的混合专家模型每个 token 读取的数据少得多,不受这条上限约束。

这篇指南用到了什么

接下来

看看 🍎 Mac M3 Pro 18G 还能跑哪些模型反向查询 —— 18GB、8192 上下文,按质量排序

本文涉及的模型

它真的跑起来了吗?

复制命令并不等于它能用,所以站内只在这里问一次。除了你的这个回答之外,不收集任何东西。

相关指南

部署指南仅供学习参考。每个模型均有独立许可协议 — 下载或部署前请阅读 Hugging Face 官方模型卡。