Pourquoi auto-héberger Whisper on premise sur un VPS
Les bénéfices concrets de l'auto-hébergement
- Confidentialité totale : vos fichiers audio ne transitent jamais par un tiers
- Coût maîtrisé : une transcription de 60 min coûte quelques centimes de CPU, pas de facturation à la minute
- API privée exposée uniquement derrière votre reverse proxy, protégée par clé ou JWT
- Disponibilité 24/7 sans dépendance à la politique tarifaire d'OpenAI
- Choix du modèle selon vos contraintes RAM : de 1 Go (tiny) à 10 Go (large-v3)
- Conformité RGPD facilitée : traitement dans votre datacenter, pas chez un sous-traitant américain
Prérequis matériels et logiciels
Pour un déploiement CPU (modèle small ou base) : 2 vCPU, 4 Go RAM, 20 Go de disque. Pour le modèle medium : 8 Go RAM recommandés. Pour large-v3 avec GPU : 10 Go VRAM minimum (carte NVIDIA avec pilotes CUDA 12+). Côté logiciel, seuls Docker Engine 24+ et Docker Compose v2 sont nécessaires — aucun Python ni PyTorch à installer sur l'hôte.
Choisir son modèle Whisper : comparatif RAM, vitesse et précision
Modèles Whisper disponibles
Faites défiler le tableau
| Modèle | Paramètres | RAM requise | WER anglais | Vitesse (temps réel) |
|---|---|---|---|---|
| tiny | 39 M | ~1 Go | ~7,6 % | ~10× |
| base | 74 M | ~1 Go | ~5,0 % | ~7× |
| small | 244 M | ~2 Go | ~3,4 % | ~4× |
| medium | 769 M | ~5 Go | ~2,9 % | ~2× |
| large-v3 | 1 550 M | ~10 Go | ~2,4 % | ~1× |
| large-v3-turbo | 809 M | ~6 Go | ~2,5 % | ~5× |
Le modèle small est l'idéal compromis pour un VPS 4 Go sans GPU. large-v3-turbo offre une qualité proche de large-v3 à 5× la vitesse, pour un VPS 8 Go.
Whisper.cpp : l'alternative CPU-only sans CUDA
Si votre VPS ne dispose pas de GPU NVIDIA, Whisper.cpp (github.com/ggerganov/whisper.cpp) est l'alternative idéale. C'est un portage en C/C++ pur du modèle Whisper, qui tourne sur CPU sans Python, PyTorch ni CUDA. Il utilise les instructions SIMD AVX2 (x86) ou NEON (ARM) pour accélérer l'inférence. Sur un VPS 4 vCPU, le modèle small transcrit environ 3× plus vite que la version Python équivalente. L'image Docker officielle whisper.cpp est disponible et ne pèse que ~150 Mo contre ~2 Go pour l'image Python. C'est le choix recommandé pour les VPS entrée de gamme (2–4 Go RAM).
Déploiement Docker pas à pas (openai-whisper-asr-webservice v1.10.0)
Préparer le serveur
Installez Docker Engine et Docker Compose :
curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER. Ouvrez le port 9000 en local uniquement :ufw deny 9000/tcp(l'API sera accessible via reverse proxy).Créer le répertoire de travail
mkdir -p ~/whisper && cd ~/whisperRédiger le 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 # tiny | base | small | medium | large-v3 - ASR_ENGINE=faster_whisper - ASR_MODEL_PATH=/data/models volumes: - ./models:/data/models # Pour GPU : remplacez l'image par :latest-gpu et ajoutez : # deploy: # resources: # reservations: # devices: # - capabilities: [gpu]Choisir le modèle et lancer
Remplacez
ASR_MODEL=smallpar le modèle correspondant à votre RAM (voir tableau ci-dessus). Puis :docker compose up -d. Au premier démarrage, Whisper télécharge automatiquement les poids du modèle dans le volume./models(~250 Mo pour small, ~3 Go pour large-v3).Vérifier que l'API est opérationnelle
curl http://127.0.0.1:9000/docs # → interface Swagger ; ou tester une transcription : curl -F "[email protected]" http://127.0.0.1:9000/asr?encode=true&task=transcribe&language=frConfigurer le reverse proxy Nginx
location /whisper/ { proxy_pass http://127.0.0.1:9000/; proxy_set_header Authorization $http_authorization; # Bloquer l'accès sans clé API if ($http_x_api_key != "VOTRE_CLE_SECRETE") { return 403; } }Protéger l'API par clé secrète
N'exposez jamais l'API Whisper sans authentification (voir section sécurité). Générez une clé :
openssl rand -hex 32. Ajoutez-la dans votre proxy et dans vos clients.Tester une transcription via l'API sécurisée
curl -H "X-Api-Key: VOTRE_CLE_SECRETE" \ -F "[email protected]" \ https://votre-domaine.com/whisper/asr?task=transcribe&language=fr
Intégration réelle : brancher Whisper à n8n ou Nextcloud Talk
Une fois l'API opérationnelle, vous pouvez l'intégrer dans vos workflows existants. Dans n8n, ajoutez un nœud HTTP Request pointant sur https://votre-domaine.com/whisper/asr avec le header X-Api-Key et attachez votre fichier audio en multipart/form-data. La transcription retournée (JSON avec segments et timestamps) peut ensuite alimenter un nœud Notion, Google Sheets ou votre propre base de données. Pour Nextcloud Talk, le plugin talk_recording permet d'enregistrer les appels et d'envoyer automatiquement le fichier résultant à votre endpoint Whisper — la transcription revient dans le fil de discussion en quelques secondes.
Benchmarks CPU vs GPU sur VPS typique ServOrbit
Sur un VPS 4 vCPU / 8 Go RAM (moteur faster-whisper, modèle small) : une minute d'audio est transcrite en environ 18 secondes, soit un rapport temps réel de 3,3×. Sur un VPS 8 vCPU / 16 Go RAM avec le modèle medium : ~25 secondes par minute d'audio (2,4×). Avec un GPU NVIDIA RTX 4090 et large-v3 : ~4 secondes par minute d'audio (15×). Pour un usage batch (podcast, réunions quotidiennes), un VPS CPU 8 Go avec le modèle small offre le rapport performance/coût optimal. Pour de la transcription temps réel (< 5 s de latence), un VPS GPU avec large-v3-turbo est nécessaire.
Sécurité : ne jamais exposer l'API Whisper sans authentification
Règles de sécurité indispensables
- Liez le port Docker à 127.0.0.1 uniquement (
127.0.0.1:9000:9000) — jamais0.0.0.0:9000 - Protégez l'accès externe par une clé API dans le reverse proxy (header
X-Api-Key) - Ajoutez un rate-limit Nginx :
limit_req_zone $binary_remote_addr zone=whisper:10m rate=10r/mpour éviter les abus - Activez TLS sur votre domaine (Let's Encrypt) — ne transmettez jamais d'audio en clair sur le réseau
- Ne stockez pas les fichiers audio sur disque plus longtemps que nécessaire : configurez
--tmpfs /tmpdans Docker - Réservez l'endpoint à vos IPs internes si le service n'est accessible qu'en interne
Dépannage : erreurs fréquentes
Problèmes courants et solutions
- CUDA not found / RuntimeError: CUDA error : utilisez l'image
:latest(CPU) au lieu de:latest-gpu, ou vérifiez quenvidia-container-toolkitest installé et que les pilotes CUDA ≥ 12 sont présents (nvidia-smi). - Model not downloaded / FileNotFoundError : le volume
./modelsn'est pas monté correctement, ou le téléchargement initial a été interrompu. Supprimez le contenu de./modelset relancezdocker compose up -d— Whisper re-télécharge automatiquement. - OOMKilled / Out of memory : le modèle choisi dépasse la RAM disponible. Passez au modèle inférieur (
medium→small,small→base) ou augmentez la RAM de votre VPS. - 422 Unprocessable Entity sur /asr : le fichier audio doit être envoyé en
multipart/form-dataavec le champ nomméaudio_file. Vérifiez aussi queencode=trueest présent en query string pour les formats MP3/MP4.
Pour les VPS sans GPU, combinez Whisper.cpp (CPU-only, ~150 Mo d'image) avec le modèle small quantifié en 4 bits (-m models/ggml-small-q5_1.bin) : vous divisez la consommation RAM par ~2,5 tout en conservant une précision proche du modèle float16.
Déployer Whisper depuis la Marketplace ServOrbit
ServOrbit propose une application Whisper pré-configurée dans sa Marketplace IA. En un clic, votre VPS est prêt : Docker installé, image onerahmet/openai-whisper-asr-webservice:latest déployée, Nginx configuré avec TLS et clé API générée automatiquement. Vous choisissez le modèle (tiny à large-v3) lors de l'installation et bénéficiez des mises à jour one-click.