AISubHub/Notícias de IA
Desenvolvedores

Análise aprofundada · Cerca de 8 min de leitura

PyTorch MPS: decodificação, correção e memória do driver precisam de medições separadas

A equipe de PyTorch da Hugging Face explica as mudanças de MPS na candidata 2.15, com evidências distintas para decodificação agrupada, armazenamento FP8, preenchimento e trabalho futuro de 2.16.

Publicado aqui
Data da fonte
Fonte verificada

Um artigo técnico de 20 de outubro, de colaboradores de PyTorch da Hugging Face, explica como kernels Metal dedicados alteram o trabalho do backend MPS no Apple silicon. Ele fornece uma forma de instalar a candidata a lançamento do PyTorch 2.15 e uma prévia separada de 2.16. Sua contribuição útil é um conjunto de gargalos e medições específicos, não uma aceleração que se aplique a toda carga de um Mac.

Ouça as notícias

Ouça este artigo ou continue ouvindo as notícias.

PyTorch MPS: decodificação, correção e memória do driver precisam de medições separadas

Preparando a leitura…

Voz do dispositivo

O navegador ou dispositivo processa a voz. O AISubHub não envia o texto a uma API de áudio. As vozes e a reprodução com a tela bloqueada variam conforme o dispositivo.

Ao continuar, uma frase curta pode se repetir.

Resumo

  • O ambiente documentado requer Apple silicon, macOS 15 ou posterior e Python 3.11 ou posterior. O artigo apresenta 2.15 como candidata a lançamento e separa o trabalho de 2.16 disponível nas versões nightly ou ainda em revisão.
  • Uma especialização de decodificação para multiplicação matricial agrupada entrega aproximadamente 1.3 vez a taxa de processamento nos experimentos mostrados em M3 Ultra com torch.compile. Um gráfico separado de softmax mede microssegundos de uma única operação, não a latência de uma resposta completa.
  • Em uma decodificação VAE de Wan2.2 com 28 blocos, o pico total de memória do driver relatado cai de 270.135 para 8.108 GiB, enquanto o pico reservado pelo alocador permanece em 8.070 GiB. São métricas de memória diferentes.

1. Comece pela versão e pela parte da execução que está mudando

Os autores se identificam como a equipe de PyTorch da Hugging Face, trabalhando no projeto de origem com mantenedores e colaboradores de PyTorch. A explicação se concentra em substituir determinados caminhos de MPSGraph por kernels Metal dedicados. É engenharia de backend: modelos podem se beneficiar sem que isso constitua novos lançamentos de modelos, e um kernel mais rápido não comprova respostas melhores. A configuração declarada requer um Mac com Apple silicon, macOS 15 ou posterior e Python 3.11 ou posterior.

O artigo convida expressamente os leitores a experimentar uma candidata 2.15 em um ambiente separado. Seções posteriores discutem mudanças de 2.16 que podem estar nas versões nightly ou ainda em revisão. A AISubHub não verificou de forma independente o estado de versões estáveis posteriores. Para uma comparação reproduzível, registre a compilação exata, o dispositivo, o dtype, a configuração do compilador e a carga antes de alternar entre essas seções. Caso contrário, é fácil confundir uma otimização futura com um recurso da versão testada.

2. A especialização de decodificação altera uma operação pequena e repetida

No pré-preenchimento, o modelo processa um bloco de entrada; na decodificação, processa repetidamente uma entrada pequena para o próximo token. O artigo conecta F.linear a kernels existentes de multiplicação matriz-vetor e à fusão de somas de bias quando aplicável. Em 96 formatos de camadas BF16, relata uma aceleração de média geométrica de 1.23 vez. As projeções pequenas ganham mais, enquanto camadas grandes já próximas do limite de largura de banda permanecem perto de uma vez. Trata-se de um conjunto de medições de camadas, não de uma média do modelo completo.

Na execução de misturas de especialistas, a multiplicação matricial agrupada nativa lê os deslocamentos dos grupos na GPU em vez de copiá-los para a CPU e percorrer cada grupo. O gráfico de especialização de decodificação usa um M3 Ultra com torch.compile: Qwen3.6-35B-A3B sobe de 38.7 para 51.7 tokens por segundo com contexto 512, e de 36.8 para 48.7 com contexto 2048. O artigo relata separadamente comparações maiores de versões completas com 2.14. Essas comparações, a comparação de kernel de aproximadamente 1.3 vez e as medições posteriores de 2.16 têm bases distintas; não devem ser combinadas nem multiplicadas.

3. Armazenamento FP8 e tempo de softmax respondem a perguntas diferentes

