Implementación optimizada de reconocimiento de voz Whisper basada en CTranslate2, 4 veces más rápida y con menor uso de memoria que la original.
Descripción detallada del proyecto Faster-Whisper
Resumen del proyecto
Faster-Whisper es una reimplementación del modelo Whisper de OpenAI que utiliza CTranslate2 como motor de inferencia rápida. En comparación con la versión original de openai/whisper, Faster-Whisper logra una velocidad hasta 4 veces mayor manteniendo la misma precisión, y con un menor consumo de memoria. Mediante la técnica de cuantificación de 8 bits, la eficiencia puede mejorarse aún más tanto en CPU como en GPU.
Características principales
🚀 Ventajas de rendimiento
- Aumento de velocidad: Hasta 4 veces más rápido que el Whisper original
- Optimización de memoria: Menor consumo de memoria
- Soporte de cuantificación: Soporte para cuantificación de 8 bits para un mayor rendimiento
- Procesamiento por lotes: Soporte para transcripción por lotes para aumentar el rendimiento
🛠️ Características técnicas
- Basado en el motor de inferencia CTranslate2
- Soporte para ejecución en GPU y CPU
- Compatible con los modelos originales de Whisper
- Soporte para múltiples modos de precisión (FP16, FP32, INT8)
- Decodificación de audio integrada (no requiere FFmpeg)
Comparación de rendimiento
Pruebas de rendimiento en GPU (NVIDIA RTX 3070 Ti 8GB)
Comparación de rendimiento al transcribir 13 minutos de audio:
Implementación | Precisión | Beam Size | Tiempo | Consumo de 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 |
Pruebas de rendimiento en CPU (Intel Core i7-12700K)
Implementación | Precisión | Beam Size | Tiempo | Consumo de RAM |
---|---|---|---|---|
openai/whisper | fp32 | 5 | 6m58s | 2335MB |
whisper.cpp | fp32 | 5 | 2m05s | 1049MB |
faster-whisper | fp32 | 5 | 2m37s | 2257MB |
faster-whisper | int8 | 5 | 1m42s | 1477MB |
Instrucciones de instalación
Requisitos del sistema
- Python 3.9 o superior
- La ejecución en GPU requiere soporte de las bibliotecas NVIDIA CUDA
Instalación básica
pip install faster-whisper
Instalación con soporte para GPU
Requiere la instalación de las bibliotecas 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__))'`
Método Docker
# Usar la imagen oficial de NVIDIA CUDA
docker run --gpus all -it nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
Guía de uso
Transcripción básica
from faster_whisper import WhisperModel
model_size = "large-v3"
# Ejecución en GPU (FP16)
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# O ejecución en GPU (INT8)
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# O ejecución en CPU (INT8)
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", beam_size=5)
print("Idioma detectado '%s', probabilidad %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Transcripción por lotes
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))
Marcas de tiempo a nivel de palabra
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))
Detección de actividad de voz (VAD)
# Habilitar el filtro VAD
segments, _ = model.transcribe("audio.mp3", vad_filter=True)
# Parámetros VAD personalizados
segments, _ = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500),
)
Soporte para 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))
Conversión de modelos
Conversión desde 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
Carga de modelos personalizados
# Carga desde un directorio local
model = WhisperModel("whisper-large-v3-ct2")
# Carga desde Hugging Face Hub
model = WhisperModel("username/whisper-large-v3-ct2")
Casos de uso
- Voz a texto
- Transcripción en tiempo real
- Generación de subtítulos
- Traducción multilingüe
- Análisis de voz
- Indexación de contenido de audio
Configuración y optimización
Configuración de registro
import logging
logging.basicConfig()
logging.getLogger("faster_whisper").setLevel(logging.DEBUG)
Sugerencias de optimización de rendimiento
- Usar aceleración por GPU para obtener el mejor rendimiento
- Seleccionar el modo de precisión adecuado según el hardware
- Procesamiento por lotes para aumentar el rendimiento
- Habilitar el filtro VAD para reducir el tiempo de procesamiento
- Configurar adecuadamente el tamaño del haz (beam size) y el tamaño del lote (batch size)
Configuración de hilos
# Establecer el número de hilos de la CPU
OMP_NUM_THREADS=4 python3 my_script.py
Arquitectura técnica
Componentes principales
- CTranslate2: Motor de inferencia rápida
- PyAV: Biblioteca de decodificación de audio
- Silero VAD: Detección de actividad de voz
- Transformers: Soporte para conversión de modelos
Modelos compatibles
- Serie OpenAI Whisper (tiny, base, small, medium, large-v1/v2/v3)
- Serie Distil-Whisper
- Modelos personalizados ajustados
Comunidad y soporte
- Repositorio GitHub: https://github.com/SYSTRAN/faster-whisper
- Paquete PyPI: https://pypi.org/project/faster-whisper/
- Modelos Hugging Face: https://huggingface.co/Systran
Conclusión
Faster-Whisper es una solución de reconocimiento de voz de alto rendimiento que logra una mejora significativa en la velocidad mediante la optimización del motor de inferencia, manteniendo la misma precisión que el Whisper original. Sus ricas características, buen soporte de ecosistema y API fácil de usar lo convierten en una opción ideal para aplicaciones de reconocimiento de voz. Tanto desarrolladores como investigadores pueden construir rápidamente aplicaciones eficientes de procesamiento de voz con Faster-Whisper.