Benchmark de Whisper: Nvidia RTX 4090 vs M1 Pro con MLX
(owehrens.com)- Con el framework MLX para Apple Silicon se ejecutó el modelo Whisper large para comparar la diferencia entre una laptop y una GPU de alto rendimiento en la transcripción de 10 minutos de audio
- En las condiciones base, la MacBook con M1 Pro tardó 216 segundos y la RTX 4090 186 segundos, por lo que la RTX 4090 fue unos 30 segundos, aproximadamente un 16% más rápida
- Si se usa insanely-fast-whisper en la RTX 4090, la transcripción con whisper-large-v3 baja hasta 8 segundos, lo que muestra que la optimización del modelo y de la implementación puede cambiar mucho la comparación de hardware
- La ejecución con MPS en macOS tomó 4 minutos y 23 segundos, y el M2 Ultra de 76 núcleos GPU y el M3 Max de 40 núcleos GPU fueron mucho más rápidos que el M1, con velocidades parecidas entre sí
- El aumento de consumo eléctrico fue de +242W para la PC con RTX 4090 frente al reposo y de +38W para la MacBook con M1 Pro, y el resultado general no es un benchmark de precisión sino una comparación para darse una idea del rendimiento de MLX
Ejecutando el benchmark de Whisper con MLX
- Apple presentó MLX, un framework de machine learning para Apple Silicon, y Whisper se usó para el benchmark entre los ejemplos incluidos
- Se agregó un archivo nuevo al repositorio de benchmarks de Whisper ya existente y se transcribió el mismo archivo de audio con el modelo
whisper largeya descargado - El código de ejecución llama a
transcribe(audio=audio_file, model='large')y mide el tiempo total con la diferencia entre la hora de inicio y la de fin - El resultado devuelto es una lista de segmentos, y cada segmento incluye campos como
avg_logprob,compression_ratio,start,end,textytokens - Esta estructura de resultados es la misma que al ejecutar Python Whisper en una RTX 4090
Resultados base: M1 Pro y RTX 4090
- Para un archivo de audio de 10 minutos, el tiempo de ejecución de M1 Pro + MLX fue
0:03:36.296329, unos 216 segundos - En el mismo archivo, el tiempo de ejecución de Nvidia RTX 4090 fue
0:03:06.707770, unos 186 segundos - La RTX 4090 fue unos 30 segundos más rápida que el M1 Pro, lo que equivale a alrededor de un 16% de ventaja
- Durante la medición se usaron por completo todos los núcleos gráficos del M1 Pro, y se cerraron otros programas y se desactivaron elementos como el fondo del escritorio
- Aun así, si se usa un modelo optimizado para Nvidia, el tiempo de transcripción de la RTX 4090 puede bajar hasta 8 segundos
Hardware de prueba
-
MacBook
- MacBook M1 Pro de 14 pulgadas, modelo 2021
- 8 núcleos de CPU: 6 de rendimiento y 2 de eficiencia
- 32GB de RAM
- 16 núcleos 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
- Lectura de 7000MB/s, escritura de 6000MB/s
- GeForce RTX 4090 24GB GDDR6X, Palit RTX 4090 GameRock OmniBlack
Cómo insanely-fast-whisper cambió la comparación
- En los comentarios de Hacker News apareció un resultado ejecutando el mismo archivo de 10 minutos con insanely-fast-whisper y una RTX 4090
- Con whisper-large-v3, la transcripción terminó en menos de 8 segundos, y contando también el tiempo de carga del modelo antes de empezar a transcribir, fueron 15 segundos
- Después, al ejecutar directamente el comando
insanely-fast-whisper --file-name audio.mp3 --flash True, también se confirmó una transcripción de 8 segundos - En el log de salida hubo advertencias relacionadas con Flash Attention 2 y con el movimiento a la GPU, pero la transcripción se completó y se generó
output.json - En macOS se pudo ejecutar con
--device mps --batch-size 4, y la transcripción del mismo archivo tomó 0:04:23
Actualización con M2 Ultra y M3 Max
- Ivan ejecutó el mismo archivo de audio en un M2 Ultra con 76 núcleos GPU y en un M3 Max con 40 núcleos GPU
- Ambos sistemas dieron resultados mucho más rápidos que el M1 Pro, y entre ellos mostraron velocidades similares
- Las cifras comparativas no deben verse como un benchmark 100% exacto, ya que otros procesos, el tiempo de carga y los arranques en frío o en caliente pueden afectar los resultados
Consumo eléctrico y límites de la medición
- La diferencia de consumo entre estado inactivo y ejecución en GPU se midió con un enchufe Shelly
- La PC aumentó +242W frente al reposo al ejecutar en la RTX 4090
- La MacBook aumentó +38W frente al reposo al ejecutar en la GPU de 16 núcleos del M1
- La medición de energía tampoco debe tomarse como una cifra 100% exacta, sino más bien como un valor de referencia para mostrar la tendencia
- Toda la prueba, más que una medición científica, es una comparación aproximada para mostrar qué nivel de rendimiento puede ofrecer el framework MLX
Contexto de uso real
- El objetivo de la prueba está ligado a la operación del buscador de pódcasts podpodgogo.com
- Se transcriben decenas de miles de episodios de pódcast, se habilita la búsqueda de texto completo y también se realiza algo de minería de datos
- Historial de actualizaciones
- 11 de diciembre: se agregaron las especificaciones de hardware y pruebas adicionales sin carga del modelo
- 12 de diciembre: se aclaró que la RTX 4090 es la tarjeta gráfica de consumo más rápida y se actualizaron las cifras de M2/M3
- 13 de diciembre: se revisó en Hacker News un comentario sobre Whisper optimizado para Nvidia
1 comentarios
Opiniones de Hacker News
A menos que hayan ejecutado Whisper de forma muy ineficiente en la 4090, estos resultados se ven sospechosos.
Tengo una 3090 y una M1 Max de 32 GB, y aunque no he probado Whisper, la diferencia de rendimiento en inferencia entre Llama y Stable Diffusion fue enorme; en Stable Diffusion, sobre todo, SDXL tardaba unos 9 segundos en la 3090 y alrededor de 1 minuto 10 segundos en la M1 Max.
Las dos arquitecturas de modelo casi no tienen nada en común, y aunque Stable Diffusion usa el codificador de texto preentrenado de CLIP, eso también es bastante distinto de un transformer codificador-decodificador.
Además, este artículo trata del nuevo framework MLX de Apple, así que probablemente no se usó en las pruebas de Llama o Stable Diffusion.
No sé si es una limitación del hardware o falta de optimización en la biblioteca MLX, pero no parece probable que simplemente hayan ignorado un caso de uso tan destacado.
Suena más plausible que las convoluciones usen mayor precisión y un conjunto de tiles mucho más grande, lo que obliga a costosos cambios de contexto cuando toda la transformación no cabe en la GPU.
Así que, si no es exactamente el mismo software y el mismo modelo, hay que tener muchísimo cuidado con la intuición sobre el rendimiento de Whisper.
Incluso si lo fueran, el hecho de que se busquen optimizaciones específicas por plataforma hace que la comparación siga teniendo un valor limitado.
Parece que esto usa el repositorio OpenAI Whisper.
Para compararlo bien, habría que enfrentar faster-whisper o insanely-fast-whisper en una 4090 contra MLX.
faster-whisper se ejecuta de forma secuencial, e insanely-fast-whisper procesa el audio agrupándolo en segmentos de 30 segundos.
Uso Whisper en producción, y como me parece que la calidad mejora si se incluye el texto del segmento anterior, uso faster-whisper.
A grandes rasgos, faster-whisper suele ser entre 4 y 5 veces más rápido que OpenAI/whisper, e insanely-fast-whisper puede ser entre 3 y 4 veces más rápido que faster-whisper.
Aquí los modelos no parecen ser cuantizados, sino que siguen en fp16, así que da la impresión de que todavía hay margen para ir más rápido.
Edit: vi que todavía no soporta inferencia en CPU; sería interesante si lo agregan.
También me gustaría saber la comparación de velocidad con 5, e idealmente ese parámetro debería estar expuesto al usuario.
Trabajo con audio de muy mala calidad, así que la calidad de la transcripción es importante para mí; una comparación de velocidad sacrificando calidad no me dice mucho.
El punto clave de este artículo es que aprovecha el nuevo Apple MLX recién publicado y que el código usa optimizaciones específicas de Apple.
https://news.ycombinator.com/item?id=38539153
Hay implementaciones más rápidas de Whisper.
Edit: ya que caí en el clickbait, descargué el archivo de 10 minutos que usaron en el artículo y lo ejecuté en una 4090 con insanely-fast-whisper; instalarlo tomó solo dos comandos.
Con whisper-large-v3, la transcripción del archivo terminó en menos de 8 segundos, y fueron 15 segundos incluyendo el tiempo de carga del modelo antes de empezar la transcripción.
Ese tiempo adicional, por supuesto, no depende de la duración del audio.
Entonces la 4090 resulta ser entre 6 y 12 veces más rápida que lo mejor de Apple.
Si ya tienes una PC gamer para ponerle la tarjeta, sale mucho más barata que una M2 Ultra, e incluso comprando una PC armada nueva con una 4090 sigue siendo más barata.
No debería sorprender, pero se ve mucho pensamiento ilusorio de gente con Macs de gama alta que quiere creer que su equipo es bueno para todo.
Los chips Apple serie M son muy impresionantes y la gran cantidad de RAM también es excelente, pero en machine learning de alto rendimiento les cuesta competir con Nvidia.
Si tienes una Mac, vas a usar el rendimiento de esa Mac; si tienes una PC gamer, vas a usar el rendimiento de esa PC.
Incluso si tienes ambas, al final probablemente usarás la IA que corre en el equipo que usas todos los días.
Me da curiosidad cómo se compararía con insanely-fast-whisper: https://github.com/Vaibhavs10/insanely-fast-whisper
Entiendo que, si no usas optimizaciones, se puede hacer una comparación 1:1, pero si esa optimización no se ha porteado a MLX, igual parece mejor seguir usando una 4090
Revisé MLX recientemente y en Mac parece que definitivamente va a ganar popularidad; si sale un binding para Swift, también se ve prometedor en iOS: https://github.com/ml-explore/mlx/issues/15
Aunque por ahora quizá lo esté frenando un problema de compilación con C++20
Aunque algún hardware gane en benchmarks, si es un modelo popular normalmente termina teniendo una implementación CUDA muy optimizada a mano que aplasta al resto
Sí hay excepciones raras; por ejemplo, GPT-Fast en AMD funciona bien en ciertos casos de uso muy específicos gracias a que PyTorch le ha metido esfuerzo a torch.compile
En Apple Silicon no se me ocurre ni una sola excepción así
Probablemente le gane con facilidad a ambos benchmarks originales, aunque el tamaño de lote tendría que ser bastante menor que 24
Bajo los estándares actuales, que Whisper vaya a 3~4x tiempo real ya es muy lento, así que este benchmark incluso se puede superar con CPU
Me pregunto si esto aplica también a otros modelos, o si fue elegido por las características seriales de Whisper y por las operaciones enteras
https://github.com/ml-explore/mlx-examples/tree/main/stable_... parece insinuar algo en esa dirección
En la era de los 4 núcleos estaba bien, pero con el número de núcleos actual ya no tiene sentido
La escalabilidad de memoria en GPU es mucho mejor, incluso en hardware de consumo
Correr Whisper en una Mac M1 es fácil, pero en el estado base no usa MLX
Me tomó una o dos horas averiguar qué instalar y configurar para que usara MLX, y me salieron errores de Python y de Torch que no pude identificar
Al final me rendí y renté una VM con GPU; así pude correr Whisper en cuestión de minutos
No usa MLX, pero sí usa Metal
Se puede debatir mucho cuál es absolutamente la mejor opción para trabajo X, pero me gusta que logre este nivel de rendimiento con un consumo de energía tan bajo
En cambio, si usas este repositorio derivado de Whisper, en la mayoría de las GPU hasta un audio de 1 hora se transcribe en menos de 1 minuto: https://github.com/Vaibhavs10/insanely-fast-whisper
En una L4, incluso con ctranslate2 usando un tamaño de lote tan bajo como 4, le gana a todos esos benchmarks salvo al A100 con flash attention 2
Es una pena que faster-whisper nunca haya terminado de incorporar un modo batch, porque por eso parece que la gente no prueba ctranslate2 con facilidad
En repositorios como https://github.com/SYSTRAN/faster-whisper se entiende de inmediato por qué son más rápidos que la implementación original, y en otros casos también aceleran bajando la precisión de cuantización, pero empeoran el resultado
En este caso, en cambio, no queda particularmente claro por qué es más rápido
Y considerando que es muchísimo más rápido, me da todavía más curiosidad
Esto es especialmente interesante pensando en el Vision Pro de Apple
Poder ejecutar modelos con eficiencia energética quizá no le importe a todo el mundo en laptops, pero en un headset que ya consume bastante energía sí es una ventaja grande
Quisiera pedir ayuda
¿Hay alguna buena app o flujo de trabajo open source para transcripción y diarización de hablantes?
Vi https://github.com/thomasmol/cog-whisper-diarization y https://about.transcribee.net/, pero ambos funcionaron mal, con crashes y otros problemas
Divido el MP3 en fragmentos que Whisper pueda procesar, y luego los mando uno por uno al API para que haga la transcripción
Hasta ahora se ha comportado como esperaba, y basta con unas cuantas líneas de código Python