Skip to content

PyTorch 2.15 speeds MoE decoding on Macs up to 6.5x

PyTorch 2.15 adds FP8 tensors on Apple GPUs and new Metal kernels. Qwen3.6-35B-A3B decoding on an M3 Ultra jumps from 9.4 to 61.3 tokens a second.

By Tech AI Wire Team

3 min read

XLinkedIn
A silver Apple Mac Studio on a sunlit wooden desk beside a monitor showing blurred lines of code, with a keyboard, mouse and potted plants nearby.
MoE decoding on M3 Ultra with torch.compile, tokens per second
Qwen3.6-35B-A3B, 2.14
9.4
Qwen3.6-35B-A3B, 2.15
61.3
LFM2.5-8B-A1B, 2.14
23.6
LFM2.5-8B-A1B, 2.15
123.6

PyTorch 2.15, due on October 28, 2026, makes Apple Silicon Macs much faster at running mixture-of-experts AI models. Hugging Face's PyTorch team says decoding on an M3 Ultra runs about 5 to 6.5 times faster than in 2.14. The release also adds FP8 numbers on Apple GPUs and fixes memory and accuracy problems that broke some image models.

What MPS is and what changed

MPS is PyTorch's backend for Apple's GPUs, the part that runs your model on a Mac's graphics chip instead of its CPU. Hugging Face's post, written by Irakli Salia and Khushi Agrawal, lists the work in 2.15. Its stated aim is "to make your Mac a first-class place to run and train PyTorch models."

Much of the speed comes from moving operations to hand-written Metal kernels. Metal is Apple's low-level graphics and compute interface. Before, many operations went through MPSGraph, Apple's more general framework, which added overhead.

The release changes how models generate text. When a model writes one token at a time, F.linear now uses kernels built for a single row of input. A new native F.grouped_mm handles the many small matrix multiplications that mixture-of-experts models need. Those models send each token to a few specialist sub-networks, called experts.

The numbers

All figures come from the Hugging Face post, measured on Apple hardware with torch.compile.

TestPyTorch 2.14PyTorch 2.15
Qwen3.6-35B-A3B decoding, M3 Ultra9.4 tokens/s61.3 tokens/s
LFM2.5-8B-A1B decoding, M3 Ultra23.6 tokens/s123.6 tokens/s
Softmax over a 128,256-token row57 microseconds7 microseconds
Wan2.2 video VAE decode, peak driver memory270.1 GiB8.1 GiB
Qwen-Image-2.1 VAE accuracy vs CPU10.06 dB29.95 dB

Linear layers got a smaller gain: 1.23 times faster on average across 96 BF16 layer shapes, with large layers staying close to 1x. The accuracy fix matters for image tools. The post says the Qwen-Image-2.1 encoder produced corrupted output in ComfyUI on 2.14.

FP8 and other additions

FP8 is a number format that stores each value in one byte, half the size of the common 16-bit formats. PyTorch 2.15 supports FP8 tensors on MPS, and the scaled matrix multiply F.scaled_mm works with them.

Other changes in the post:

  • A streams API, torch.mps.Stream, for running work in parallel on the GPU.
  • Faster softmax, convolution, padding and dropout on dedicated Metal kernels.
  • More linear algebra, including complex LU factorization and faster small matrix inversion.
  • New operations such as torch.frexp, torch.take and torch.heaviside.

Requirements and release date

PyTorch 2.15 needs macOS 15 or later and Python 3.11 or later on an Apple Silicon Mac. Python 3.10 support ends with this release; PyTorch's release managers confirmed 2.14 is the last version with 3.10 wheels.

The release branch was cut on October 5, and the first release candidate came out on October 8. The final release is set for October 28. You can try the candidate now in a separate environment with uv pip install torch==2.15.0 --index-url https://download.pytorch.org/whl/test/cpu.

The post also previews work aimed at 2.16, which may change. Attention for grouped-query decoding on an M5 Pro drops from 465 to 65 microseconds in early tests.

What this means for developers

For anyone running open models locally on a Mac, 2.15 brings large gains. Mixture-of-experts models gain the most in Hugging Face's tests.

  • Test the release candidate on your own model. Install it in a separate environment and compare tokens per second with 2.14 before October 28.
  • Upgrade Python and macOS first. Builds on Python 3.10 or macOS 14 will not get 2.15. Plan that change now.
  • Recheck image pipelines. If Qwen-Image-2.1 or Wan2.2 outputs looked wrong or ran out of memory, 2.15 targets exactly those bugs.
  • Try FP8 for memory savings. One byte per value halves memory against 16-bit formats. Check output quality on your task before you switch.
  • Compare backends across hardware. PyTorch's push to make every chip a native device also covers AWS Trainium's new TorchNeuron backend. Code that stays device-neutral can move between them.

Sources

  1. MPS in PyTorch 2.15 - Hugging Face
  2. PyTorch Release 2.15 Key Dates - PyTorch Developer Mailing List
  3. PyTorch 2.15 RC1 produced for pytorch, torchvision & torchaudio - PyTorch Developer Mailing List

Related articles

The weekly digest

One email every Friday with the week's top stories from all six desks: AI, dev tools, coding, the tech industry, startups and what's next. Free, no spam.

Unsubscribe anytime with one click.