2 Punkte von GN⁺ 2023-12-14 | 1 Kommentare | Auf WhatsApp teilen
  • Mit dem MLX-Framework für Apple Silicon wurde das Whisper-large-Modell ausgeführt, um bei der Transkription von 10 Minuten Audio den Abstand zwischen einem Laptop und einer leistungsstarken GPU zu vergleichen
  • Unter Standardbedingungen benötigte das M1 Pro MacBook 216 Sekunden, die RTX 4090 186 Sekunden; die RTX 4090 war damit rund 30 Sekunden bzw. etwa 16 % schneller
  • Mit insanely-fast-whisper auf der RTX 4090 sank die Transkriptionszeit für whisper-large-v3 auf 8 Sekunden, was zeigt, dass Modell- und Implementierungsoptimierungen Hardwarevergleiche stark verändern können
  • Die Ausführung über macOS MPS dauerte 4 Minuten 23 Sekunden; M2 Ultra mit 76 GPU-Kernen und M3 Max mit 40 GPU-Kernen waren deutlich schneller als der M1 und lagen untereinander auf ähnlichem Niveau
  • Der zusätzliche Stromverbrauch gegenüber Leerlauf betrug beim RTX-4090-PC +242 W, beim M1 Pro MacBook +38 W; insgesamt handelt es sich nicht um einen präzisen Benchmark, sondern um einen Vergleich, der ein Gefühl für die MLX-Performance vermitteln soll

Whisper-Benchmark mit MLX ausführen

  • Apple hat MLX, ein Machine-Learning-Framework für Apple Silicon, veröffentlicht; unter den mitgelieferten Beispielen wurde Whisper für den Benchmark verwendet
  • Einem bestehenden Whisper-Benchmark-Repository wurde eine neue Datei hinzugefügt, und dieselbe Audiodatei wurde mit dem bereits heruntergeladenen Modell whisper large transkribiert
  • Der Ausführungscode ruft transcribe(audio=audio_file, model='large') auf und misst anschließend die Gesamtzeit anhand der Differenz zwischen Start- und Endzeit
  • Das zurückgegebene Ergebnis ist eine Liste von Segmenten; jedes Segment enthält Felder wie avg_logprob, compression_ratio, start, end, text und tokens
  • Diese Ergebnisstruktur ist identisch mit der bei der Ausführung von Python Whisper auf der RTX 4090

Basisergebnisse: M1 Pro und RTX 4090

  • Für eine 10-minütige Audiodatei betrug die Laufzeit von M1 Pro + MLX 0:03:36.296329, also etwa 216 Sekunden
  • Auf derselben Datei wurde für die Nvidia RTX 4090 eine Laufzeit von 0:03:06.707770, also etwa 186 Sekunden, gemessen
  • Die RTX 4090 war damit rund 30 Sekunden schneller als der M1 Pro, prozentual etwa 16 %
  • Während der Messung wurden alle Grafikkerne des M1 Pro vollständig ausgelastet; andere Programme wurden beendet und auch Elemente wie der Desktop-Hintergrund deaktiviert
  • Verwendet man jedoch ein für Nvidia optimiertes Modell, sinkt die Transkriptionszeit der RTX 4090 auf 8 Sekunden

Test-Hardware

  • MacBook

    • 14-Zoll-MacBook M1 Pro, Modelljahr 2021
    • 8 CPU-Kerne: 6 Performance-Kerne, 2 Effizienzkerne
    • 32 GB RAM
    • 16 GPU-Kerne
  • PC

    • Intel Core i7-12700KF 8×3,60 GHz
    • RAM 2×32 GB 3200 MHz DDR4 Kingston FURY Beast
    • Kingston KC3000 PCIe 4.0 NVMe 1000 GB SSD
    • Lesen 7000 MB/s, Schreiben 6000 MB/s
    • GeForce RTX 4090 24 GB GDDR6X, Palit RTX 4090 GameRock OmniBlack

