← लैब पर वापस

हर Mac आकार पर MPS की “max allowed” संख्या

pytorchapple-siliconmemoryguide

Mac पर PyTorch error में एक नंबर होता है जिसे लोग खोजते हैं। यह 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 के लिए सुझाई working set से गुणा करने पर मिलता है; यह working set torch.mps.recommended_max_memory() लौटाता है। एक मशीन से दूसरी मशीनों का यह नंबर नहीं पता चलता, इसलिए मैंने दूसरे लोगों के errors से इसे निकाला।

नंबर कहाँ से आते हैं

24 October को मैंने GitHub पर ऐसे issues खोजे जिनमें error की "max allowed" value लिखी थी। 250 issues और pull requests मिले, जिनमें से 167 में text के अंदर एक नंबर था। अधिकतर values कुछ समूहों में आती हैं, और जहाँ report करने वाले ने अपने Mac की memory बताई, वहाँ ये समूह उसके आकार से मेल खाते हैं। हर value को 1.7 से भाग देने पर उस मशीन के GPU के लिए macOS की दी हुई working set मिलती है।

Mac memorymax allowed, GiBGPU working set, GiBmemory का हिस्साreportsदेखा गया
8 GB9.075.3367 %272023 – 2026
16 GB18.1310.6767 %182023 – 2026
24 GB27.2016.0067 %9Jan 2025 – Jan 2026
24 GB30.1917.7674 %3Dec 2025 – Sep 2026
32 GB36.2721.3367 %62024 – 2025
36 GB45.9027.0075 %32024 – 2026
48 GB63.6537.4478 %4, मेरा भीSep – Oct 2026
64 GB81.6048.0075 %7Dec 2023 – Apr 2025
64 GB88.1351.8481 %6Mar – Oct 2026
128 GB163.2096.0075 %42024 – 2025
128 GB182.78107.5284 %2Dec 2025 – Jan 2026

Mac के आकार के हिसाब से macOS द्वारा GPU को दी जाने वाली memory का हिस्सा: देर 2025 तक की reports में 32 GB तक दो तिहाई और उसके ऊपर तीन चौथाई; देर 2025 के बाद की reports में 24 GB, 48 GB, 64 GB और 128 GB Macs पर 74 %, 78 %, 81 % और 84 %

PyTorch के पुराने versions इन numbers को "GB" और नए "GiB" कहते हैं। दोनों binary unit हैं: 1.7 × दो तिहाई × 16 GiB ठीक 18.13 होता है।

क्या बदला

देर 2025 तक नियम सीधा दिखता है। macOS ने 32 GB तक के Macs पर GPU को memory का दो तिहाई और उसके ऊपर तीन चौथाई दिया। देर 2025 के बाद की reports में 24 GB, 64 GB और 128 GB Macs पर हिस्से बड़े दिखते हैं। जिन तीन 64 GB reports में system का नाम है, वे सभी macOS 26 कहती हैं। 8 और 16 GB values नहीं बदलीं। मेरा अपना 48 GB Mac macOS 26.5.2 चलाता है और 37.44 GiB, 78 % लौटाता है।

यहाँ दो सीमाएँ हैं: हर नई row सिर्फ़ दो से छह reports पर टिकी है, और उनसे मैं नहीं बता सकता कि फ़र्क़ macOS ने किया या chip ने।

error दिखने पर इसका मतलब

डिफ़ॉल्ट ratio पर table की हर row में सीमा physical memory से ऊपर है: 1.7 × दो तिहाई memory का 113 % है, और 1.7 × 84 % 143 % है। जब तक कोई job "max allowed" तक पहुँचती है, वह कुछ समय से swap कर रही होती है। यह मेरे माप से मेल खाता है: मेरे Mac पर footprint के 33.5 और 36 GB के बीच swap शुरू हुआ, यानी 63.65 GiB की सीमा से बहुत नीचे। error के अंत में दी सलाह, 0.0 ratio, सीमा हटाती है, इसलिए job और आगे swap कर सकती है।

अगर swap करता Mac नहीं, बल्कि साफ़ error चाहिए, तो सीमा अपनी memory से नीचे रखें, मसलन 1.0 ratio, जो working set ही है। इसके साथ low ratio भी सेट करें: PyTorch 2.14 पर, सिर्फ़ high ratio को 1.4 से नीचे सेट करने पर "invalid low watermark ratio 1.4" से failure होता है।

PYTORCH_MPS_HIGH_WATERMARK_RATIO=1.0 PYTORCH_MPS_LOW_WATERMARK_RATIO=0.8 python your_script.py

अपने Mac की working set देखने के लिए:

import torch
print(torch.mps.recommended_max_memory() / 2**30, "GiB")

जो नंबर मेल नहीं खाते

लगभग एक तिहाई reports में दूसरी limits दिखती हैं, जैसे 1.70 GiB, 3.40 GiB, 6.77 GiB या 3.00 GiB। वे Mac की डिफ़ॉल्ट limits नहीं हैं। किसी app या user ने अपना ratio या cap सेट किया है: एक video tool 128 GB वाले Mac पर भी MPS को 3 GiB तक cap करता है। अन्य 20 reports में 7.93 है, और मैं उस value को किसी एक Mac आकार से नहीं जोड़ सका। अगर आपका नंबर table से बहुत नीचे है, तो Mac को दोष देने से पहले tool की settings देखें।

स्रोत

हर row के लिए दो reports। 167 की पूरी list data file में है।