进阶 11 分钟性能

充分发挥 Apple Mac 的性能 Silicon

直接回答

在 Apple Silicon 上优化 LLM,主要是提高 macOS 允许 GPU 使用的内存上限(sudo sysctl iogpu.wired_limit_mb),选择合适的模型和量化方式,为长上下文量化 KV 缓存,并选用合适的推理引擎。任何设置都无法突破芯片带宽所决定的性能上限:带宽限制了生成速度。

Mac并非配备GPU的PC:其内存是共享的,GPU可使用的内存比例可调节。本页说明GPU内存限制及其调整方法、适用于不同内存规模的模型、KV缓存、Flash Attention以及引擎选择。

您正在挑选电脑吗? 按预算推荐 →

作者: Mohamed Meguedmi·更新于 2026-09-29·已在 macOS 14+ 上测试
推荐硬件

本指南的备选购买方案: Mac mini M5 Pro(24 GB / 512 GB).

为什么选择它?我们的完整资料: Mac mini M5 Pro(24 GB / 512 GB) →

按预算比较所有选项,从 800 到 3 500 欧元 →

预算有限: 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 套装

在你的 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 并未在文档中将此设置列为面向普通用户的参数:请将其视为有风险的系统修改。

选择该数值时的参考范围(为 macOS 预留的内存较为保守,需按实际情况调整)
Mac 内存建议为系统预留的内存目标GPU内存iogpu.wired_limit_mb 的值
16 GB≈ 5 GB≈ 11 GB11264
24 GB≈ 6 GB≈ 18 GB18432
32 GB≈ 8 GB≈ 24 GB24576
64 GB≈ 8至10 GB≈ 54 至 56 GB55296 à 57344
128 GB≈ 16 GB≈ 112 GB114688

公式很简单:以 MB 为单位的数值 = 目标内存容量(GB)× 1,024。预留内存是本指南出于谨慎作出的选择,并非 Apple 提供的数据:预留多少取决于您保持打开的应用。如果机器变慢、向磁盘写入数据或变得不稳定,请降低该数值。

要查看 macOS 实际限制的内存大小,只需安装 mlx 包后运行一条 Python 代码即可。输出内容包含 max_recommended_working_set_size 字段,单位为字节:除以 1 073 741 824 可转换为吉字节。在调整任何设置前,请先将模型大小与该数值对比:如果模型已小于该值,则无需提升限制。

终端
python3 -c "import mlx.core as mx; print(mx.device_info())"
  1. 01
    读取当前值
    在终端中执行命令 sysctl iogpu.wired_limit_mb 可查看值。若为零,通常表示 macOS 使用默认限制。
  2. 02
    计算新值
    将模型大小与其 KV 缓存大小相加,增加一定余量,然后为系统预留至少 5 GB。将数值换算为兆字节。
  3. 03
    应用设置
    运行 sudo sysctl iogpu.wired_limit_mb 并设置所需值。根据已发布的指南,此操作无需重启即可生效。
  4. 04
    检查
    重新运行模型:Ollama 或 llama.cpp 的日志会显示建议的工作内存容量;使用 MLX 时,请重新查看 device_info()。在活动监视器中关注内存压力。
  5. 05
    恢复原设置
    将值设为0以交还系统控制权,或重启:设置可能不会在重启后保留,需使用sysctl进行验证。
终端
# Lire la valeur actuelle (0 = plafond par défaut du système)
sysctl iogpu.wired_limit_mb

# Exemple : 24 Go au GPU sur un Mac de 32 Go (24 x 1024)
sudo sysctl iogpu.wired_limit_mb=24576

# Retour au comportement par défaut
sudo sysctl iogpu.wired_limit_mb=0
!
这项设置无法做到什么
它不会凭空增加内存,只是允许 GPU 锁定更多内存。GPU 锁定的内存过多,就会给系统留下太少内存,导致系统开始将数据交换到磁盘,生成速度随之骤降。mlx-lm 仓库还明确指出,对于占用大量内存的模型,自动锁定内存需要 macOS 15 或更高版本。

#根据Mac的内存选择哪些模型

Q4 量化模型的大小可参考本站给出的估算值:3B 约 2 GB,7–8B 约 5 GB,14B 约 9 GB,32B 约 19 至 20 GB,70B 约 40 GB。除此之外,还需计入 KV 缓存,并为系统预留内存。下表将这些参考值与 Mac 的内存容量结合起来,对照提高 GPU 内存使用上限前后的情况。

