PyTorch 2.15 bringt FP8 und deutlich schnelleres MoE-Decoding auf den Mac

PyTorch 2.15 unterstützt float8_e4m3fn im MPS-Backend und lässt Mixture-of-Experts-Modelle auf Apple Silicon laut dem PyTorch-Team von Hugging Face 5- bis 6,5-mal schneller dekodieren als 2.14. Außerdem bringt das Release neue Metal-Kernel für Audio-, Video- und Training-Workloads.
- PyTorch 2.15 unterstützt float8_e4m3fn-Tensoren auf MPS, wobei F.scaled_mm Tensorwise- und Rowwise-Skalierung beherrscht.
- Laut Hugging Face dekodieren MoE-Modelle 5- bis 6,5-mal schneller als in 2.14; Qwen3.6-35B-A3B steigt auf einem M3 Ultra von 9,4 auf 61,3 Tokens/s.
- Das VAE-Decoding von Wan2.2-Videos erreicht jetzt nur noch etwa 8 GiB statt 270 GiB Treiberspeicher.
- MPS setzt nun macOS 15 oder neuer voraus, PyTorch 2.15 benötigt Python 3.11 oder neuer.
FP8 kommt auf den Mac
Die wichtigste Neuerung ist die Unterstützung von torch.float8_e4m3fn-Tensoren auf MPS. Jeder Wert belegt ein Byte, also halb so viel Speicher wie bei FP16 oder BF16. Solche Tensoren lassen sich mit F.scaled_mm multiplizieren, das sowohl Tensorwise- als auch Rowwise-Skalierung unterstützt. Auch andere Operationen, die unter CUDA und auf der CPU verfügbar sind, funktionieren laut dem Team mit FP8 auf MPS.
Der Beitrag stammt vom PyTorch-Team bei Hugging Face, das zu PyTorch beiträgt und sich zum Teil auf das MPS-Backend konzentriert. Den Autoren zufolge hieß es Anfang 2026 auf MPS, selbst bei kleinen Modellen nicht unterstützte Operationen, Performance-Einbrüche und unerwartetes Speicherwachstum zu umgehen. Ihr Ansatz: echte Modelle aus dem Hugging Face Hub ausführen, Schwachstellen von MPS finden und sie direkt in PyTorch beheben, zunehmend indem sie MPSGraph durch eigene Metal-Kernel ersetzen.
Schnelleres Decoding für Sprachmodelle
In der Decode-Phase eines LLM durchläuft jedes neue Token das Modell als einzelne Zeile, sodass aus großen Matrixmultiplikationen Matrix-Vektor-Produkte werden. PyTorch 2.15 beschleunigt die beiden Schichttypen, die diesen Schritt dominieren.
Für Dense-Schichten gibt es seit 2.14 GEMV-Kernel für torch.mm, doch F.linear lief weiterhin über MPSGraph. Version 2.15 verbindet beides, wobei geeignete Bias-Additionen zusammengeführt werden. Über 96 BF16-Schichtformen aus realen Modellen meldet das Team einen geometrischen Mittelwert von 1,23× Beschleunigung. Am meisten profitieren kleine Projektionen wie MoE-Gates, während große Schichten und LM-Heads bei etwa 1× bleiben, weil sie bereits nahe an der Bandbreitengrenze arbeiteten. Softmax über das Vokabular läuft etwa 8× schneller.
Für Mixture-of-Experts-Schichten bietet 2.15 ein natives Grouped Matmul. In 2.14 wurden die Gruppen-Offsets auf die CPU kopiert und die Gruppen in einer Schleife durchlaufen. Die neuen Metal-Kernel lesen die Offsets direkt auf der GPU, und kleine Gruppen, die beim Decoding häufig vorkommen, bekommen einen eigenen Kernel. Auf einem M3 Ultra mit torch.compile steigt laut dem Beitrag Qwen3.6-35B-A3B von 9,4 auf 61,3 Tokens/s und LFM2.5-8B-A1B von 23,6 auf 123,6 Tokens/s.
Lineare Algebra, Audio, Video und Training
Complex64-LU-Faktorisierung, LU-Solve und Triangular-Solve laufen jetzt auf MPS, wodurch darauf aufbauende Operationen wie komplexe Determinanten möglich werden. Batches von FP32-Matrizen bis 4 × 4 werden in einem einzigen Metal-Kernel invertiert, QR nutzt blockweise Updates, und Gated-DeltaNet-Workloads erhalten einen eigenen Pfad für FP32-Dreieckssysteme der Größen 16 × 16, 32 × 32 und 64 × 64 mit mindestens acht rechten Seiten. SVD geht nun robuster mit sehr kleinen Singulärwerten und extremen Eingabegrößen um.
Mehrere Operationen aus Audio, Video und Training erhalten neue Metal-Pfade, darunter conv1d forward, Constant Padding, Dropout, Interpolation Backward und Reduktionen. Die Änderung beim Padding hat sichtbare Folgen:
- Beim Dekodieren eines Videos mit dem Tiled VAE von Wan2.2 stieg der Treiberspeicher früher auf 270 GiB. Jetzt liegt der Spitzenwert bei etwa 8 GiB.
- Unter 2.14 beschädigte der VAE-Encoder von Qwen-Image-2.1 auf MPS stillschweigend Bilder, wie in ComfyUI gemeldet wurde. In 2.15 stimmt ein Encode-Decode-Durchlauf mit der CPU überein, bei 29,95 dB PSNR statt zuvor 10,06 dB.
Das Release bringt außerdem öffentliche MPS-Streams und zuverlässigere Event-Zeitmessung aus Python.
Voraussetzungen und was das für Mac-Nutzer bedeutet
MPS setzt nun macOS 15 oder neuer voraus, und PyTorch 2.15 benötigt Python 3.11 oder neuer. Erforderlich ist ein Mac mit Apple Silicon. Ist das Betriebssystem zu alt oder keine Metal-GPU vorhanden, erklärt die MPS-Verfügbarkeitsprüfung jetzt den Grund. Der Release Candidate lässt sich in einer separaten Umgebung mit uv pip install torch==2.15.0 --index-url https://download.pytorch.org/whl/test/cpu installieren.
Für alle, die Modelle lokal mit transformers, diffusers oder Tools wie ComfyUI ausführen, nennen die Autoren schnellere lokale LLMs, Videogenerierung, die in den Speicher passt, korrekte Bildbearbeitung mit Qwen-Image-2.1 und FP8-Gewichte mit halb so viel Speicherbedarf wie BF16. Auch Dense-Modelle profitieren durch schnellere lineare Schichten und Softmax.
Mit Blick nach vorn deutet das Team PyTorch 2.16 an, mit Attention komplett auf Metal, weiteren Umstellungen von MPSGraph auf Metal und schnellerem LLM-Decoding.
Hugging Face: MPS in PyTorch 2.15


