Benchmark do Whisper: Nvidia RTX 4090 vs M1 Pro com MLX
(owehrens.com)- Rodando o modelo Whisper large com o framework MLX para Apple Silicon, a comparação mede a diferença entre um notebook e uma GPU de alto desempenho na transcrição de um áudio de 10 minutos
- Nas condições padrão, o MacBook com M1 Pro levou 216 segundos e a RTX 4090 levou 186 segundos, com a RTX 4090 sendo cerca de 30 segundos, ou cerca de 16%, mais rápida
- Usando insanely-fast-whisper na RTX 4090, a transcrição com whisper-large-v3 caiu para 8 segundos, mostrando como otimizações de modelo e implementação podem mudar bastante a comparação de hardware
- A execução via MPS no macOS levou 4 minutos e 23 segundos, e o M2 Ultra com 76 núcleos de GPU e o M3 Max com 40 núcleos de GPU foram muito mais rápidos que o M1 e tiveram desempenho parecido entre si
- O aumento de consumo de energia foi de +242W no PC com RTX 4090 em relação ao estado ocioso e de +38W no MacBook com M1 Pro, e o resultado geral é uma comparação para ter noção do desempenho do MLX, não um benchmark preciso
Executando benchmark do Whisper com MLX
- A Apple lançou o framework MLX para Apple Silicon, e o Whisper foi usado no benchmark entre os exemplos fornecidos junto com ele
- Um novo arquivo foi adicionado ao repositório de benchmark existente do Whisper, e o mesmo arquivo de áudio foi transcrito com o modelo
whisper largejá baixado - O código de execução chama
transcribe(audio=audio_file, model='large')e mede o tempo total pela diferença entre os horários de início e término - O resultado retornado é uma lista de segmentos, e cada segmento inclui campos como
avg_logprob,compression_ratio,start,end,textetokens - Essa estrutura de resultado é igual à obtida ao executar o Python Whisper na RTX 4090
Resultados básicos: M1 Pro e RTX 4090
- No arquivo de áudio de 10 minutos, o tempo de execução com M1 Pro + MLX foi
0:03:36.296329, cerca de 216 segundos - No mesmo arquivo, o tempo com Nvidia RTX 4090 foi medido em
0:03:06.707770, cerca de 186 segundos - A RTX 4090 foi cerca de 30 segundos mais rápida que o M1 Pro, o que corresponde a aproximadamente 16% de vantagem
- Durante a medição, todos os núcleos gráficos do M1 Pro foram totalmente utilizados, e outros programas foram fechados, com elementos como o papel de parede da área de trabalho também desativados
- Porém, usando um modelo otimizado para Nvidia, o tempo de transcrição na RTX 4090 caiu para 8 segundos
Hardware de teste
-
MacBook
- MacBook M1 Pro de 14 polegadas, modelo de 2021
- 8 núcleos de CPU: 6 núcleos de desempenho e 2 núcleos de eficiência
- 32GB de RAM
- 16 núcleos de GPU
-
PC
- Intel Core i7-12700KF 8×3.60GHz
- RAM 2×32GB 3200MHz DDR4 Kingston FURY Beast
- SSD Kingston KC3000 PCIe 4.0 NVMe de 1000GB
- Leitura de 7000MB/s, gravação de 6000MB/s
- GeForce RTX 4090 24GB GDDR6X, Palit RTX 4090 GameRock OmniBlack
Como o insanely-fast-whisper mudou a comparação
- Em um comentário no Hacker News, apareceu o resultado de executar o mesmo arquivo de 10 minutos com insanely-fast-whisper e uma RTX 4090
- Com whisper-large-v3, a transcrição terminou em menos de 8 segundos, e incluindo o tempo de carregamento do modelo antes de começar a transcrição, foram 15 segundos
- Depois, ao executar diretamente o comando
insanely-fast-whisper --file-name audio.mp3 --flash True, a transcrição de 8 segundos também foi confirmada - O log de saída tinha avisos relacionados ao Flash Attention 2 e à movimentação para a GPU, mas a transcrição foi concluída e o
output.jsonfoi gerado - No macOS, foi possível executar com
--device mps --batch-size 4, e a transcrição do mesmo arquivo levou 0:04:23
Atualização sobre M2 Ultra e M3 Max
- Ivan executou o mesmo arquivo de áudio em um M2 Ultra com 76 núcleos de GPU e em um M3 Max com 40 núcleos de GPU
- Os dois sistemas foram muito mais rápidos que o M1 Pro, e tiveram velocidades parecidas entre si
- Os números de comparação não devem ser vistos como um benchmark 100% preciso, pois outros processos, tempo de carregamento, cold start e warm start podem influenciar o resultado
Consumo de energia e limitações da medição
- A diferença de consumo entre o estado ocioso e a execução na GPU foi medida com um plug Shelly
- No PC, a execução na RTX 4090 aumentou o consumo em +242W em relação ao estado ocioso
- No MacBook, a execução na GPU de 16 núcleos do M1 aumentou o consumo em +38W em relação ao estado ocioso
- A medição de energia também não deve ser tratada como um valor 100% exato, mas como uma referência para mostrar a direção geral
- No geral, o teste é menos uma medição científica e mais uma comparação aproximada para mostrar que nível de desempenho o framework MLX pode entregar
Contexto de uso real
- O objetivo do teste está ligado à operação do mecanismo de busca de podcasts podpodgogo.com
- Ele transcreve dezenas de milhares de episódios de podcast, torna possível fazer busca em texto completo e também realiza alguma mineração de dados
- Histórico de atualizações
- 11 de dezembro: adicionados os detalhes de hardware e testes extras sem carregamento do modelo
- 12 de dezembro: a RTX 4090 foi descrita como a placa gráfica de consumo mais rápida, e os números de M2/M3 foram atualizados
- 13 de dezembro: foi encontrado no Hacker News um comentário sobre Whisper otimizado para Nvidia
1 comentários
Opiniões do Hacker News
A menos que tenham rodado o Whisper de forma muito ineficiente na 4090, esse resultado parece suspeito
Tenho uma 3090 e um M1 Max de 32 GB; não testei o Whisper, mas a diferença de desempenho em inferência com Llama e Stable Diffusion foi enorme. Especialmente no Stable Diffusion, o SDXL levou cerca de 9 segundos na 3090 e cerca de 1 minuto e 10 segundos no M1 Max
As duas arquiteturas de modelo têm muito pouco em comum e, embora o Stable Diffusion use o codificador de texto pré-treinado do CLIP, isso também é bem diferente de um transformer encoder-decoder
Além disso, este texto trata do novo framework MLX da Apple, então é bem provável que ele não tenha sido usado nos testes com Llama ou Stable Diffusion
Não sei se isso é uma limitação de hardware ou falta de otimização da biblioteca MLX, mas não acho que simplesmente teriam ignorado um caso de uso tão evidente
Parece mais plausível que as convoluções usem maior precisão e um conjunto de tiles muito maior, exigindo trocas de contexto caras quando a transformação inteira não cabe na GPU
Por isso, é preciso ter muito cuidado com intuições sobre desempenho do Whisper se não for o mesmo software e o mesmo modelo
Mesmo que sejam os mesmos, o fato de se querer otimizações específicas por plataforma ainda limita bastante o sentido da comparação
Isso parece usar o repositório OpenAI Whisper
Para uma comparação adequada, seria preciso comparar faster-whisper ou insanely-fast-whisper na 4090 com o MLX
O faster-whisper roda sequencialmente, e o insanely-fast-whisper processa o áudio agrupando-o em trechos de 30 segundos
Uso Whisper em produção e, como acho que a qualidade fica melhor quando se inclui o texto do trecho anterior, uso o faster-whisper
Em linhas gerais, o faster-whisper costuma ser 4 a 5 vezes mais rápido que OpenAI/whisper, e o insanely-fast-whisper pode ser mais 3 a 4 vezes mais rápido que o faster-whisper
Os modelos aqui ainda parecem estar em fp16, não modelos quantizados, então parece haver margem para ficar ainda mais rápido
Atualização: vi que ainda não há suporte a inferência em CPU; seria interessante quando for adicionado
Também gostaria de ver uma comparação de velocidade com 5 configurado e, idealmente, esse parâmetro deveria ser exposto ao usuário
Como lido com áudio de qualidade muito ruim, a qualidade da transcrição é importante; portanto, comparações de velocidade sacrificando qualidade têm pouco valor para mim
O ponto central deste texto é que ele usa o recém-lançado Apple MLX e que o código usa otimizações específicas para Apple
https://news.ycombinator.com/item?id=38539153
Há implementações mais rápidas do Whisper
Atualização: já que caí na isca, baixei o arquivo de 10 minutos usado no texto e rodei com insanely-fast-whisper em uma 4090; a instalação levou só dois comandos
Com whisper-large-v3, a transcrição do arquivo terminou em menos de 8 segundos e, incluindo o tempo de carregamento do modelo antes do início da transcrição, foram 15 segundos
Esse tempo adicional, naturalmente, não depende da duração do áudio
Então a 4090 é 6 a 12 vezes mais rápida que o melhor desempenho da Apple
Se você já tem um PC gamer para instalar a placa, sai muito mais barato que um M2 Ultra; mesmo comprando um PC pronto novo com uma 4090, ainda fica mais barato
Isso não surpreende, mas vejo muito pensamento desejoso de pessoas com Macs topo de linha querendo acreditar que seu equipamento faz tudo bem
Os chips Apple M são muito impressionantes e a grande quantidade de RAM também é ótima, mas em machine learning de alto desempenho é difícil competir com a Nvidia
Se você tem um Mac, vai usar o desempenho desse Mac; se tem um PC gamer, vai usar o desempenho desse PC
Mesmo tendo os dois, no fim é provável que use a IA que roda no equipamento que você usa todos os dias
Fico curioso para saber como ficaria em comparação com o insanely-fast-whisper: https://github.com/Vaibhavs10/insanely-fast-whisper
Entendo que, sem usar otimizações, dá para fazer uma comparação 1:1, mas, se essas otimizações não tiverem sido portadas para MLX, ainda parece melhor usar uma 4090
Dei uma olhada recentemente no MLX e acho que ele certamente vai ganhar popularidade no Mac; quando houver bindings para Swift, provavelmente também no iOS: https://github.com/ml-explore/mlx/issues/15
Só que, por enquanto, problemas de compilação com C++20 talvez estejam atrapalhando
Qualquer que seja o hardware que vença em benchmarks, se for um modelo popular, geralmente aparece uma implementação CUDA extremamente otimizada à mão que atropela o resto
Há algumas exceções raras; por exemplo, graças ao esforço do PyTorch no torch.compile, o GPT-Fast na AMD funciona bem em certos casos de uso bem estreitos
No Apple Silicon não me vem à mente nenhuma exceção desse tipo
Acho que ele venceria facilmente os dois benchmarks do texto original, mas o tamanho do batch provavelmente teria de ser bem menor que 24
Pelos padrões atuais, Whisper a 3–4 vezes o tempo real é muito lento, então este benchmark poderia até ser vencido por uma CPU
Fico curioso se isso se aplica a outros modelos, ou se foi escolhido por causa das características seriais do Whisper e de suas operações com inteiros
Olhando https://github.com/ml-explore/mlx-examples/tree/main/stable_..., parece sugerir algo nessa direção
Na era dos 4 núcleos isso era aceitável, mas com contagens modernas de núcleos não faz sentido
A escalabilidade da memória nas GPUs é muito melhor, mesmo em modelos de consumo
Rodar o Whisper em um Mac M1 é fácil, mas, no estado padrão, ele não usa MLX
Gastei uma ou duas horas tentando descobrir o que instalar e configurar para fazê-lo usar MLX, e me deparei com erros obscuros de Python e Torch
No fim, desisti e aluguei uma VM com GPU; em poucos minutos consegui rodar o Whisper
Ele não usa MLX, mas usa Metal
Há muito debate sobre qual escolha é absolutamente a melhor para a tarefa X, mas gosto do fato de entregar esse nível de desempenho com um consumo de energia tão baixo
Em vez disso, usando este repositório derivado do Whisper, a maioria das GPUs transcreve até 1 hora de áudio em menos de 1 minuto: https://github.com/Vaibhavs10/insanely-fast-whisper
Mesmo usando ctranslate2 em um L4 com batch size tão baixo quanto 4, ele supera todos os benchmarks de lá, exceto o A100 com flash attention 2
É uma pena que o modo batch nunca tenha entrado de vez no faster-whisper; por causa disso, parece que as pessoas não conseguem experimentar o ctranslate2 com facilidade
Em repositórios como https://github.com/SYSTRAN/faster-whisper, dá para entender imediatamente por que é mais rápido que a implementação original, e outros também aceleram ao reduzir a precisão da quantização, mas pioram os resultados
Mas, neste caso, não está especialmente claro por que é mais rápido
Considerando que é muito mais rápido, fico ainda mais curioso
É particularmente interessante quando se pensa no Vision Pro da Apple
Poder rodar modelos com eficiência energética talvez não seja importante para todo mundo em um notebook, mas é uma grande vantagem em um headset que já consome bastante energia
Gostaria de pedir ajuda
Existe algum bom app ou fluxo de trabalho open source para transcrição e diarização de falantes?
Vi https://github.com/thomasmol/cog-whisper-diarization e https://about.transcribee.net/, mas ambos não funcionaram bem, com crashes e outros problemas
Divido o MP3 em pedaços que o Whisper consegue processar e depois envio cada um para a API transcrever
Até agora está funcionando como esperado, e bastam algumas linhas de código Python