Wie insanely-fast-whisper den Vergleich verändert

  • In einem Hacker-News-Kommentar wurde das Ergebnis derselben 10-Minuten-Datei mit insanely-fast-whisper und einer RTX 4090 genannt
  • Auf Basis von whisper-large-v3 war die Transkription in unter 8 Sekunden abgeschlossen; inklusive Modellladezeit vor Beginn der Transkription waren es 15 Sekunden
  • Auch ein später selbst ausgeführter Befehl insanely-fast-whisper --file-name audio.mp3 --flash True bestätigte eine Transkription in 8 Sekunden
  • In den Ausgabelogs gab es Warnungen zu Flash Attention 2 und zum Verschieben auf die GPU, die Transkription wurde jedoch abgeschlossen und output.json erzeugt
  • Unter macOS konnte es mit --device mps --batch-size 4 ausgeführt werden; die Transkription derselben Datei dauerte 0:04:23

Update zu M2 Ultra und M3 Max

  • Ivan führte dieselbe Audiodatei auf einem M2 Ultra mit 76 GPU-Kernen und einem M3 Max mit 40 GPU-Kernen aus
  • Beide Systeme erzielten deutlich schnellere Ergebnisse als der M1 Pro und lagen untereinander auf ähnlichem Niveau
  • Die Vergleichswerte sind schwer als zu 100 % exakter Benchmark zu betrachten; andere Prozesse, Ladezeiten sowie Cold Starts und Warm Starts können die Ergebnisse beeinflussen

Stromverbrauch und Messgrenzen

  • Die Differenz des Stromverbrauchs zwischen Leerlauf und GPU-Ausführung wurde mit einem Shelly-Stecker gemessen
  • Beim PC stieg der Verbrauch während der Ausführung auf der RTX 4090 gegenüber dem Leerlauf um +242 W
  • Beim MacBook stieg der Verbrauch während der Ausführung auf der 16-Core-GPU des M1 gegenüber dem Leerlauf um +38 W
  • Auch die Strommessung ist eher ein Richtwert zur Orientierung als ein zu 100 % exakter Messwert
  • Der gesamte Test ist weniger eine wissenschaftliche Messung als ein grober Vergleich, der zeigt, welche Performance das MLX-Framework ungefähr liefern kann

Hintergrund der praktischen Nutzung

  • Der Testzweck hängt mit dem Betrieb der Podcast-Suchmaschine podpodgogo.com zusammen
  • Zehntausende Podcast-Episoden werden transkribiert, volltextdurchsuchbar gemacht und teilweise auch für Data Mining genutzt
  • Update-Verlauf
      1. Dezember: Hardware-Spezifikationen und zusätzliche Tests ohne Modellladezeit ergänzt
      1. Dezember: RTX 4090 als schnellste Consumer-Grafikkarte eingeordnet und M2/M3-Werte aktualisiert
      1. Dezember: Auf Hacker News Kommentare zu Nvidia-optimiertem Whisper gefunden

