Mac 上的 PyTorch 错误里有一个大家会搜索的数字。这条来自一台 16 GB Mac(AudioLDM2 #20):
RuntimeError: MPS backend out of memory (MPS allocated: 18.02 GB, other allocations: 107.10 MB, max allowed: 18.13 GB). Tried to allocate 4.50 MB on private pool.在上一篇笔记中,我测量了它在我的 48 GB Mac 上是怎么来的。max allowed 是 PYTORCH_MPS_HIGH_WATERMARK_RATIO,默认值为 1.7,乘以 macOS 建议给 GPU 的工作集,也就是 torch.mps.recommended_max_memory() 的返回值。一台机器无法告诉你其他机器上的这个数字,所以我从其他人的错误里读出来。
数字从哪里来
十月 24 日,我在 GitHub 搜索了引用该错误及其 max allowed 值的 issue。找到 250 个 issue 和 pull request,其中 167 个在文本中带有数字。大多数值落在几个组里;报告者注明 Mac 内存时,这些组与内存大小吻合。每个值除以 1.7,就得到 macOS 在那台机器上给 GPU 的工作集。
| Mac 内存 | max allowed,GiB | GPU 工作集,GiB | 内存占比 | 报告数 | 发现时间 |
|---|---|---|---|---|---|
| 8 GB | 9.07 | 5.33 | 67 % | 27 | 2023 – 2026 |
| 16 GB | 18.13 | 10.67 | 67 % | 18 | 2023 – 2026 |
| 24 GB | 27.20 | 16.00 | 67 % | 9 | Jan 2025 – Jan 2026 |
| 24 GB | 30.19 | 17.76 | 74 % | 3 | Dec 2025 – Sep 2026 |
| 32 GB | 36.27 | 21.33 | 67 % | 6 | 2024 – 2025 |
| 36 GB | 45.90 | 27.00 | 75 % | 3 | 2024 – 2026 |
| 48 GB | 63.65 | 37.44 | 78 % | 4,加上我的 | Sep – Oct 2026 |
| 64 GB | 81.60 | 48.00 | 75 % | 7 | Dec 2023 – Apr 2025 |
| 64 GB | 88.13 | 51.84 | 81 % | 6 | Mar – Oct 2026 |
| 128 GB | 163.20 | 96.00 | 75 % | 4 | 2024 – 2025 |
| 128 GB | 182.78 | 107.52 | 84 % | 2 | Dec 2025 – Jan 2026 |

较旧的 PyTorch 版本将这些数字标为 GB,较新的标为 GiB。两者都是二进制单位:1.7 × 三分之二 × 16 GiB 正好等于 18.13。
改变了什么
到 2025 年末之前,规律看起来很简单。macOS 给 32 GB 以下 Mac 的 GPU 三分之二内存,以上则给四分之三。2025 年末以来的报告显示,24、64 和 128 GB Mac 的占比更高。三份注明系统的 64 GB 报告都写的是 macOS 26。8 和 16 GB 的数值没有变。我的 48 GB Mac 运行 macOS 26.5.2,返回 37.44 GiB,即 78 %。
这里有两个限制:每个较新的行只基于两到六份报告,我也无法据此判断差异来自 macOS 还是芯片。
看到这个错误意味着什么
在默认比例下,表中每一行的上限都高于物理内存:1.7 × 三分之二为内存的 113 %,而 1.7 × 84 % 为 143 %。任务到达 max allowed 时,早已交换了一段时间。这与我的测量一致:在我的 Mac 上,内存占用量介于 33.5 和 36 GB 时便开始交换,远低于 63.65 GiB 的上限。错误结尾建议的比例 0.0 会移除上限,因此任务可以继续交换。
如果你宁愿得到干净的错误,而不是一台正在交换的 Mac,就把上限设在内存以下,例如比例设为 1.0,也就是工作集本身。同时设置 low 比例:在 PyTorch 2.14 中,单独将 high 比例设在 1.4 以下会因 “invalid low watermark ratio 1.4” 而失败。
PYTORCH_MPS_HIGH_WATERMARK_RATIO=1.0 PYTORCH_MPS_LOW_WATERMARK_RATIO=0.8 python your_script.py查看你自己的 Mac 工作集:
import torch
print(torch.mps.recommended_max_memory() / 2**30, "GiB")不符合的数字
约三分之一的报告显示其他上限,例如 1.70、3.40、6.77 或 3.00 GiB。它们不是 Mac 的默认值。应用或用户设置了自己的比例或上限:有一个视频工具即使在 128 GB Mac 上也将 MPS 限制为 3 GiB。另有 20 份报告为 7.93,我无法把这个值和某一种 Mac 内存大小联系起来。如果你的数字远低于表格,先检查工具设置,再怪 Mac。
来源
每行两份报告。完整的 167 份列表在数据文件中。
- 8 GB,9.07:noScribe #84,pytorch #105839
- 16 GB,18.13:pinokio #941,AudioLDM2 #20
- 24 GB,27.20:pytorch #145374,qwen3-optimizer-study #13
- 24 GB,30.19:ml-bokeh #3,ComfyUI #17264(比例 1.0,因此为 17.76)
- 32 GB,36.27:ComfyUI-LivePortraitKJ #82,instructlab #2568
- 36 GB,45.90:ACE-Step-1.5 #282
- 48 GB,63.65:trellis2-mlx #1,ask-physics #24
- 64 GB,81.60:bobo-fun #8,ComfyUI-CogVideoXWrapper #312
- 64 GB,88.13:EtherReel-releases #7,ComfyUI #17309
- 128 GB,163.20:ComfyUI #9308,lm-evaluation-harness #1835
- 128 GB,182.78:ComfyUI #11584,ComfyUI-WanVideoWrapper #1856