Ein Erfahrungsbericht über Whisper, Core ML und jede Menge Aha-Momente
Inhaltsübersicht
- Warum ich eigentlich “nur schnell” eine Diktierlösung brauchte
- Whisper – ein Quantensprung in Open-Speech-AI
- Zwischenlösung: Whisper + PyTorch ≠ Mac-GPU
- Der große Umweg: CTranslate2, Metal und ein deplatzierter libiomp5
- Der Wendepunkt: whisper.cpp + Core ML
- Schritt-für-Schritt-Anleitung (kompakt)
- Modellgrößen, Genauigkeit & Geschwindigkeit
- Feintuning, Prompt-Engineering und Zukunftsblick
- Fazit: Was ich gelernt habe – und worauf du achten solltest
<a name=»warum-wollte-ich-das»></a>
1. Warum ich eigentlich “nur schnell” eine Diktierlösung brauchte
Vor genau einem Jahr wusste ich nicht, was ein Decoder Cross-Attention Layer ist. Mir reichte ein klassischer Diktier-Workflow: iPhone aufnehmen → Dropbox → Tippen.
Doch je länger die Audios wurden (Meetings, Podcast-Schnipsel, Schulungsvideos), desto lauter wurde der Wunsch nach automatischer Transkription – lokal, offline, privacy-freundlich, und möglichst schnell.
Cloud-Anbieter?
- ✔ Einfach, ❌ Dauerhaft teuer, ❌ Daten liegen auf fremden Servern.
Open-Source?
- ✔ Keine Kosten, ✔ volle Kontrolle, ❌ kompliziert (dachte ich).
Ende 2023 stolperte ich über OpenAI Whisper – ein neuronales Modell, das in einer Datei steckt und “alles kann”: diarize, übersetzen, multi-lingual, offline. Klingt magisch? Ist es auch – aber der Weg dahin war kurvig.
<a name=»whisper-überblick»></a>
2. Whisper – ein Quantensprung in Open-Speech-AI
Als OpenAI im September 2022 Whisper veröffentlichte, war das Echo enorm:
| Feature | Vor Whisper | Whisper |
|---|---|---|
| Multi-Lingual | Extra-Modelle je Sprache | 1 Modell für 99 Sprachen |
| Open-Source | Kaldi, ESPnet (komplex) | Plug-and-Play |
| Hardware | meist NVIDIA GPUs | CPU-fähig |
| Qualität (WER) | 10–25 % | < 5 % (base) |
Danach setzte ein Wettrennen ein:
→ WhisperX mit word-level timestamps,
→ Faster-Whisper (CTranslate2-Backend),
→ whisper.cpp (C++ + GGML, 2023),
→ Core-ML-Konverter von Apple (WWDC 23).
Jedes Projekt adressierte ein anderes Nadelöhr – Geschwindigkeit, RAM, GPU-Offload. Ich testete alles.
<a name=»pytorch-probleme»></a>
3. Zwischenlösung: Whisper + PyTorch ≠ Mac-GPU
Mein erster Prototyp war ein Flask-Server:
bashKopierenBearbeitenpip install openai-whisper flask soundfile
python app.py
Er lief – aber nur auf CPU.
PyTorchs MPS-Backend (Metal) hatte 2024 noch keine Sparse-Tensor-Operatoren → Ladefehler:
cppKopierenBearbeitenNotImplementedError: aten::_sparse_coo_tensor ...
Work-around: CUDA-GPU. Pech für meinen M-Mac.
Ich suchte also eine GPU-freie Beschleunigung.
<a name=»ctranslate2-odyssee»></a>
4. Der große Umweg: CTranslate2, Metal und ein deplatzierter libiomp5
Faster-Whisper & CTranslate2
- ✅ Schneller als PyTorch (INT8-Quantisierung)
- ✅ Metal-Backend seit 2024
- ❌ PyPI-Wheels ohne Metal
- ❌ Selbst-Build fragt nach Intel OpenMP (
libiomp5.dylib)
Lösungsidee:
brew install libomp+ Symlink → ging, aber nur nach stundenlangem CMake-Gefrickel.
Am Ende hatte ich zwar ein funktionierendes Metal-INT8-Binary, aber der Weg war absurd aufwendig.
<a name=»whispercpp-coreml»></a>
5. Der Wendepunkt: whisper.cpp + Core ML
Im Februar 2025 stieß ich auf whisper.cpp:
bashKopierenBearbeitengit clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
WHISPER_METAL=1 make -j8
Fertig! 2 MB-Binary, Core-ML-Kernels im Gepäck.
Ein Test:
bashKopierenBearbeiten./build/bin/whisper-cli \
-m models/ggml-tiny.bin \
-l de \
-f newrec.wav -otxt -of out
5 s Audio in 240 ms 🤯 (20× Echtzeit)
Damit war klar: CLI + Flask + whisper.cpp = mein Ziel-Setup.
<a name=»schritt-anleitung»></a>
6. Schritt-für-Schritt-Anleitung (kompakt)
bashKopierenBearbeiten# 1. Binaries bauen
git clone https://github.com/ggerganov/whisper.cpp && cd whisper.cpp
WHISPER_METAL=1 make -j$(sysctl -n hw.logicalcpu)
# 2. Modell laden
curl -L -o models/ggml-small.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
# 3. Test
build/bin/whisper-cli -m models/ggml-small.bin -l de -f test.wav -otxt -of out
cat out.txt
Integration in Flask: subprocess.run() mit whisper-cli, Ergebnis aus out.txt einlesen.
<a name=»modelle»></a>
7. Modellgrößen, Genauigkeit & Geschwindigkeit
| Modell | WER (de) | RAM | Zeit / min Audio (M4) |
|---|---|---|---|
| tiny | 11 % | 0.5 GB | 3 s |
| base | 8 % | 1 GB | 6 s |
| small | 6 % | 2 GB | 12 s |
| medium | 4 % | 5 GB | 30 s |
| large | 3 % | 8 GB | 80 s |
(gemessen mit whisper.cpp v1.7, Core-ML INT8)
<a name=»feintuning-und-ausblick»></a>
8. Feintuning, Prompt-Engineering und Zukunftsblick
| Technik | Aufwand | Gewinn |
|---|---|---|
| Beam Size 10 | +0 s | +0.5 WER |
| Prompt (“Vortrag über KI …”) | 0 s | bessere Terminologie |
| VAD + Segment-Merge | 1 h Skript | weniger “äh”, “hmm” |
| Custom Fine-Tune (100 h) | GPU‐Wochen | -1 WER |
Core-ML Roadmap: Apple arbeitet an inference compiling (WWDC 25?).
Dann könnten large-Modelle in Echtzeit auf der Neural-Engine laufen.
<a name=»fazit»></a>
9. Fazit: Was ich gelernt habe
- Open-Source ist ein Kaninchenbau, aber am Ende siegt die Flexibilität.
- whisper.cpp + Core ML ist derzeit der sweet spot für M-Macs.
- Es reicht, 2 Dateien zu deployen: Binary + Modell.
- “Spanische Dörfer” werden begehbar, sobald man sie ausprobiert statt nachliest.
- In einem Jahr kann man vom Transkript-Laien zum “Edge-AI-Ops-Engineer” wachsen – Learning by Doing.
TL;DR
- Wir haben einen Flask-Server gebaut, der Audio in Sekunden auf der Neural-Engine transkribiert.
- Von PyTorch-MPS-Frust ging es über CTranslate2-Umwege zu whisper.cpp-Euphorie.
- Modell wechseln? → einfach andere
ggml-*.bineinwerfen. - Feintuning? → meist nicht nötig; Prompt-Engineering reicht.
Heute nutze ich die Lösung täglich: Meeting-Aufnahmen, Podcast-Rohschnitte, sogar spontane Gedanken-Notizen.
Vor einem Jahr hatte ich keine Ahnung von CMake, Metal oder Beam-Search – jetzt läuft auf meinem MacBook Air eine Offline-Babel-Fisch-Maschine.
Und das Beste: Alles ist Open-Source – also: Klonen, bauen, staunen!