Start / Poradniki / Rozwiązywanie problemów / Apple

Apple Silicon: model nie chce korzystać z GPU / Metal nieaktywny

macOS

Autor: Jakub Rusinowski · Ostatnia aktualizacja: 22 czerwca 2026

Edukator AI i prowadzący warsztaty z wdrażania lokalnych modeli LLM

Komunikat błędu

ggml_metal_init: failed to allocate buffer

Kiedy się pojawia

Na Macu z M1, M2, M3 albo M4 model albo działa wolno i Monitor aktywności nie pokazuje żadnej pracy GPU, albo kończy się błędem alokacji bufora Metala. Spodziewałeś się, że robotę weźmie na siebie układ graficzny Apple — a on jej nie bierze albo spróbował i zabrakło mu miejsca.

Co się właściwie dzieje

Apple Silicon dzieli jedną pulę pamięci zunifikowanej między CPU i GPU, a llama.cpp i Ollama korzystają z backendu Metal, żeby liczyć na układzie graficznym. Zawodzą dwie rzeczy. Albo Metal w ogóle nie jest aktywny — bo build x86 działa pod Rosettą albo ustawiono zero warstw na GPU — i wtedy wszystko spada na procesor. Albo Metal *jest* aktywny, ale model razem z kontekstem przekracza tę część pamięci zunifikowanej, którą macOS zechce oddać układowi graficznemu, i alokacja bufora się nie udaje. Tak czy inaczej sprowadza się to do rozmiaru: duże modele tłoczą się we wspólnej puli pamięci.

Jak to naprawić

1. Dobierz model do swojej pamięci zunifikowanej Najczęstsze rozwiązanie

Na Macu twój „VRAM” to część całkowitej pamięci zunifikowanej, a macOS nie odda GPU wszystkiego. Mac z 8 GB wygodnie uciągnie modele 3B–7B w Q4; 16 GB otwiera drogę do większych; 32 GB i więcej radzi sobie z tymi naprawdę dużymi. Dopasowanie modelu do pamięci to właśnie to, co powstrzymuje alokacje Metala przed niepowodzeniem. Sprawdź, co udźwignie twój konkretny Mac, zanim cokolwiek pobierzesz.

Sprawdź, co zmieści się na twoim sprzęcie — sprawdź, które modele zmieszczą się w pamięci zunifikowanej twojego Maca
Otwórz kalkulator VRAM →

2. Upewnij się, że masz natywny build arm64

Intelowy build llama.cpp działający pod Rosettą nie użyje Metala — policzy wszystko na CPU. Sprawdź, czy twój plik wykonywalny jest natywnym arm64. Jeśli kompilowałeś ze źródeł, zbuduj go z włączonym Metalem.

bash
# should print "arm64", not "x86_64"
file $(which ollama)
uname -m

3. Przerzuć warstwy na GPU (llama.cpp)

Mając build z Metalem, zrzuć na układ graficzny wszystkie warstwy. W llama.cpp służy do tego -ngl ustawione wysoko (albo na -1). Ollama włącza Metal automatycznie, więc jeśli mimo to liczy na CPU, podejrzewaj instalację x86 pod Rosettą.

bash
./llama-cli -m model.gguf -ngl 999

4. Zmniejsz kontekst, jeśli bufor Metala zawodzi

Jeśli Metal jest aktywny, a mimo to dostajesz błąd alokacji, przeważa szalę najprawdopodobniej cache KV dla długiego kontekstu. Zmniejsz długość kontekstu i spróbuj ponownie.

Powiązane

Model, który mieści się na większości zestawów:
Zobacz model i wymagania →

Najczęstsze pytania

Czy GPU w moim Macu ma osobny VRAM?

Nie. Apple Silicon korzysta z pamięci zunifikowanej, wspólnej dla CPU i GPU. Twój faktyczny „VRAM” to część całego RAM-u, a macOS część rezerwuje dla systemu — Mac z 16 GB nie odda modelowi wszystkich 16 GB.

Jak sprawdzić na Macu, że model faktycznie korzysta z GPU?

W trakcie generowania otwórz Monitor aktywności → Okno → Historia GPU (albo uruchom sudo powermetrics --samplers gpu_power). Realna aktywność układu graficznego oznacza, że Metal jest aktywny; płaska linia — że wszystko liczy się na CPU.

Dlaczego ten sam model działa na Macu kolegi, a u mnie nie?

Prawie zawsze chodzi o wielkość pamięci zunifikowanej. Mac z 32 albo 64 GB pomieści modele, które po prostu nie wchodzą na maszynę z 8 czy 16 GB. Dobieraj model do swojej pamięci, nie do cudzej.