TLDRocket
Sign in

MPS in PyTorch 2.15

Hugging Face

PyTorch 2.15 adds FP8 and much faster LLM decoding on Mac. It also cuts video memory from 270 GiB to about 8 GiB, which is a very Mac-looking miracle.

Based on reporting by Hugging Face — read the original for the full story.

Summary, retelling and take written by AI under human oversight; images are AI-generated illustrations. How we work · Report an error

PyTorch 2.15 is a big release for anyone running models on Apple silicon. The headline is simple: FP8 now works on MPS, decoding gets much faster for both dense and mixture-of-experts models, and a long list of operations has been pulled off MPSGraph and onto dedicated Metal kernels. If you’ve been using a Mac as a serious local machine for inference or training, this is the kind of release that changes day-to-day habits, not just benchmark charts.

The FP8 piece is more than a checkbox. PyTorch 2.15 adds torch.float8_e4m3fn tensors on MPS, so weights and activations can take half the space of BF16, and F.scaled_mm can multiply them directly on the GPU. The team is careful about the route here: real models from the Hugging Face Hub were used to find where MPS was lagging, and more of the fixes now land upstream in PyTorch instead of staying in a private fork.

Decode speed is where the numbers get loud. In 2.15, F.linear on the common [1, 1, hidden_size] decoding shape now uses the GPU path directly, and grouped matmul for MoE models has a native Metal implementation. On an M3 Ultra with torch.compile, Qwen3.6-35B-A3B goes from 9.4 to 61.3 tokens/s, while LFM2.5-8B-A1B rises from 23.6 to 123.6 tokens/s. Dense models get a lift too, including an 8× faster softmax for sampling and a 1.23× geometric-mean speedup across 96 BF16 linear-layer shapes.

The less glamorous wins may matter just as much. Constant padding moving to Metal takes Wan2.2 video decode from a peak driver-memory figure of about 270 GiB down to 8 GiB. Qwen-Image-2.1’s VAE encoder, which silently corrupted images on 2.14, now matches CPU much more closely after the padding fix, with PSNR rising from 10.06 dB to 29.95 dB. Add in faster convolutions, dropout, interpolation backward, complex LU and triangular solves, plus public MPS streams, and 2.15 starts to look less like a maintenance release and more like a proper push to make the Mac feel first-class.

The ugly truth is that this kind of progress only happens when someone keeps tearing out the slow path. MPSGraph was the default compromise; 2.15 is another reminder that compromise ages badly in machine learning. Hugging Face’s PyTorch team seems to know the real product is not the API surface, but the number of times a model stops making excuses and just runs.

My take — AI-written commentary, not fact-checked reporting

This is the right kind of GPU work: boring kernel surgery, not keynote cosplay. FP8 and faster decoding are useful, but the real story is the steady retreat of MPSGraph and the return of control to Metal, which is how platforms stop feeling second-rate. Macs do not need more slogans; they need fewer surprises and fewer 270 GiB “features.”

Read more about this at: Hugging Face

Related stories

The daily briefing

Every AI story that matters, in your inbox by 8am.

TLDRocket reads all relevant sources, removes duplicate coverage, and summarises the day in two minutes. Follow companies and topics for alerts, or get the briefing in Slack. Free, no spam, unsubscribe anytime.