Eine optimierte Implementierung der Whisper-Spracherkennung basierend auf CTranslate2, 4x schneller und mit geringerem Speicherbedarf als das Original
Detaillierte Beschreibung des Faster-Whisper-Projekts
Projektübersicht
Faster-Whisper ist eine Neuimplementierung des OpenAI Whisper-Modells, die CTranslate2 als schnelle Inferenz-Engine nutzt. Im Vergleich zur Originalversion openai/whisper ist es bei gleicher Genauigkeit bis zu 4-mal schneller und verbraucht gleichzeitig weniger Speicher. Durch die 8-Bit-Quantisierungstechnologie kann die Effizienz auf CPUs und GPUs weiter gesteigert werden.
Kernfunktionen
🚀 Leistungsvorteile
- Geschwindigkeitssteigerung: Bis zu 4-mal schneller als das Original-Whisper
- Speicheroptimierung: Geringerer Speicherverbrauch
- Quantisierungsunterstützung: Unterstützt 8-Bit-Quantisierung zur weiteren Leistungssteigerung
- Stapelverarbeitung: Unterstützt Stapeltranskription zur Erhöhung des Durchsatzes
🛠️ Technische Merkmale
- Basiert auf der CTranslate2 Inferenz-Engine
- Unterstützt GPU- und CPU-Ausführung
- Kompatibel mit den Original-Whisper-Modellen
- Unterstützt verschiedene Präzisionsmodi (FP16, FP32, INT8)
- Integrierte Audio-Dekodierung (kein FFmpeg erforderlich)
Leistungsvergleich
GPU-Benchmark (NVIDIA RTX 3070 Ti 8GB)
Leistungsvergleich für die Transkription von 13 Minuten Audio:
Implementierung | Präzision | Beam Size | Zeit | GPU-Speicherverbrauch |
---|---|---|---|---|
openai/whisper | fp16 | 5 | 2m23s | 4708MB |
whisper.cpp (Flash Attention) | fp16 | 5 | 1m05s | 4127MB |
faster-whisper | fp16 | 5 | 1m47s | 3244MB |
faster-whisper | int8 | 5 | 1m33s | 2926MB |
CPU-Benchmark (Intel Core i7-12700K)
Implementierung | Präzision | Beam Size | Zeit | Speicherverbrauch |
---|---|---|---|---|
openai/whisper | fp32 | 5 | 6m58s | 2335MB |
whisper.cpp | fp32 | 5 | 2m05s | 1049MB |
faster-whisper | fp32 | 5 | 2m37s | 2257MB |
faster-whisper | int8 | 5 | 1m42s | 1477MB |
Installationsanleitung
Systemanforderungen
- Python 3.9 oder höher
- Für die GPU-Ausführung ist die Unterstützung der NVIDIA CUDA-Bibliotheken erforderlich.
Grundinstallation
pip install faster-whisper
GPU-Unterstützung Installation
NVIDIA-Bibliotheken müssen installiert werden:
- CUDA 12.x
- cuDNN 9.x
- cuBLAS
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.*
export LD_LIBRARY_PATH=`python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))'`
Docker-Methode
# Offizielles NVIDIA CUDA-Image verwenden
docker run --gpus all -it nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
Nutzungsleitfaden
Grundlegende Transkription
from faster_whisper import WhisperModel
model_size = "large-v3"
# GPU-Ausführung (FP16)
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# Oder GPU-Ausführung (INT8)
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# Oder CPU-Ausführung (INT8)
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", beam_size=5)
print("Erkannte Sprache '%s', Wahrscheinlichkeit %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Stapeltranskription
from faster_whisper import WhisperModel, BatchedInferencePipeline
model = WhisperModel("turbo", device="cuda", compute_type="float16")
batched_model = BatchedInferencePipeline(model=model)
segments, info = batched_model.transcribe("audio.mp3", batch_size=16)
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Wortgenaue Zeitstempel
segments, _ = model.transcribe("audio.mp3", word_timestamps=True)
for segment in segments:
for word in segment.words:
print("[%.2fs -> %.2fs] %s" % (word.start, word.end, word.word))
Spracherkennung (VAD)
# VAD-Filter aktivieren
segments, _ = model.transcribe("audio.mp3", vad_filter=True)
# Benutzerdefinierte VAD-Parameter
segments, _ = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500),
)
Distil-Whisper-Unterstützung
from faster_whisper import WhisperModel
model_size = "distil-large-v3"
model = WhisperModel(model_size, device="cuda", compute_type="float16")
segments, info = model.transcribe(
"audio.mp3",
beam_size=5,
language="en",
condition_on_previous_text=False
)
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Modellkonvertierung
Konvertierung von Transformers
pip install transformers[torch]>=4.23
ct2-transformers-converter \
--model openai/whisper-large-v3 \
--output_dir whisper-large-v3-ct2 \
--copy_files tokenizer.json preprocessor_config.json \
--quantization float16
Laden benutzerdefinierter Modelle
# Laden aus lokalem Verzeichnis
model = WhisperModel("whisper-large-v3-ct2")
# Laden vom Hugging Face Hub
model = WhisperModel("username/whisper-large-v3-ct2")
Anwendungsbereiche
- Spracherkennung (Sprache-zu-Text)
- Echtzeit-Transkription
- Untertitelgenerierung
- Mehrsprachige Übersetzung
- Sprachanalyse
- Audio-Inhaltsindizierung
Konfiguration und Optimierung
Logging-Konfiguration
import logging
logging.basicConfig()
logging.getLogger("faster_whisper").setLevel(logging.DEBUG)
Tipps zur Leistungsoptimierung
- GPU-Beschleunigung für optimale Leistung nutzen
- Passenden Präzisionsmodus je nach Hardware wählen
- Stapelverarbeitung zur Erhöhung des Durchsatzes
- VAD-Filter aktivieren, um die Verarbeitungszeit zu reduzieren
- Beam Size und Batch Size sinnvoll einstellen
Thread-Konfiguration
# CPU-Thread-Anzahl festlegen
OMP_NUM_THREADS=4 python3 my_script.py
Technische Architektur
Kernkomponenten
- CTranslate2: Schnelle Inferenz-Engine
- PyAV: Audio-Dekodierungsbibliothek
- Silero VAD: Spracherkennungs-Engine (Voice Activity Detection)
- Transformers: Modellkonvertierungsunterstützung
Unterstützte Modelle
- OpenAI Whisper-Reihe (tiny, base, small, medium, large-v1/v2/v3)
- Distil-Whisper-Reihe
- Benutzerdefinierte feinabgestimmte Modelle
Community und Support
- GitHub-Repository: https://github.com/SYSTRAN/faster-whisper
- PyPI-Paket: https://pypi.org/project/faster-whisper/
- Hugging Face-Modelle: https://huggingface.co/Systran
Zusammenfassung
Faster-Whisper ist eine leistungsstarke Spracherkennungslösung, die durch die Optimierung der Inferenz-Engine eine signifikante Geschwindigkeitssteigerung erreicht, bei gleichbleibender Genauigkeit im Vergleich zum Original-Whisper. Seine umfangreichen Funktionen, die gute Ökosystem-Unterstützung und die benutzerfreundliche API machen es zur idealen Wahl für Spracherkennungsanwendungen. Sowohl Entwickler als auch Forscher können mit Faster-Whisper schnell effiziente Sprachverarbeitungsanwendungen entwickeln.