ADR-003: Selección de faster-whisper sobre whisper.cpp¶
Estado¶
Aceptada
Fecha¶
2024-06-01
Contexto¶
Para la transcripción de voz local, necesitábamos elegir una implementación del modelo Whisper de OpenAI que maximizara rendimiento en GPUs NVIDIA consumer (RTX 3060-4090).
Opciones evaluadas:¶
- OpenAI Whisper (original): Implementación de referencia en PyTorch
- whisper.cpp: Implementación en C++ puro con soporte CUDA
- faster-whisper: Implementación sobre CTranslate2 (C++/CUDA optimizado)
Requisitos:¶
- Latencia < 500ms para 5 segundos de audio (8x real-time mínimo)
- Soporte para modelos
large-v3y variantesdistil - Cuantización INT8/FP16 para optimizar VRAM
- API Python para integración con el backend
- Streaming/chunking de audio
Decisión¶
Adoptar faster-whisper como motor de transcripción principal.
Justificación:¶
| Criterio | Whisper (PyTorch) | whisper.cpp | faster-whisper |
|---|---|---|---|
| Velocidad | 1x (baseline) | 4x | 4-8x |
| VRAM (large-v3) | 10GB | 6GB | 4-5GB |
| Python API | ✅ Nativa | ❌ Bindings | ✅ Excelente |
| Cuantización | Limited | ✅ | ✅ INT8/FP16 |
| Mantenimiento | OpenAI | Comunidad | Activo (Systran) |
Consecuencias¶
Positivas¶
- ✅ 4-8x más rápido que Whisper original con misma precisión
- ✅ ~50% menos VRAM: Permite usar large-v3 en GPUs de 6GB
- ✅ API Pythonica: Integración natural con FastAPI async
- ✅ Soporte distil models:
distil-large-v3para latencia mínima
Negativas¶
- ⚠️ Dependencia adicional: CTranslate2 binario (~100MB)
- ⚠️ Menos portable: Requiere CUDA toolkit compatible
- ⚠️ Lag en nuevos modelos: Nuevos releases de OpenAI tardan ~2 semanas en estar disponibles
Alternativas Consideradas¶
whisper.cpp¶
- Rechazado: Bindings Python inmaduros, debugging más complejo.
OpenAI Whisper¶
- Rechazado: Demasiado lento para experiencia real-time sin hardware enterprise.
Whisper JAX¶
- Rechazado: Requiere TPU o configuración compleja de JAX en CUDA.