Ce qui se passe
L'équipe PyTorch de Hugging Face, qui travaille sur le backend MPS (le GPU des Mac
via Metal), présente ce qu'apporte PyTorch 2.15. Ce backend est celui des
projets qui passent par PyTorch sur Mac : transformers, diffusers, ComfyUI. Ce n'est
pas celui de llama.cpp ni de MLX, qui n'en profitent pas.
Les modèles à experts
Pour un modèle mixture-of-experts (MoE), chaque token n'active qu'une partie des
experts, et leur calcul se fait par un produit matriciel groupé. En 2.14, MPS copiait
les décalages des groupes vers le CPU et bouclait groupe par groupe. La 2.15 le fait
sur le GPU, avec des noyaux Metal dédiés, dont un pour les petits groupes, cas courant
au décodage, et accélère aussi le tri top-k du routage.
Mesures de l'équipe, sur M3 Ultra avec torch.compile (2.14 → 2.15) :
- Qwen3.6-35B-A3B : 9,4 → 61,3 tokens/s
- LFM2.5-8B-A1B : 23,6 → 123,6 tokens/s
Le billet donne un second chiffre, à ne pas confondre : le seul noyau de décodage ajoute environ 1,3× (Qwen3.6-35B-A3B : 38,7 → 51,7 tokens/s avec 512 tokens de contexte). Le « 5 à 6,5× » additionne donc plusieurs changements.
Le reste
- Modèles denses : une couche linéaire à une ligne, la forme du décodage, passe par
des noyaux matrice-vecteur, soit 1,23× en moyenne géométrique sur 96 formes BF16 ;
le
softmaxsur le vocabulaire passe de 57 µs à 7 µs pour une ligne de 128 256 logits (environ 8×). - FP8 : le type
torch.float8_e4m3fnexiste sur MPS, à un octet par valeur (moitié du BF16), avecF.scaled_mmen mise à l'échelle par tenseur ou par ligne. - Mémoire vidéo : le décodage VAE de Wan2.2 demandait 270 GiB de mémoire pilote au pic ; il en faut 8 GiB, grâce à un rembourrage déplacé sur Metal.
- Correctif de qualité : en 2.14, l'encodeur VAE de Qwen-Image-2.1 corrompait silencieusement les images sur MPS (PSNR 10,06 dB contre le CPU) ; en 2.15 il atteint 29,95 dB.
- Flux MPS publics en Python (
torch.mps.Stream) et algèbre linéaire complexe (LU, résolution triangulaire) sur GPU.
Les limites
Ces mesures viennent des auteurs des noyaux, sur un M3 Ultra, une puce haut de gamme qui n'est pas celle de la plupart des portables, et la version décrite était encore une candidate. Prérequis : macOS 15 ou plus et Python 3.11 ou plus. Le billet annonce déjà pour la 2.16 l'attention entièrement sur Metal, avec des gains complémentaires de +16 à +19 % de tokens/s sur deux modèles MoE.
Comment s'y prendre
Dans un environnement séparé, pour comparer avant de migrer :
uv pip install torch==2.15.0 --index-url https://download.pytorch.org/whl/test/cpuRelancer ensuite un décodage de votre modèle avec torch.compile et comparer les
tokens par seconde avec la 2.14.
Source : Hugging Face, 20 octobre 2026. Source en anglais.