2 pontos por GN⁺ 2023-12-14 | 1 comentários | Compartilhar no WhatsApp
  • 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 large já 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, text e tokens
  • 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.json foi 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

 
GN⁺ 2023-12-14
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

    • Estão pegando números de inferência de modelos de difusão latente como o SDXL e generalizando para inferência de transformers encoder-decoder como o Whisper
      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
    • A otimização do Whisper no Apple Silicon já avançou bastante, e o whisper.cpp é um exemplo que aproveita bem essas vantagens
      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
    • Embora a documentação ainda seja inicial, olhando a documentação do MLX, as convoluções, muito usadas em GANs e especialmente no Stable Diffusion, quase não parecem ter ganhos significativos no MLX e, em alguns casos, até parecem ser mais lentas que na CPU
      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
    • Tenho uma 4090 e um M1 Max de 64 GB e, no Llama 2, a 4090 é muito superior
    • Depois de usar bastante o Whisper, vi versões que, com a mesma qualidade, usam menos memória e têm desempenho uma ou duas ordens de grandeza melhor, e não entendo totalmente o motivo
      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

    • Fico curioso se o insanely-fast-whisper é rápido o bastante para transcrição em tempo real até na CPU
      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
    • Fico curioso se o insanely-fast-whisper usa beam size 5 ou 1
      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

    • Também não foi comparado com uma implementação otimizada para Nvidia
      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
    • Sinceramente, não sei por que eu deveria me importar
      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

    • É exatamente aqui que está a força da Nvidia
      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
    • Para comparar direito, é preciso rodar o código do insanely-fast-whisper na 4090
      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
    • O post foi atualizado com resultados do insanely-fast
  • 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

    At the time of writing this comparison convolutions are still some of the least optimized operations in MLX.
    O ponto central parece ser o fato de poder usar 64 GB ou mais de RAM muito rápida diretamente conectada à CPU/GPU, com vantagens em latência e acesso compartilhado
    Olhando o pacote de energia desses sistemas, os números são realmente impressionantes
    Mas também é preciso considerar que o preço de um sistema M3 Max com a configuração mínima de RAM é cerca de 2 vezes o de uma 4090

    • Quando se diz que a memória do Apple Silicon é rápida, isso é em comparação com CPUs de consumo que ficaram presas por muito tempo à memória de 2 canais
      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

  • 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

    • Na prática, senti que o ctranslate2 às vezes era até mais rápido que o 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
    • Gostaria de saber em detalhes como isso é possível e se há diferença de qualidade em relação ao original
      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

    • Criei minha própria solução, e ela é bem simples
      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