Whisper-Benchmark: Nvidia RTX 4090 vs. M1 Pro MLX
(owehrens.com)- 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 largetranskribiert - 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,textundtokens - 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 Truebestä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.jsonerzeugt - Unter macOS konnte es mit
--device mps --batch-size 4ausgefü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
-
- Dezember: Hardware-Spezifikationen und zusätzliche Tests ohne Modellladezeit ergänzt
-
- Dezember: RTX 4090 als schnellste Consumer-Grafikkarte eingeordnet und M2/M3-Werte aktualisiert
-
- Dezember: Auf Hacker News Kommentare zu Nvidia-optimiertem Whisper gefunden
-
1 Kommentare
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
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
Außerdem geht es in diesem Artikel um Apples neues MLX-Framework, das in Llama- oder Stable-Diffusion-Tests vermutlich nicht verwendet wurde
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
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
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 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
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
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.
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.
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.
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.
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.
Sie nutzt kein MLX, aber Metal.
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
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.
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.
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.