1 Kommentare

 
GN⁺ 2023-12-14
Meinungen auf Hacker News
  • Wenn Whisper auf der 4090 nicht extrem ineffizient ausgeführt wurde, wirken diese Ergebnisse verdächtig
    Ich habe eine 3090 und einen M1 Max mit 32 GB; Whisper habe ich zwar nicht ausprobiert, aber bei der Inferenzleistung von Llama und Stable Diffusion waren die Unterschiede enorm. Besonders bei Stable Diffusion brauchte SDXL auf der 3090 etwa 9 Sekunden, auf dem M1 Max ungefähr 1 Minute 10 Sekunden

    • Hier werden Inferenzwerte eines latenten Diffusionsmodells wie SDXL herangezogen und auf die Inferenz eines Encoder-Decoder-Transformers wie Whisper verallgemeinert
      Die beiden Modellarchitekturen haben kaum Gemeinsamkeiten, und auch wenn Stable Diffusion den vortrainierten Text-Encoder von CLIP nutzt, unterscheidet sich selbst dieser deutlich von einem Encoder-Decoder-Transformer
    • Die Optimierung von Whisper auf Apple Silicon ist bereits weit fortgeschritten, und whisper.cpp ist ein gutes Beispiel dafür, wie diese Vorteile genutzt werden
      Außerdem geht es in diesem Artikel um Apples neues MLX-Framework, das in Llama- oder Stable-Diffusion-Tests vermutlich nicht verwendet wurde
    • Auch wenn die Dokumentation noch in einem frühen Stadium ist: Ein Blick in die MLX-Dokumentation zeigt, dass Convolutions, wie sie in GANs und besonders häufig in Stable Diffusion genutzt werden, in MLX kaum nennenswerte Verbesserungen sehen und in manchen Fällen sogar langsamer als auf der CPU zu sein scheinen
      Ob das an Hardwaregrenzen oder an fehlender Optimierung der MLX-Bibliothek liegt, weiß ich nicht, aber es wirkt unwahrscheinlich, dass ein so prominenter Use Case einfach ignoriert wurde
      Plausibler ist, dass Convolutions hohe Präzision und deutlich größere Tile-Sets verwenden, sodass teure Kontextwechsel nötig werden, wenn die gesamte Transformation nicht auf die GPU passt
    • Ich habe eine 4090 und einen M1 Max mit 64 GB; bei Llama 2 ist die 4090 deutlich überlegen
    • Nachdem ich Whisper viel genutzt habe, gab es Versionen, die bei gleicher Qualität weniger Speicher verbrauchten und um eine bis zwei Größenordnungen schneller waren, ohne dass ich den Grund vollständig verstehe
      Deshalb sollte man bei Intuitionen zur Whisper-Performance sehr vorsichtig sein, wenn es nicht dieselbe Software und dasselbe Modell sind
      Selbst wenn beides gleich ist, bleibt die Aussagekraft des Vergleichs begrenzt, weil man plattformspezifische Optimierungen haben möchte
  • Das scheint das OpenAI-Whisper-Repository zu verwenden
    Für einen sauberen Vergleich müsste man auf der 4090 faster-whisper oder insanely-fast-whisper mit MLX vergleichen
    faster-whisper läuft sequenziell, während insanely-fast-whisper das Audio in 30-Sekunden-Abschnitte bündelt und verarbeitet
    Ich nutze Whisper in Produktion und verwende faster-whisper, weil ich finde, dass die Qualität besser ist, wenn der Text des vorherigen Abschnitts einbezogen wird
    Grob gesagt ist faster-whisper normalerweise 4- bis 5-mal schneller als OpenAI/whisper, und insanely-fast-whisper kann wiederum 3- bis 4-mal schneller als faster-whisper sein

    • Ich frage mich, ob insanely-fast-whisper schnell genug ist, um auch auf der CPU Echtzeit-Transkription zu ermöglichen
      Die Modelle hier scheinen keine quantisierten Modelle zu sein, sondern weiterhin fp16, also dürfte noch Spielraum für mehr Geschwindigkeit bestehen
      Edit: Ich habe gesehen, dass CPU-Inferenz noch nicht unterstützt wird; wenn das hinzukommt, wäre es interessant
    • Ich frage mich, ob insanely-fast-whisper eine Beam Size von 5 oder 1 verwendet
      Ich würde auch gern den Geschwindigkeitsvergleich bei Einstellung 5 kennen, und idealerweise sollte dieser Parameter für Nutzer zugänglich gemacht werden
      Da ich mit Audio von sehr schlechter Klangqualität arbeite und die Transkriptionsqualität wichtig ist, sind Geschwindigkeitsvergleiche, die Qualität opfern, für mich nur begrenzt aussagekräftig
  • Der Kern dieses Artikels ist, dass er das neu veröffentlichte Apple MLX nutzt und der Code Apple-spezifische Optimierungen verwendet
    https://news.ycombinator.com/item?id=38539153

    • Es wurde auch nicht mit einer optimierten Nvidia-Implementierung verglichen
      Für Whisper gibt es schnellere Implementierungen
      Edit: Weil ich darauf hereingefallen bin, habe ich die im Artikel verwendete 10-Minuten-Datei heruntergeladen und sie auf einer 4090 mit insanely-fast-whisper laufen lassen; die Installation waren zwei Befehle
      Mit whisper-large-v3 war die Transkription der Datei in unter 8 Sekunden fertig, inklusive der Modell-Ladezeit vor Beginn der Transkription waren es 15 Sekunden
      Diese zusätzliche Zeit hängt natürlich nicht von der Audiolänge ab
      Damit ist die 4090 6- bis 12-mal schneller als Apples Spitzenleistung
      Wenn man bereits einen Gaming-PC hat, in den man sie einbauen kann, ist sie deutlich günstiger als ein M2 Ultra, und selbst wenn man einen fertigen PC mit 4090 neu kauft, ist es immer noch billiger
      Das ist nicht überraschend, aber man sieht viel Wunschdenken von Leuten mit High-End-Macs, die glauben wollen, ihre Geräte seien in allem gut
      Apples Chips der M-Serie sind sehr beeindruckend und viel RAM ist großartig, aber bei High-Performance-Machine-Learning ist es schwer, mit Nvidia zu konkurrieren
    • Ehrlich gesagt weiß ich nicht, warum mich das kümmern sollte
      Wenn man einen Mac hat, nutzt man die Leistung dieses Macs; wenn man einen Gaming-PC hat, nutzt man die Leistung dieses PCs
      Selbst wenn man beides hat, wird man am Ende wahrscheinlich die KI nutzen, die auf dem Gerät läuft, das man täglich verwendet
  • Ich frage mich, wie der Vergleich mit insanely-fast-whisper ausfallen würde: https://github.com/Vaibhavs10/insanely-fast-whisper
    Mir ist klar, dass ein 1:1-Vergleich möglich ist, wenn man keine Optimierungen nutzt; wenn diese Optimierungen aber nicht nach MLX portiert wurden, dürfte es weiterhin besser sein, eine 4090 zu verwenden.
    Ich habe mir MLX kürzlich angesehen, und auf dem Mac wird es sicher an Popularität gewinnen; sobald Swift-Bindings kommen, wohl auch auf iOS: https://github.com/ml-explore/mlx/issues/15
    Allerdings könnten derzeit noch C++20-Kompilierprobleme im Weg stehen.

    • Genau das ist Nvidias Stärke.
      Egal welche Hardware in Benchmarks gewinnt: Bei populären Modellen gibt es meist eine extrem von Hand optimierte CUDA-Implementierung, die alles andere übertrifft.
      Es gibt zwar seltene Ausnahmen, etwa dass GPT-Fast auf AMD dank der Arbeit, die PyTorch in torch.compile gesteckt hat, in bestimmten engen Use Cases gut läuft.
      Bei Apple Silicon fällt mir keine einzige solche Ausnahme ein.
    • Für einen sauberen Vergleich müsste man den insanely-fast-whisper-Code auf der 4090 laufen lassen.
      Ich vermute, dass er beide Benchmarks aus dem Original locker schlägt, aber die Batch-Größe müsste wohl deutlich kleiner als 24 gewählt werden.
      Nach heutigen Maßstäben ist Whisper mit 3–4× Echtzeit sehr langsam; diesen Benchmark könnte man sogar mit einer CPU schlagen.
    • Der Artikel wurde um Ergebnisse von insanely-fast aktualisiert.
  • Ich frage mich, ob das auch für andere Modelle gilt oder ob Whisper wegen seiner seriellen Eigenschaften und Integer-Operationen gezielt herausgegriffen wurde.
    https://github.com/ml-explore/mlx-examples/tree/main/stable_... deutet wohl in diese Richtung an.

    At the time of writing this comparison convolutions are still some of the least optimized operations in MLX.
    Der Kern scheint zu sein, dass man 64 GB oder mehr sehr schnellen RAM nutzen kann, der direkt an CPU/GPU angebunden ist, mit Vorteilen bei Latenz und gemeinsamem Zugriff.
    Wenn man sich das Power-Package dieser Systeme ansieht, sind die Zahlen definitiv beeindruckend.
    Man sollte allerdings auch berücksichtigen, dass ein M3-Max-System mit minimaler RAM-Konfiguration etwa doppelt so viel kostet wie eine 4090.

    • Dass der Speicher von Apple Silicon schnell ist, gilt im Vergleich zu Consumer-CPUs, die lange bei Dual-Channel-Speicher stehengeblieben sind.
      In der Ära von 4 Kernen war das in Ordnung, aber bei heutigen Kernzahlen ergibt das keinen Sinn mehr.
      Die Speicher-Skalierbarkeit von GPUs ist selbst im Consumer-Bereich deutlich besser.
  • Whisper auf einem Mac M1 auszuführen ist einfach, nutzt aber standardmäßig MLX nicht.
    Ich habe ein bis zwei Stunden damit verbracht herauszufinden, was man installieren und konfigurieren muss, damit MLX genutzt wird, und bekam unbekannte Python- und Torch-Fehler.
    Am Ende habe ich aufgegeben, eine VM mit GPU gemietet und konnte Whisper innerhalb weniger Minuten ausführen.

  • Es wird viele Diskussionen darüber geben, welche Wahl für Aufgabe X absolut am besten ist, aber mir gefällt, dass bei so niedrigem Stromverbrauch diese Leistung herauskommt.

  • Wenn man stattdessen dieses abgeleitete Whisper-Repository nutzt, wird auf den meisten GPUs selbst einstündiges Audio in unter einer Minute transkribiert: https://github.com/Vaibhavs10/insanely-fast-whisper

    • Gefühlt war ctranslate2 sogar schneller als insanely-fast-whisper.
      Selbst wenn man ctranslate2 auf einer L4 mit einer Batch-Größe von nur 4 laufen lässt, schlägt es alle dortigen Benchmarks, außer eine A100 mit Flash Attention 2.
      Schade, dass der Batch-Modus letztlich nicht in faster-whisper gelandet ist; dadurch probieren die Leute ctranslate2 offenbar nicht so leicht aus.
    • Ich würde gern genauer wissen, wie das möglich ist und ob es im Vergleich zum Original Qualitätsunterschiede gibt.
      Bei Repositories wie https://github.com/SYSTRAN/faster-whisper versteht man sofort, warum sie schneller sind als die ursprüngliche Implementierung; andere werden schneller, indem sie die Quantisierungspräzision senken, was aber die Ergebnisse verschlechtert.
      Bei diesem hier ist dagegen nicht besonders klar, warum es schneller ist.
      Angesichts des viel höheren Tempos macht mich das umso neugieriger.
  • Besonders interessant ist das mit Blick auf Apples Vision Pro.
    Modelle energieeffizient ausführen zu können, ist bei Laptops vielleicht nicht für alle wichtig, aber bei einem Headset, das ohnehin viel Strom verbraucht, ist es ein großer Vorteil.

  • Ich würde gern um Hilfe bitten.
    Gibt es eine gute Open-Source-App oder einen Workflow für Transkription und Sprechertrennung?
    Ich habe mir https://github.com/thomasmol/cog-whisper-diarization und https://about.transcribee.net/ angesehen, aber beide funktionierten nicht gut, stürzten etwa ab.

    • Ich habe mir eine eigene Lösung gebaut, die ziemlich einfach ist.
      Sie teilt MP3s in Stücke auf, die Whisper verarbeiten kann, und sendet sie dann einzeln zur Transkription an die API.
      Bisher funktioniert es wie erwartet, und es sind nur ein paar Zeilen Python-Code.