Implémentation optimisée de la reconnaissance vocale Whisper basée sur CTranslate2, 4 fois plus rapide et moins gourmande en mémoire que l'originale
Présentation Détaillée du Projet Faster-Whisper
Aperçu du Projet
Faster-Whisper est une réimplémentation du modèle OpenAI Whisper, utilisant CTranslate2 comme moteur d'inférence rapide. Par rapport à la version originale openai/whisper, il offre une accélération allant jusqu'à 4 fois tout en conservant la même précision et en réduisant l'empreinte mémoire. Grâce à la technique de quantification 8 bits, l'efficacité peut être encore améliorée sur les CPU et les GPU.
Caractéristiques Principales
🚀 Avantages en Termes de Performance
- Accélération : Jusqu'à 4 fois plus rapide que la version originale de Whisper
- Optimisation de la mémoire : Empreinte mémoire réduite
- Prise en charge de la quantification : Supporte la quantification 8 bits pour des performances accrues
- Traitement par lots : Prise en charge de la transcription par lots pour un débit amélioré
🛠️ Caractéristiques Techniques
- Basé sur le moteur d'inférence CTranslate2
- Prise en charge de l'exécution sur GPU et CPU
- Compatible avec les modèles Whisper originaux
- Supporte plusieurs modes de précision (FP16, FP32, INT8)
- Décodage audio intégré (sans FFmpeg requis)
Comparaison des Performances
Benchmark GPU (NVIDIA RTX 3070 Ti 8GB)
Comparaison des performances pour la transcription d'un audio de 13 minutes :
Implémentation | Précision | Beam Size | Temps | Consommation VRAM |
---|---|---|---|---|
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 |
Benchmark CPU (Intel Core i7-12700K)
Implémentation | Précision | Beam Size | Temps | Consommation Mémoire |
---|---|---|---|---|
openai/whisper | fp32 | 5 | 6m58s | 2335MB |
whisper.cpp | fp32 | 5 | 2m05s | 1049MB |
faster-whisper | fp32 | 5 | 2m37s | 2257MB |
faster-whisper | int8 | 5 | 1m42s | 1477MB |
Instructions d'Installation
Prérequis Système
- Python 3.9 ou version ultérieure
- L'exécution sur GPU nécessite la prise en charge des bibliothèques NVIDIA CUDA
Installation de Base
pip install faster-whisper
Installation avec Support GPU
Nécessite l'installation des bibliothèques NVIDIA :
- 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__))'`
Via Docker
# Utiliser l'image officielle NVIDIA CUDA
docker run --gpus all -it nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
Guide d'Utilisation
Transcription de Base
from faster_whisper import WhisperModel
model_size = "large-v3"
# Exécution GPU (FP16)
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# Ou exécution GPU (INT8)
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# Ou exécution CPU (INT8)
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", beam_size=5)
print("Langue détectée '%s', probabilité %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Transcription par Lots
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))
Horodatage au Niveau du Mot
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))
Détection d'Activité Vocale (VAD)
# Activer le filtre VAD
segments, _ = model.transcribe("audio.mp3", vad_filter=True)
# Paramètres VAD personnalisés
segments, _ = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500),
)
Prise en Charge de Distil-Whisper
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))
Conversion de Modèle
Conversion depuis 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
Chargement de Modèles Personnalisés
# Chargement depuis un répertoire local
model = WhisperModel("whisper-large-v3-ct2")
# Chargement depuis Hugging Face Hub
model = WhisperModel("username/whisper-large-v3-ct2")
Cas d'Utilisation
- Reconnaissance vocale (Speech-to-Text)
- Transcription en temps réel
- Génération de sous-titres
- Traduction multilingue
- Analyse vocale
- Indexation de contenu audio
Configuration et Optimisation
Configuration de la Journalisation
import logging
logging.basicConfig()
logging.getLogger("faster_whisper").setLevel(logging.DEBUG)
Conseils d'Optimisation des Performances
- Utiliser l'accélération GPU pour des performances optimales
- Choisir le mode de précision adapté à votre matériel
- Le traitement par lots pour augmenter le débit
- Activer le filtre VAD pour réduire le temps de traitement
- Définir de manière appropriée la taille du faisceau (beam size) et la taille du lot (batch size)
Configuration des Threads
# Définir le nombre de threads CPU
OMP_NUM_THREADS=4 python3 my_script.py
Architecture Technique
Composants Clés
- CTranslate2 : Moteur d'inférence rapide
- PyAV : Bibliothèque de décodage audio
- Silero VAD : Détection d'activité vocale
- Transformers : Support de conversion de modèle
Modèles Pris en Charge
- Série OpenAI Whisper (tiny, base, small, medium, large-v1/v2/v3)
- Série Distil-Whisper
- Modèles personnalisés affinés
Communauté et Support
- Dépôt GitHub : https://github.com/SYSTRAN/faster-whisper
- Paquet PyPI : https://pypi.org/project/faster-whisper/
- Modèles Hugging Face : https://huggingface.co/Systran
Conclusion
Faster-Whisper est une solution de reconnaissance vocale haute performance qui, grâce à l'optimisation de son moteur d'inférence, offre une accélération significative tout en maintenant la même précision que la version originale de Whisper. Ses fonctionnalités riches, son excellent support écosystémique et son API facile à utiliser en font un choix idéal pour les applications de reconnaissance vocale. Que ce soit pour les développeurs ou les chercheurs, Faster-Whisper permet de construire rapidement des applications de traitement vocal efficaces.