Pular para o conteúdo

PyTorch 2.15 acelera em até 6,5 vezes a decodificação MoE em Macs

O PyTorch 2.15 adiciona tensores FP8 nas GPUs da Apple e novos kernels Metal. A decodificação do Qwen3.6-35B-A3B em um M3 Ultra salta de 9,4 para 61,3 tokens por segundo.

Por Tech AI Wire Team

3 min de leitura

XLinkedIn
Um Apple Mac Studio prateado sobre uma mesa de madeira ensolarada, ao lado de um monitor com linhas de código desfocadas, com teclado, mouse e plantas em vasos por perto.
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

O PyTorch 2.15, previsto para 28 de outubro de 2026, deixa os Macs com Apple Silicon muito mais rápidos ao rodar modelos de IA de mistura de especialistas (mixture-of-experts). A equipe de PyTorch do Hugging Face diz que a decodificação em um M3 Ultra fica cerca de 5 a 6,5 vezes mais rápida do que na 2.14. A versão também adiciona números FP8 nas GPUs da Apple e corrige problemas de memória e precisão que quebravam alguns modelos de imagem.

O que é o MPS e o que mudou

O MPS é o backend do PyTorch para as GPUs da Apple, a parte que roda o seu modelo no chip gráfico do Mac em vez de na CPU. O post do Hugging Face, escrito por Irakli Salia e Khushi Agrawal, lista o trabalho feito na 2.15. O objetivo declarado é “tornar o seu Mac um lugar de primeira classe para rodar e treinar modelos PyTorch”.

Boa parte da velocidade vem da migração de operações para kernels Metal escritos à mão. O Metal é a interface de baixo nível da Apple para gráficos e computação. Antes, muitas operações passavam pelo MPSGraph, o framework mais genérico da Apple, o que adicionava overhead.

A versão muda a forma como os modelos geram texto. Quando um modelo escreve um token por vez, o F.linear agora usa kernels feitos para uma única linha de entrada. Um novo F.grouped_mm nativo cuida das muitas pequenas multiplicações de matrizes de que os modelos de mistura de especialistas precisam. Esses modelos enviam cada token para algumas sub-redes especializadas, chamadas de especialistas.

Os números

Todos os números vêm do post do Hugging Face e foram medidos em hardware da Apple com torch.compile.

TestePyTorch 2.14PyTorch 2.15
Decodificação do Qwen3.6-35B-A3B, M3 Ultra9,4 tokens/s61,3 tokens/s
Decodificação do LFM2.5-8B-A1B, M3 Ultra23,6 tokens/s123,6 tokens/s
Softmax sobre uma linha de 128.256 tokens57 microssegundos7 microssegundos
Decodificação VAE de vídeo do Wan2.2, pico de memória do driver270,1 GiB8,1 GiB
Precisão do VAE do Qwen-Image-2.1 em relação à CPU10,06 dB29,95 dB

As camadas lineares tiveram um ganho menor: 1,23 vez mais rápidas em média em 96 formatos de camada BF16, com as camadas grandes ficando perto de 1x. A correção de precisão importa para ferramentas de imagem. O post diz que o encoder do Qwen-Image-2.1 gerava saída corrompida no ComfyUI na 2.14.

FP8 e outras novidades

FP8 é um formato numérico que armazena cada valor em um byte, metade do tamanho dos formatos comuns de 16 bits. O PyTorch 2.15 suporta tensores FP8 no MPS, e a multiplicação de matrizes escalonada F.scaled_mm funciona com eles.

Outras mudanças citadas no post:

  • Uma API de streams, torch.mps.Stream, para executar trabalho em paralelo na GPU.
  • Softmax, convolução, padding e dropout mais rápidos em kernels Metal dedicados.
  • Mais álgebra linear, incluindo fatoração LU complexa e inversão mais rápida de matrizes pequenas.
  • Novas operações como torch.frexp, torch.take e torch.heaviside.

Requisitos e data de lançamento

O PyTorch 2.15 exige macOS 15 ou posterior e Python 3.11 ou posterior em um Mac com Apple Silicon. O suporte ao Python 3.10 termina com esta versão. Os gerentes de release do PyTorch confirmaram que a 2.14 é a última versão com wheels para 3.10.

A branch de release foi criada em 5 de outubro, e a primeira release candidate saiu em 8 de outubro. A versão final está marcada para 28 de outubro. Você já pode testar a versão candidata em um ambiente separado com uv pip install torch==2.15.0 --index-url https://download.pytorch.org/whl/test/cpu.

O post também antecipa trabalhos voltados à 2.16, que podem mudar. A atenção para decodificação com grouped-query em um M5 Pro cai de 465 para 65 microssegundos nos primeiros testes.

O que isso significa para desenvolvedores

Para quem roda modelos abertos localmente em um Mac, a 2.15 traz grandes ganhos. Os modelos de mistura de especialistas são os que mais ganham nos testes do Hugging Face.

  • Teste a release candidate no seu próprio modelo. Instale-a em um ambiente separado e compare os tokens por segundo com a 2.14 antes de 28 de outubro.
  • Atualize primeiro o Python e o macOS. Builds em Python 3.10 ou macOS 14 não vão receber a 2.15. Planeje essa mudança agora.
  • Verifique de novo os pipelines de imagem. Se as saídas do Qwen-Image-2.1 ou do Wan2.2 pareciam erradas ou ficavam sem memória, a 2.15 mira exatamente esses bugs.
  • Experimente FP8 para economizar memória. Um byte por valor corta a memória pela metade em relação aos formatos de 16 bits. Confira a qualidade da saída na sua tarefa antes de trocar.
  • Compare backends entre diferentes hardwares. O esforço do PyTorch para tornar cada chip um dispositivo nativo também inclui o novo backend TorchNeuron do AWS Trainium. Código que permanece neutro em relação ao dispositivo pode migrar entre eles.

Fontes

  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

Artigos relacionados