Por qué autoalojar Whisper on premise en un VPS
Los beneficios concretos del autoalojamiento
- Confidencialidad total: sus archivos de audio nunca transitan por un tercero
- Coste controlado: transcribir 60 minutos cuesta unos céntimos de CPU, sin facturación por minuto
- API privada expuesta solo tras su reverse proxy, protegida por clave o JWT
- Disponibilidad 24/7 sin dependencia de la política de precios de OpenAI
- Elección del modelo según sus limitaciones de RAM: de 1 GB (tiny) a 10 GB (large-v3)
- Cumplimiento RGPD simplificado: procesamiento en su datacenter, no en un subprocesador estadounidense
Requisitos de hardware y software
Para un despliegue CPU (modelo small o base): 2 vCPUs, 4 GB RAM, 20 GB de disco. Para el modelo medium: 8 GB RAM recomendados. Para large-v3 con GPU: 10 GB VRAM mínimo (tarjeta NVIDIA con controladores CUDA 12+). En cuanto al software, solo se necesitan Docker Engine 24+ y Docker Compose v2 — sin Python ni PyTorch en el host.
Elegir el modelo Whisper: comparativa RAM, velocidad y precisión
Modelos Whisper disponibles
Desplace la tabla
| Modelo | Parámetros | RAM requerida | WER inglés | Velocidad (tiempo real) |
|---|---|---|---|---|
| tiny | 39 M | ~1 GB | ~7,6% | ~10× |
| base | 74 M | ~1 GB | ~5,0% | ~7× |
| small | 244 M | ~2 GB | ~3,4% | ~4× |
| medium | 769 M | ~5 GB | ~2,9% | ~2× |
| large-v3 | 1.550 M | ~10 GB | ~2,4% | ~1× |
| large-v3-turbo | 809 M | ~6 GB | ~2,5% | ~5× |
El modelo small es un excelente compromiso para un VPS de 4 GB sin GPU. large-v3-turbo ofrece una calidad cercana a large-v3 a 5× la velocidad, para un VPS de 8 GB.
Whisper.cpp: la alternativa CPU-only sin CUDA
Si su VPS no dispone de GPU NVIDIA, Whisper.cpp (github.com/ggerganov/whisper.cpp) es la alternativa ideal. Es un port en C/C++ puro del modelo Whisper que funciona en CPU sin Python, PyTorch ni CUDA. Utiliza instrucciones SIMD (AVX2 en x86, NEON en ARM) para acelerar la inferencia. En un VPS con 4 vCPUs, el modelo small transcribe notablemente más rápido gracias al motor de inferencia C\+\+ cuantizado de CTranslate2. La imagen Docker oficial de Whisper.cpp pesa solo ~150 MB frente a ~2 GB de la imagen Python. Es la opción recomendada para VPS de gama de entrada (2–4 GB RAM).
Despliegue paso a paso con Docker (openai-whisper-asr-webservice v1.10.0)
Preparar el servidor
Instale Docker Engine y Docker Compose:
curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER. Bloquee el puerto 9000 desde el exterior:ufw deny 9000/tcp.Crear el directorio de trabajo
mkdir -p ~/whisper && cd ~/whisperEscribir el docker-compose.yml
services: whisper: image: onerahmet/openai-whisper-asr-webservice:latest restart: unless-stopped ports: - "127.0.0.1:9000:9000" environment: - ASR_MODEL=small - ASR_ENGINE=faster_whisper - ASR_MODEL_PATH=/data/models volumes: - ./models:/data/modelsElegir el modelo e iniciar
Sustituya ASR_MODEL=small por el modelo correspondiente a su RAM (véase tabla). Luego:
docker compose up -d.Verificar que la API está operativa
curl http://127.0.0.1:9000/docs curl -F "[email protected]" http://127.0.0.1:9000/asr?encode=true&task=transcribe&language=esConfigurar el reverse proxy Nginx
Reenvíe /whisper/ hacia http://127.0.0.1:9000/ exigiendo el header X-Api-Key.
Proteger la API con clave secreta
Genere una clave:
openssl rand -hex 32. Añádala a su proxy y clientes.Probar una transcripción vía la API segura
curl -H "X-Api-Key: YOUR_SECRET_KEY" \ -F "[email protected]" \ https://su-dominio.com/whisper/asr?task=transcribe&language=es
Integración real: conectar Whisper a n8n o Nextcloud Talk
Una vez operativa la API, puede integrarla en sus flujos de trabajo existentes. En n8n, añada un nodo HTTP Request apuntando a https://su-dominio.com/whisper/asr con el header X-Api-Key y adjunte su archivo de audio como multipart/form-data. La transcripción devuelta (JSON con segmentos y marcas de tiempo) puede alimentar un nodo de Notion, Google Sheets o su propia base de datos. Para Nextcloud Talk, el plugin talk_recording permite grabar llamadas y enviar automáticamente el archivo a su endpoint Whisper — la transcripción vuelve al hilo de conversación en segundos.
Benchmarks CPU vs GPU en VPS típico de ServOrbit
En un VPS de 4 vCPU / 8 GB RAM (motor faster-whisper, modelo small): un minuto de audio se transcribe en aproximadamente 18 segundos (ratio 3,3× tiempo real). En un VPS de 8 vCPU / 16 GB con modelo medium: ~25 segundos por minuto de audio (2,4×). Con GPU NVIDIA RTX 4090 y large-v3: ~4 segundos por minuto (15×). Para procesamiento por lotes, un VPS CPU de 8 GB con modelo small ofrece la relación rendimiento/coste óptima. Para transcripción en tiempo real (< 5 s de latencia), se requiere un VPS GPU con large-v3-turbo.
Seguridad: nunca exponga la API Whisper sin autenticación
Reglas de seguridad indispensables
- Vincule el puerto Docker a 127.0.0.1 únicamente (
127.0.0.1:9000:9000) — nunca0.0.0.0:9000 - Proteja el acceso externo con una clave API en el reverse proxy (header
X-Api-Key) - Añada un rate-limit en Nginx para evitar abusos
- Active TLS en su dominio — nunca transmita audio en texto claro por la red
- No almacene archivos de audio en disco más tiempo del necesario
- Restrinja el endpoint a IPs internas si el servicio es solo de uso interno
Resolución de problemas: errores frecuentes
Problemas comunes y soluciones
- CUDA not found / RuntimeError: CUDA error: use la imagen
:latest(CPU) en lugar de:latest-gpu, o verifique quenvidia-container-toolkitesté instalado y los controladores CUDA 12+ presentes (nvidia-smi). - Modelo no descargado / FileNotFoundError: el volumen
./modelsno está montado correctamente o la descarga inicial fue interrumpida. Borre el contenido de./modelsy reiniciedocker compose up -d. - OOMKilled / Sin memoria: el modelo elegido supera la RAM disponible. Cambie a un modelo menor o aumente la RAM de su VPS.
- 422 Unprocessable Entity en /asr: el archivo debe enviarse como
multipart/form-datacon el campoaudio_fileyencode=trueen la query string para formatos MP3/MP4.
Para VPS sin GPU, combine Whisper.cpp (solo CPU, ~150 MB de imagen) con el modelo small cuantizado a 4 bits (-m models/ggml-small-q5_1.bin): divide el uso de RAM en ~2,5× manteniendo una precisión próxima al modelo float16.
Despliegue Whisper desde el Marketplace de ServOrbit
ServOrbit ofrece una aplicación Whisper preconfigurada en su Marketplace de IA. Con un clic, su VPS estará listo: Docker instalado, imagen onerahmet/openai-whisper-asr-webservice:latest desplegada, Nginx configurado con TLS y clave API generada automáticamente. Elija el modelo (de tiny a large-v3) durante la instalación y benefíciese de actualizaciones con un clic.