A adição de FP8 é o suporte a tensores torch.float8_e4m3fn, com um byte por valor, contra dois em FP16 ou BF16. F.scaled_mm oferece escalonamento por tensor e por linha. Isso pode reduzir o armazenamento ocupado por tensores compatíveis, mas não reduz pela metade a memória de uma aplicação inteira: outros tensores, buffers de trabalho e alocações do ambiente de execução continuam existindo. A quantização e o dtype de saída do exemplo também importam para o comportamento numérico. O artigo trata a multiplicação matricial FP8 nativa como base para trabalho futuro com shaders Metal; portanto, o suporte atual de armazenamento não equivale a uma alegação universal de velocidade de hardware.

O gráfico de softmax é outro experimento. Para uma linha de logits FP32 com vocabulário de 128,256 itens, mostra 57.4 microssegundos no MPSGraph e 7.1 no kernel Metal; o texto arredonda para 57 e 7. Um softmax aproximadamente oito vezes mais rápido pode encurtar uma etapa da amostragem de tokens, mas o restante do trabalho ainda determina o tempo total de geração. Análise da AISubHub: medir o caminho completo, além da operação cara, e preservar as unidades para que microssegundos por chamada não se tornem uma alegação sem fundamento sobre segundos por resposta.

4. O preenchimento revela memória fora do alocador de tensores

O exemplo de Wan2.2 é especificamente Wan-AI/Wan2.2-TI2V-5B-Diffusers, com 8,764 chamadas de preenchimento constante em uma decodificação VAE de 28 blocos. Migrar o preenchimento para Metal altera o pico total de memória do driver relatado de 270.135 para 8.108 GiB. Ainda assim, o pico reservado pelo alocador é 8.070 GiB nas duas configurações, e o pico de alocação atual de tensores muda apenas de 4.422 para 4.095 GiB. Uma métrica do alocador, sozinha, deixaria passar a maior parte desse problema específico. O resultado não significa que todos os modelos de vídeo agora precisem de apenas oito GiB.

A correção é um benefício separado. Em um percurso de codificação e decodificação do VAE de Qwen-Image-2.1, os autores relatam que a concordância com a referência de CPU melhora de 10.06 para 29.95 dB de PSNR após a correção do preenchimento. Isso diz respeito ao fluxo de reconstrução testado, não a uma pontuação geral de qualidade de geração de imagens. Outras mudanças listadas incluem álgebra linear com valores complexos, caminhos de cálculo reverso e broadcasting de atenção. Assim, uma verificação útil de atualização inclui saídas numéricas e pico de memória do driver junto com a taxa de processamento, usando o mesmo modelo e os mesmos formatos de operação.

5. Mantenha visíveis o trabalho futuro e a validação local

A prévia de 2.16 inclui mudanças no envio de buffers de comandos, atenção executada inteiramente em Metal e mais migrações de MPSGraph. Os autores alertam que parte do trabalho está em revisão. Seus exemplos futuros de atenção também usam um M5 Pro e dimensões específicas de cabeça, ao contrário do gráfico de decodificação no M3 Ultra. Nem esses números nem a redução do tamanho de uma biblioteca incluída devem ser apresentados como benefício medido de instalar a candidata 2.15 em qualquer Mac.

Streams públicos de MPS e suporte ao registro de streams de tensores dão mais controle de agendamento a quem chama pela API Python, mas o exemplo ainda sincroniza antes de ler o resultado. O artigo também lista limites de operações restantes e trabalho em andamento para remover quebras do grafo de compilação. A interpretação prática da AISubHub é testar um ambiente separado com os dtype, formatos, sincronização e tolerâncias de saída reais da aplicação. Lemos o artigo completo e seus três gráficos; não instalamos PyTorch, executamos os exemplos, inspecionamos os pull requests vinculados ou reproduzimos resultados de tempo, qualidade ou memória.

Por que importa

Análise da AISubHub: atualizações de backend devem ser avaliadas com registros separados da taxa de decodificação completa, tempo de operações, correção das saídas e picos de memória do driver. Isso permite identificar qual mudança relatada corresponde a um gargalo real da aplicação sem transformar um resultado de kernel em uma alegação universal sobre modelos.

Limites e disponibilidade

Todas as medições são atribuídas aos colaboradores de PyTorch da Hugging Face e às configurações que declararam. O artigo descreve uma candidata 2.15 e distingue o trabalho de 2.16; a disponibilidade estável posterior não foi verificada de forma independente. A AISubHub não instalou nem executou o software, reproduziu benchmarks ou inspecionou as implementações vinculadas. Não decorre daí garantia universal de velocidade, ajuste à memória ou qualidade numérica.

Fontes e evidências

Hugging Face PyTorch team: MPS in PyTorch 2.15

Data da fonte: · Fonte verificada:

Conteúdo editorial com apoio de IA, verificado em fontes primárias. Alegações dos fornecedores são atribuídas; inclusão não é recomendação.