2 puntos por GN⁺ 2023-12-14 | 1 comentarios | Compartir por WhatsApp
  • 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 large ya 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, text y tokens
  • 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

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

    • Están tomando cifras de inferencia de un modelo de difusión latente como SDXL y generalizándolas a la inferencia de un transformer codificador-decodificador como Whisper.
      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.
    • La optimización de Whisper en Apple Silicon ya está bastante avanzada, y whisper.cpp es un buen ejemplo de que aprovecha bien esas ventajas.
      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.
    • Aunque la documentación aún es inicial, al ver la documentación de MLX parece que las convoluciones, muy usadas en GAN y especialmente en Stable Diffusion, casi no muestran mejoras significativas en MLX, e incluso en algunos casos parecen ser más lentas que en CPU.
      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.
    • Tengo una 4090 y una M1 Max de 64 GB, y en Llama 2 la 4090 es muy superior.
    • Después de usar mucho Whisper, he visto versiones que, con la misma calidad, usaban menos memoria y rendían uno o dos órdenes de magnitud mejor, y no entiendo del todo por qué.
      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.

    • Me pregunto si insanely-fast-whisper es lo bastante rápido como para transcribir en tiempo real incluso en CPU.
      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.
    • Me pregunto si insanely-fast-whisper usa beam size 5 o 1.
      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

    • Tampoco lo compararon con una implementación optimizada para Nvidia.
      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.
    • Sinceramente, no sé por qué debería importarnos.
      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

    • Justo ahí está la fortaleza de Nvidia
      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í
    • Para compararlo bien habría que correr el código de insanely-fast-whisper en una 4090
      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
    • El artículo ya fue actualizado con resultados de insanely-fast
  • 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

    At the time of writing this comparison convolutions are still some of the least optimized operations in MLX.
    La clave parece ser que puedes usar más de 64 GB de RAM muy rápida conectada directamente al CPU/GPU, con ventajas en latencia y acceso compartido
    Viendo el paquete de energía de estos sistemas, los números sí son impresionantes
    Pero también hay que considerar que un sistema M3 Max con la configuración mínima de RAM cuesta alrededor del doble que una 4090

    • Que la memoria de Apple Silicon sea rápida aplica cuando la comparas con CPUs de consumo que se quedaron mucho tiempo en memoria de 2 canales
      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

  • 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

    • Por sensación, ctranslate2 a veces me ha parecido más rápido que 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
    • Me gustaría entender en detalle cómo es posible esto y si hay alguna diferencia de calidad frente al original
      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

    • Armé mi propia solución y es bastante simple
      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