Metal
Jak działa
Metal udostępnia GPU przez obiekty: urządzenie (MTLDevice), kolejki i bufory poleceń (command queue/buffer), potoki obliczeniowe (compute pipeline state) oraz zasoby (bufory i tekstury). Programy GPU pisze się w języku Metal Shading Language (oparty na C++), kompilowane do kerneli uruchamianych masowo równolegle na rdzeniach GPU. Dla AI kluczowe są Metal Performance Shaders (MPS) i MPSGraph — zoptymalizowane biblioteki jąder (mnożenie macierzy, konwolucje, softmax, uwaga), na których opierają się backendy frameworków. Dzięki unified memory Apple silicon te same strony pamięci są dostępne dla CPU i GPU, więc tensory nie wymagają jawnego transferu; to szczególnie korzystne dla LLM, gdzie duży KV cache i wagi mogą rezydować we wspólnej pamięci o wysokiej przepustowości.
Rozwiązany problem
Uruchamianie i trenowanie modeli AI na sprzęcie Apple wymaga bezpośredniego, wydajnego dostępu do GPU z minimalnym narzutem sterownika. Wcześniejsze API (OpenGL/OpenCL) miały duży narzut i zostały przez Apple wycofane. Metal rozwiązuje to jako natywna, niskopoziomowa warstwa, która pozwala frameworkom AI wykonywać operacje tensorowe na GPU Apple silicon, korzystając z unified memory (wspólna pamięć CPU i GPU) bez kosztownego kopiowania danych między urządzeniami.
Kluczowe mechanizmy
Mocne strony i ograniczenia
Komponenty
Język oparty na C++ do pisania shaderów i kerneli obliczeniowych kompilowanych do wykonania na GPU Apple.
Zoptymalizowane biblioteki jąder do operacji liniowych, konwolucji i grafów obliczeń, na których bazują backendy AI.
Mechanizm kolejkowania i wysyłania pracy do GPU; enkoduje polecenia obliczeniowe i renderujące do asynchronicznego wykonania.
Implementacja
Nie wszystkie operatory frameworków AI mają natywne jądra Metal/MPS; brakujące operacje mogą spadać na CPU, obniżając wydajność.
Kod oparty na Metal nie jest przenośny na inne platformy (Windows, Linux, GPU NVIDIA/AMD), co utrudnia wieloplatformowe wdrożenia.
Ewolucja
Metal debiutuje na iOS jako niskonarzutowe API grafiki i obliczeń zastępujące OpenGL ES na sprzęcie Apple.
Apple dodaje MPS z zoptymalizowanymi jądrami, kładąc podwaliny pod akcelerację uczenia maszynowego.
Przejście Maca na układy Apple silicon (M1) z unified memory czyni Metal główną warstwą akceleracji AI na Macach, wykorzystywaną przez PyTorch MPS, MLX i llama.cpp.
Hiperparametry (konfigurowalne osie)
Liczba wątków w grupie roboczej uruchamianego kernela, wpływająca na wykorzystanie GPU.
Typ danych jąder: FP32, FP16 (half) lub INT.
Złożoność obliczeniowa
Złożoność czasowa: Zależna od jądra (np. O(N^2 d) dla uwagi) — Metal to warstwa wykonania. Złożoność przestrzenna: Ograniczona pojemnością unified memory (wspólna CPU/GPU).
Unified memory Apple silicon (np. M2 Ultra do 192 GB, M-series o przepustowości setek GB/s) pozwala uruchamiać duże modele LLM lokalnie bez dedykowanej karty GPU, ponieważ wagi i KV cache mieszczą się we wspólnej pamięci. llama.cpp i MLX wykorzystują Metal do inferencji LLM na Macach z konkurencyjną liczbą tokenów/s względem średniej klasy GPU dyskretnych, przy niskim poborze mocy.
Wąskie gardło obliczeniowe
Wydajność Metal w AI zależy od liczby rdzeni GPU oraz przepustowości unified memory; sam interfejs ma niski narzut.
Paradygmat wykonania
Wzorzec aktywacji wyznacza uruchamiany model, nie samo API Metal.
Metal to API wykonania jąder; nie narzuca routingu ani warunkowej aktywacji (te wynikają z uruchamianego modelu).
Równoległość
Metal uruchamia jądra masowo równolegle na rdzeniach GPU; poziom równoległości zależy od jądra i sprzętu.
Wymagania sprzętowe
Metal jest natywnym API GPU Apple silicon (rodzina M) i wykorzystuje unified memory oraz sprzętowe jednostki obliczeniowe GPU do akceleracji AI.
Metal jest ograniczone do platform Apple (macOS, iOS, iPadOS); nie działa na sprzęcie ani systemach spoza ekosystemu Apple.