不同 Mac 内存容量下实际可运行的模型规模(Q4_K_M)
内存无需调整提高上限后
16 GB7-9B,中等上下文长度12B,上下文较短
24 GB12-14B24B Q4(≈ 14 GB),中等上下文
32 GB24B32B Q4(≈19-20GB),短上下文
64 GB32B 模型搭配长上下文Q4 量化的 70B 模型(约 40 GB),中等长度的上下文
128 GB70B 模型,使用长上下文运行带有超长上下文的 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 上的层数。

终端
# Ollama : forcer l'attention flash
export OLLAMA_FLASH_ATTENTION=1
ollama serve

# llama.cpp : toutes les couches sur le GPU, attention flash active
llama-server -m modele.gguf -ngl all -fa on -c 16384

#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
export OLLAMA_KV_CACHE_TYPE=q8_0
ollama serve

# llama.cpp
llama-server -m modele.gguf -ngl all -fa on -ctk q8_0 -ctv q8_0 -c 32768

#Ollama,LM Studio,llama.cpp 或 MLX

Mac平台上的不同需求对应不同的引擎选择
引擎亮点优先选择的场景
Ollama安装简单,本地 API 易用日常使用,与其他工具的集成
LM Studio图形界面,MLX 和 GGUF 模型无需终端即可探索模型
llama.cpp精细设置,最新功能您希望调整GPU层、KV缓存、服务器配置
MLX / mlx-lmApple 框架、微调、共享内存Apple 格式、轻量训练、Python 脚本

mlx-lm 仓库将该软件包介绍为在 Apple 芯片上进行文本生成和模型微调的工具,并支持量化模型。比较 MLX 与 llama.cpp 的速度时,请参考专门的指南;本页仅介绍通用设置。

#电池与节能模式

在 MacBook 上,持续生成会让 GPU 一直处于工作状态:续航时间会远低于 Apple 宣称的网页浏览续航时间。本页因缺乏来源依据,不提供具体时长;续航取决于型号和负载。macOS 的低电量模式会降低性能:只在外出且续航比速度更重要时使用,任何长时间运行的会话都应接通电源。

#常见问题

FAQ
搭载 Apple Silicon 的 Mac 有多少 VRAM?+
没有独立显存:GPU 使用统一内存。它可以将总 RAM 的一部分锁定供自己使用,但这一比例低于 100%。各来源对默认比例的说法不一,介于三分之二和四分之三之间,因此请通过 MLX 的 device_info 命令或 Ollama 日志读取系统设定值,并在需要时通过 iogpu.wired_limit_mb 提高该值。
如何通过sysctl提升Mac GPU内存?+
运行 sudo sysctl iogpu.wired_limit_mb,后接以兆字节为单位的数值,例如 24576 对应 24 GB。根据 mlx-lm 仓库的说明,该值必须大于模型大小,但小于总内存。至少为系统保留 5 GB 内存。将该值重新设为 0,即可恢复默认行为。
iogpu.wired_limit_mb 设置在重启后是否保留?+
不要假定设置会保留:每次重启后,请用 sysctl 检查该值。如果它恢复为 0,就需要重新应用设置。Apple 没有提供此设置的文档;任何在启动时自动应用该设置的方法都需由您自行承担风险,而且数值过高可能导致机器不稳定。
在 Mac 上应该使用 MLX 还是 llama.cpp?+
这取决于用途。MLX 是 Apple 的框架,适合 Apple 格式和微调;llama.cpp 提供精细的调节选项,而基于它的 Ollama 则以简单易用见长。本站的对比指南测量了速度差异;先从 Ollama 开始,只有出现明确需求时再更换。
Mac能否替代NVIDIA显卡用于LLM?+
关于模型大小,通常答案是肯定的:64GB或128GB的Mac可以加载24GB或32GB显存的GPU无法承载的模型。至于速度,高性能显卡具有更高的带宽,且支持CUDA,能调用更多工具。因此选择取决于目标模型。
为什么我的模型明明能装进内存,运行起来却很慢?+
可能有几种原因:模型大小超过 GPU 的上限,导致一部分在 CPU 上运行(可用 ollama ps 检查);内存压力触发了交换(swap);或者上下文过长。在更换模型之前,请先缩短上下文、量化 KV 缓存,并提高 GPU 的使用上限。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。