充分发挥 Apple Mac 的性能 Silicon
在 Apple Silicon 上优化 LLM,主要是提高 macOS 允许 GPU 使用的内存上限(sudo sysctl iogpu.wired_limit_mb),选择合适的模型和量化方式,为长上下文量化 KV 缓存,并选用合适的推理引擎。任何设置都无法突破芯片带宽所决定的性能上限:带宽限制了生成速度。
Mac并非配备GPU的PC:其内存是共享的,GPU可使用的内存比例可调节。本页说明GPU内存限制及其调整方法、适用于不同内存规模的模型、KV缓存、Flash Attention以及引擎选择。
您正在挑选电脑吗? 按预算推荐 →
本指南的备选购买方案: Mac mini M5 Pro(24 GB / 512 GB).
为什么选择它?我们的完整资料: Mac mini M5 Pro(24 GB / 512 GB) →
预算有限: RTX 5060 · 大型模型: RTX 5090 · Mac Studio.
移动场景: 本地 AI 选哪款笔记本电脑 →
联盟链接——可能产生佣金,但您无需额外付费。作为亚马逊合作伙伴,QuelLLM 将从符合条件的购买中获利。
#在 Apple Silicon 上优化 LLM:四个关键着力点
要充分发挥 Apple Silicon Mac 的性能,有四个关键因素需要依次考虑:macOS 允许 GPU 使用的内存上限、模型大小与量化方式、用于长上下文的 KV 缓存和 Flash Attention,以及推理引擎的选择(Ollama、llama.cpp、MLX 或 LM Studio)。这一切都基于一个事实:统一内存由 CPU 和 GPU 共享,因此总 RAM 可以用作显存,但 macOS 会限制 GPU 可锁定使用的内存份额。提高这一上限可以运行更大的模型;其他措施则有助于避免内存被占满或生成速度下降。任何一项措施都无法让机器的速度突破带宽所允许的极限。
- 统一内存
- CPU 和 GPU 读取同一份数据,无需复制。MLX 将其概括为:数组存储在共享内存中。因此,一台配备 64 GB 内存的 Mac 可以加载任何一张 24 GB 或 32 GB 的消费级显卡都容纳不下的模型。
- 效率
- Mac 的功耗远低于配备高端显卡的 PC;以 NVIDIA 的 RTX 5090 为例,显卡功耗超过 500 W。在轻度使用时,Mac 仍然安静且省电。
- 生态系统
- llama.cpp 仓库将 Apple Silicon 列为优先支持的平台,并通过 ARM NEON、Accelerate 和 Metal 进行优化。Ollama、LM Studio 和 MLX 也利用 Metal。
- 限制
- 不支持CUDA,因此依赖CUDA的库无法运行;Mac的带宽(M4 Max最高达546 GB/s)仍低于高端显卡;微调可行但速度较慢。
#Mac的VRAM:GPU内存限制及iogpu.wired_limit_mb
在你的 Mac 上充分利用本地 AI:统一内存、MLX 与 GGUF、适合你芯片的模型、为 Apple Silicon 调优的 Ollama 和 LM Studio。
- 在线空间,终身可用
- PDF + 文件
- 30 天内退款
Mac 没有独立的 VRAM:所谓的“VRAM”,是 macOS 允许为 GPU 锁定的一部分统一内存。这部分小于总 RAM 容量。公开资料对默认比例说法不一,视情况在三分之二到四分之三之间;不要自行假定,应在自己的机器上读取实际值。MLX 通过 device_info() 的 max_recommended_working_set_size 字段提供系统采用的数值,MLX 文档说明,可以使用 sudo sysctl iogpu.wired_limit_mb,后接以兆字节为单位的大小,来提高这一系统限制。
mlx-lm 仓库给出的谨慎原则是:该值必须大于以兆字节计的模型大小,但小于机器的内存容量。Apple 并未在文档中将此设置列为面向普通用户的参数:请将其视为有风险的系统修改。
| Mac 内存 | 建议为系统预留的内存 | 目标GPU内存 | iogpu.wired_limit_mb 的值 |
|---|---|---|---|
| 16 GB | ≈ 5 GB | ≈ 11 GB | 11264 |
| 24 GB | ≈ 6 GB | ≈ 18 GB | 18432 |
| 32 GB | ≈ 8 GB | ≈ 24 GB | 24576 |
| 64 GB | ≈ 8至10 GB | ≈ 54 至 56 GB | 55296 à 57344 |
| 128 GB | ≈ 16 GB | ≈ 112 GB | 114688 |
公式很简单:以 MB 为单位的数值 = 目标内存容量(GB)× 1,024。预留内存是本指南出于谨慎作出的选择,并非 Apple 提供的数据:预留多少取决于您保持打开的应用。如果机器变慢、向磁盘写入数据或变得不稳定,请降低该数值。
要查看 macOS 实际限制的内存大小,只需安装 mlx 包后运行一条 Python 代码即可。输出内容包含 max_recommended_working_set_size 字段,单位为字节:除以 1 073 741 824 可转换为吉字节。在调整任何设置前,请先将模型大小与该数值对比:如果模型已小于该值,则无需提升限制。
- 01读取当前值在终端中执行命令 sysctl iogpu.wired_limit_mb 可查看值。若为零,通常表示 macOS 使用默认限制。
- 02计算新值将模型大小与其 KV 缓存大小相加,增加一定余量,然后为系统预留至少 5 GB。将数值换算为兆字节。
- 03应用设置运行 sudo sysctl iogpu.wired_limit_mb 并设置所需值。根据已发布的指南,此操作无需重启即可生效。
- 04检查重新运行模型:Ollama 或 llama.cpp 的日志会显示建议的工作内存容量;使用 MLX 时,请重新查看 device_info()。在活动监视器中关注内存压力。
- 05恢复原设置将值设为0以交还系统控制权,或重启:设置可能不会在重启后保留,需使用sysctl进行验证。
#根据Mac的内存选择哪些模型
Q4 量化模型的大小可参考本站给出的估算值:3B 约 2 GB,7–8B 约 5 GB,14B 约 9 GB,32B 约 19 至 20 GB,70B 约 40 GB。除此之外,还需计入 KV 缓存,并为系统预留内存。下表将这些参考值与 Mac 的内存容量结合起来,对照提高 GPU 内存使用上限前后的情况。
| 内存 | 无需调整 | 提高上限后 |
|---|---|---|
| 16 GB | 7-9B,中等上下文长度 | 12B,上下文较短 |
| 24 GB | 12-14B | 24B Q4(≈ 14 GB),中等上下文 |
| 32 GB | 24B | 32B Q4(≈19-20GB),短上下文 |
| 64 GB | 32B 模型搭配长上下文 | Q4 量化的 70B 模型(约 40 GB),中等长度的上下文 |
| 128 GB | 70B 模型,使用长上下文 | 运行带有超长上下文的 70B 模型,或同时加载多个模型 |
最大生成速度可根据芯片带宽计算:用带宽除以模型权重的大小(以 GB 为单位)。每台机器的介绍页都标有带宽数据:请参阅 MacBook Air、MacBook Pro、Mac mini 和 Mac Studio 的指南,其中分别列出了对应芯片的数据。
具体例子:在一台配备 32 GB 内存的 Mac 上,320 亿参数的模型经 Q4 量化后约占 19 到 20 GB。使用 8,000 个 token 的上下文和 f16 KV 缓存时,还要再算上几个 GB,总计约 23 到 24 GB。如果默认 GPU 内存上限更低,模型的一部分就会转到 CPU 上运行,速度随之骤降:将上限提高到 24 或 26 GB 即可解决,前提是为系统留出足够的内存余量。如果内存压力变成红色,就改选 240 亿参数的模型。
#量化:为什么 Q4 仍是 Mac 上合适的默认选择
在 Mac 上,生成速度受内存带宽限制:模型越小,读取就越快。因此,Q4_K_M 仍是默认选择,在大小、速度和质量之间提供最佳平衡。Q5_K_M 和 Q6_K 会牺牲百分之几的速度,换来小幅的质量提升;Q8_0 的大小几乎是 Q4 的两倍,因此速度上限也大致减半。MLX 4 位格式在 MLX 生态中发挥同样的作用。量化指南详细介绍了这一权衡,此处无需重复其中的数值。
#Metal与Flash Attention
主流引擎通过 Metal 使用 Mac 的 GPU,无需配置。使用 Ollama 时,ollama ps 命令可显示模型是否已加载到 GPU 上。Flash Attention 可减少长上下文占用的内存:当引擎和硬件支持时,Ollama 会自动启用它,也可通过设置变量 OLLAMA_FLASH_ATTENTION=1 强制启用。在 llama.cpp 中,-fa 选项接受 on、off 或 auto,默认值为 auto;-ngl 选项用于设置放在 GPU 上的层数。
#KV 缓存:容易忽略的内存占用
KV 缓存为上下文中的每个 token 存储各层的向量。其大小等于层数的两倍,乘以 KV 头数,再乘以头的维度,再乘以上下文长度,最后乘以每个值的字节数。一个纯算术示例,采用典型的 32 层架构、8 个维度为 128 的 KV 头以及 32 000 token 的 f16 上下文:2 × 32 × 8 × 128 × 32 000 × 2 字节,即约 4.2 GB,这还不包括模型权重。在 q8_0 量化下,该缓存大小大约减半;在 q4_0 量化下大约减至四分之一,但会伴随轻微的精度损失。
Ollama 通过 OLLAMA_KV_CACHE_TYPE 变量对缓存进行量化(默认为 f16);llama.cpp 则使用 -ctk 选项量化键,使用 -ctv 选项量化值。在一台配备 32 GB 内存、向 GPU 分配 24 GB 的 Mac 上,节省几 GB 缓存,就可能让原本放不下的上下文变得绰绰有余。Ollama 也会根据内存大小选择默认上下文长度:内存低于 24 GiB 时为 4000 个 token。
#Ollama,LM Studio,llama.cpp 或 MLX
| 引擎 | 亮点 | 优先选择的场景 |
|---|---|---|
| Ollama | 安装简单,本地 API 易用 | 日常使用,与其他工具的集成 |
| LM Studio | 图形界面,MLX 和 GGUF 模型 | 无需终端即可探索模型 |
| llama.cpp | 精细设置,最新功能 | 您希望调整GPU层、KV缓存、服务器配置 |
| MLX / mlx-lm | Apple 框架、微调、共享内存 | Apple 格式、轻量训练、Python 脚本 |
mlx-lm 仓库将该软件包介绍为在 Apple 芯片上进行文本生成和模型微调的工具,并支持量化模型。比较 MLX 与 llama.cpp 的速度时,请参考专门的指南;本页仅介绍通用设置。
#电池与节能模式
在 MacBook 上,持续生成会让 GPU 一直处于工作状态:续航时间会远低于 Apple 宣称的网页浏览续航时间。本页因缺乏来源依据,不提供具体时长;续航取决于型号和负载。macOS 的低电量模式会降低性能:只在外出且续航比速度更重要时使用,任何长时间运行的会话都应接通电源。
- MLX 与 llama.cpp:速度对比
- MacBook Pro M4 Pro 和 Max
- Mac Studio:最高支持 512 GB
- 使用 Metal 编译 llama.cpp
- 量化KV缓存
- 本站 VRAM 计算工具
#常见问题
搭载 Apple Silicon 的 Mac 有多少 VRAM?+
如何通过sysctl提升Mac GPU内存?+
iogpu.wired_limit_mb 设置在重启后是否保留?+
在 Mac 上应该使用 MLX 还是 llama.cpp?+
Mac能否替代NVIDIA显卡用于LLM?+
为什么我的模型明明能装进内存,运行起来却很慢?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。