Vous exécutez des inférences 50 fois par jour. Une API cloud coûte 0,03 $ par 1K tokens. C’est gérable jusqu’à ce que votre utilisation augmente. LLM local sur votre matériel : coût par token nul, fonctionne hors ligne, reste privé. Mais c’est plus lent, nécessite une configuration, et votre ordinateur portable 8 Go ne peut pas exécuter Llama 2 70B efficacement.
La décision n’est pas « cloud ou local ». C’est : quel compromis a du sens pour votre charge de travail spécifique, votre budget et vos contraintes. Ce guide analyse les calculs réels — pas des comparaisons théoriques, mais des chiffres issus de l’exécution des deux en production.
Le Calcul du Coût Réel : Coûts des Tokens vs Infrastructure
Les API cloud facturent par token. Les modèles locaux facturent en infrastructure, électricité et temps de développeur.
Examinons deux scénarios avec des chiffres réels de mars 2025 :
| Métrique | GPT-4o (OpenAI) | Claude 3.5 Sonnet (Anthropic) | Llama 3.1 70B (Local) | Mistral 7B (Local) |
|---|---|---|---|---|
| Coût d’entrée par 1M tokens | 5,00 $ | 3,00 $ | 0,00 $ | 0,00 $ |
| Coût de sortie par 1M tokens | 15,00 $ | 15,00 $ | 0,00 $ | 0,00 $ |
| Configuration matérielle minimale requise | N/A (cloud) | N/A (cloud) | GPU avec 24 Go+ VRAM | GPU avec 8 Go+ VRAM |
| Coût matériel (amorti/mois)* | N/A | N/A | ~40-80 $ | ~30-60 $ |
| Latence d’inférence (moyenne) | 800-1200 ms | 600-900 ms | 2000-4000 ms | 1500-2500 ms |
*Les coûts matériels supposent un amortissement sur 3 ans pour un GPU milieu de gamme (RTX 4070 ~550 $, location cloud A100 ~10k $). Varie considérablement selon le modèle et la taille du lot.
Voici ce que cela signifie en pratique. Un système de production traitant 10 millions de tokens par mois :
- GPT-4o : ~1 800 $/mois coût des tokens + 0 $ matériel = 1 800 $
- Claude 3.5 Sonnet : ~1 080 $/mois coût des tokens + 0 $ matériel = 1 080 $
- Llama 3.1 70B (local) : ~0 $ coût des tokens + 60 $/mois matériel = 60 $
- Mistral 7B (local) : ~0 $ coût des tokens + 45 $/mois matériel = 45 $
L’option locale est moins chère. Pour la plupart des charges de travail inférieures à 100K tokens/mois, le cloud gagne sur le coût total (l’amortissement matériel domine toujours). Au-delà, le local devient économique en 3 à 6 mois.
Mais le coût n’est pas la seule variable. La vitesse compte.
Latence : Pourquoi le Cloud est Souvent Plus Rapide Malgré ce qu’on Pourrait Penser
Les LLM locaux devraient être plus rapides — l’inférence se fait sur votre matériel, pas de saut réseau. En pratique, ils sont plus lents. Pourquoi.
Les fournisseurs d’API cloud optimisent pour deux choses que vous n’avez pas : le traitement par lots et le matériel spécialisé. OpenAI et Anthropic traitent des milliers de requêtes simultanées sur des clusters A100. Ils ont optimisé chaque milliseconde de la pile d’inférence. Votre GPU local est une seule machine.
Comparaison de latence réelle (systèmes AlgoVesta, janvier 2025) :
- Claude 3.5 Sonnet (API) : réponse de 400 tokens = ~840 ms de bout en bout (réseau inclus)
- Mistral 7B (local, RTX 4070) : réponse de 400 tokens = ~1 800 ms
- Llama 3.1 8B (local, RTX 4070) : réponse de 400 tokens = ~1 200 ms
- Llama 3.1 70B (local, RTX 4090) : réponse de 400 tokens = ~3 200 ms
Les modèles locaux plus petits peuvent égaler la latence du cloud dans certains cas (Mistral 7B est proche). Les modèles locaux plus grands sont strictement plus lents. La latence réseau ajoute 100-300 ms aux appels cloud, mais l’inférence côté cloud est d’autant plus rapide.
Si votre cas d’utilisation nécessite des temps de réponse inférieurs à 1000 ms et que vous envisagez le local, prévoyez Mistral 7B ou plus petit. Tout ce qui est plus grand vous décevra.
Précision et Capacités : Quand les Modèles Locaux Sont à la Traîne
C’est la contrainte dont personne ne parle honnêtement. Les modèles locaux plus petits sacrifient la précision.
Données de benchmark de MMLU (raisonnement de bon sens dans 57 disciplines) :
- Claude 3.5 Sonnet : 88 % de précision
- GPT-4o : 86 % de précision
- Llama 3.1 70B : 83 % de précision
- Mistral 7B : 62 % de précision
- Phi-3.5-mini (3,8 Go) : 51 % de précision
Cet écart se creuse sur les tâches spécifiques au domaine (raisonnement médical, génération de code, extraction structurée). Les modèles locaux luttent également avec :
- Raisonnement sur long contexte : Llama 3.1 70B a une fenêtre de contexte de 8K contre 200K pour Claude. Important pour les systèmes RAG et le traitement de documents.
- Suivi d’instructions : Les modèles cloud ont un meilleur alignement. Les modèles locaux plus petits hallucinent des instructions qui n’existent pas.
- Support multilingue : GPT-4o et Claude gèrent plus de 50 langues. Llama 3.1 est entraîné sur plus de 30 langues mais les sorties sont moins fiables.
- Utilisation d’outils : Les modèles cloud appellent les fonctions de manière fiable. Les modèles locaux formatent mal les paramètres des fonctions.
Pour la classification, la synthèse et les questions-réponses simples, l’écart n’a pas d’importance. Pour tout ce qui nécessite du raisonnement, de la créativité ou une analyse complexe d’instructions, les modèles locaux perdent.
Confidentialité et Données : Le Vrai Gain du Local
Ce n’est pas théorique. C’est contractuel.
Utiliser des API cloud signifie que les données vont sur leurs serveurs. Même avec des clauses de « non-conservation », elles transitent par leur infrastructure. Le RGPD, la HIPAA et d’autres réglementations peuvent l’interdire. Vos accords clients aussi.
Les modèles locaux résolvent cela complètement. Les données ne quittent jamais votre matériel. Pas de logs, pas d’infrastructure cloud, pas d’exposition à des tiers.
Mais « local » a des nuances. Vous avez toujours besoin de :
- Poids du modèle : Téléchargés depuis HuggingFace ou un fournisseur. Ce téléchargement unique est enregistré.
- Sécurité matérielle : Votre serveur GPU doit être isolé physiquement/réseau. Un pare-feu mal configuré annule tout l’avantage de la confidentialité.
- Framework d’inférence : Des outils comme Ollama, vLLM ou le serveur d’inférence de Hugging Face ajoutent une autre couche. Vérifiez qu’ils ne mettent pas en cache ou n’enregistrent pas les sorties.
Pour les industries réglementées (finance, santé, juridique), le local est souvent obligatoire. Pour tout le reste, c’est une option si d’autres contraintes s’alignent.
Recommandations Spécifiques à la Charge de Travail : Où Chacun Gagne
Utilisez les API Cloud lorsque :
- La haute précision prime sur le coût. Raisonnement complexe, génération de code, tâches créatives. Claude 3.5 Sonnet est la meilleure option pour cette catégorie.
- La charge variable est imprévisible. Vous ne pouvez pas prédire le volume de tokens de mois en mois. Le cloud s’adapte automatiquement. Le local nécessite une sur-provisionnement pour gérer les pics.
- Le temps de réponse doit être inférieur à 1 seconde. Même Mistral 7B aura du mal. Le cloud gagne.
- La longueur du contexte est importante. Traitement de documents complets, conversations longues ou résultats de recherche. La fenêtre de contexte de 200K de Claude ou de 128K de GPT-4o bat les options locales.
- Vous voulez zéro surcharge d’infrastructure. Clé API + requête HTTP. C’est tout. Pas d’achat de GPU, pas de gestion de versions, pas de débogage CUDA.
Utilisez les LLM Locaux lorsque :
- La confidentialité est non négociable. Charges de travail HIPAA, données réglementées, données clients ne pouvant transiter par l’infrastructure cloud.
- Le volume de tokens est prévisible et élevé. 10M+ tokens/mois, charge constante. Le retour sur investissement matériel se fait en moins de 6 mois.
- La tâche est étroite et bien définie. Classification, extraction, synthèse. Les modèles plus petits (7B-13B) conviennent et sont suffisamment rapides.
- La variabilité de latence est plus importante que la vitesse absolue. L’inférence locale est plus cohérente que le cloud (pas de fluctuations de file d’attente). Utile pour les systèmes temps réel nécessitant des performances prévisibles.
- Vous disposez déjà d’une infrastructure GPU. L’amortissement des coûts irrécupérables change complètement l’équation.
Guide d’Implémentation : Construire une Pile Hybride
La configuration optimale pour la plupart des systèmes de production n’est ni purement cloud ni purement locale. C’est les deux.
Schéma d’Architecture : Routage par Charge de Travail
Routage des différentes tâches vers différents modèles en fonction des exigences :
class InferenceRouter:
def __init__(self):
self.cloud_client = Anthropic() # API Claude
self.local_model = LocalModel("mistral-7b") # Inférence locale
def process_request(self, task_type, input_text, metadata):
# Haute précision, raisonnement complexe → cloud
if task_type in ["code_generation", "analysis", "reasoning"]:
return self.cloud_inference(input_text)
# Sensible à la confidentialité → local
if metadata.get("is_regulated") or metadata.get("pii_present"):
return self.local_inference(input_text)
# Classification/extraction simple → local (moins cher, assez rapide)
if task_type in ["classification", "extraction"]:
return self.local_inference(input_text)
# Par défaut : optimisé pour le coût (utiliser local, basculer vers le cloud si la confiance est faible)
result = self.local_inference(input_text)
if result.get("confidence", 1.0) < 0.7:
return self.cloud_inference(input_text)
return result
def cloud_inference(self, text):
message = self.cloud_client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
messages=[{"role": "user", "content": text}]
)
return {"output": message.content[0].text, "source": "cloud"}
def local_inference(self, text):
output = self.local_model.generate(text, max_tokens=1024)
return {"output": output, "source": "local"}
Ce schéma gère les contraintes réelles : vous utilisez le local pour le travail courant et les économies, le cloud pour les tâches complexes et les garanties de précision.
Configuration de Suivi des Coûts
Sans mesure, vous ne saurez pas si l'approche hybride permet réellement d'économiser de l'argent. Mettez en place le suivi des coûts dès le premier jour :
import json
from datetime import datetime
class CostTracker:
def __init__(self, log_file="inference_costs.jsonl"):
self.log_file = log_file
self.cloud_costs = {"claude-3-5-sonnet": 0.003} # par 1K tokens
self.local_cost_per_hour = 0.05 # matériel amorti + électricité
def log_inference(self, source, input_tokens, output_tokens, latency_ms):
"""Enregistre chaque inférence pour l'analyse des coûts"""
if source == "cloud":
# Claude 3.5 Sonnet : 3 $/1M entrée, 15 $/1M sortie
cost = (input_tokens * 0.000003) + (output_tokens * 0.000015)
elif source == "local":
# Coût par ms de temps d'inférence (amorti)
cost = (latency_ms / 1000 / 3600) * self.local_cost_per_hour
else:
cost = 0
record = {
"timestamp": datetime.utcnow().isoformat(),
"source": source,
"input_tokens": input_tokens,
"output_tokens": output_tokens,
"latency_ms": latency_ms,
"cost_usd": round(cost, 6)
}
with open(self.log_file, "a") as f:
f.write(json.dumps(record) + "\n")
return cost
# Utilisation :
tracker = CostTracker()
tracker.log_inference("cloud", input_tokens=450, output_tokens=200, latency_ms=850)
tracker.log_inference("local", input_tokens=450, output_tokens=200, latency_ms=1800)
Exécutez ceci pendant un mois. Vous saurez exactement d'où proviennent vos économies.
Checklist d'Installation : Lancer les Modèles Locaux
Si le local vous semble adapté à votre charge de travail, voici ce que le déploiement implique réellement :
Vérification du Matériel
La taille du modèle détermine les exigences GPU :
| Modèle | Taille | VRAM Min | GPU Recommandé | Vitesse d'Inférence (contexte 4K) |
|---|---|---|---|---|
| Mistral 7B | 7B paramètres | 8 Go | RTX 4060 / A10 | 1500-2000 ms |
| Llama 2 13B | 13B paramètres | 16 Go | RTX 4070 / L40 | 2000-3000 ms |
| Llama 3.1 70B | 70B paramètres | 40 Go | A100 40 Go / RTX 6000 | 3000-5000 ms |
| Phi-3.5-mini | 3.8B paramètres | 4 Go | GPU portable / RTX 4050 | 800-1200 ms |
Installation Logicielle (avec vLLM)
vLLM est le framework d'inférence standard pour la production. Il est plus rapide que le chargement basé sur transformers et gère le batching automatiquement :
# Installer vLLM
pip install vllm
# Lancer un serveur de modèle
vllm serve mistralai/Mistral-7B-Instruct-v0.2 \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.8
# Dans un autre terminal, tester
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{ "model": "mistralai/Mistral-7B-Instruct-v0.2", "prompt": "Quel est 2+2 ?", "max_tokens": 100 }'
vLLM expose une API compatible OpenAI. Cela signifie que vous pouvez changer les points d'accès sans modifier le code de l'application — il suffit de pointer votre client vers localhost:8000 au lieu de api.openai.com.
Docker pour la Production
Ne lancez pas vLLM directement sur votre machine de production. Utilisez Docker pour l'isolation et la reproductibilité :
# Dockerfile pour le serveur d'inférence vLLM
FROM nvidia/cuda:12.1.0-devel-ubuntu22.04
RUN pip install vllm==0.4.1
CMD ["vllm", "serve", "mistralai/Mistral-7B-Instruct-v0.2", \
"--host", "0.0.0.0", "--port", "8000"]
Construire et lancer :
docker build -t local-llm .
docker run --gpus all -p 8000:8000 local-llm
Modes d'Échec Courants et Comment les Éviter
Apprendre des déploiements réels :
- Erreurs de mémoire insuffisante pendant l'inférence : Vous avez testé avec batch_size=1 mais la production fonctionne avec batch_size=8. Le GPU manque de VRAM en milieu de traitement par lots. Testez toujours avec les tailles de lots et les longueurs de contexte de production.
- Pics de latence dus au garbage collection : La mémoire GPU locale se remplit, déclenche le GC, l'inférence s'arrête. Réglez `gpu_memory_utilization` de vLLM sur 0.85-0.90, pas 0.95+.
- Dégradation des sorties du modèle au fil du temps : Certains modèles locaux ont des problèmes de qualité sur des séquences de tokens plus longues. Mesurez la qualité de sortie (via revue humaine ou métriques automatisées) à 1000 tokens, 4000 tokens et 8000 tokens. Connaissez les limites de votre modèle.
- Les coûts de basculement API sont plus élevés que prévu : Vous utilisez vLLM localement mais une API cloud à distance. Les formats de réponse diffèrent légèrement. De petites différences dans le formatage des invites s'accumulent. Créez une couche de normalisation dans votre code client.
- La latence de démarrage à froid tue les performances : La première inférence après redémarrage du serveur est 2-3 fois plus lente (chargement du modèle). Gardez le serveur chaud ou pré-chargez au démarrage.
Matrice de Décision : Que Faire Aujourd'hui
Arrêtez de théoriser. Répondez à ces trois questions :
1. Combien de tokens/mois traitez-vous ?
- Moins de 500K : Les API cloud sont moins chères. Utilisez Claude 3.5 Sonnet.
- 500K-5M : Zone d'équilibre. Dépend des besoins en précision et des contraintes de confidentialité.
- 5M+ : Les modèles locaux rentabilisent le matériel en moins de 6 mois. Implémentez un routage hybride.
2. La confidentialité des données est-elle une exigence ?
- Oui : Optez pour le local, sans débat. Le RGPD, la HIPAA et les contrats clients l'exigent souvent.
- Non : L'API cloud est plus simple. Évitez les surcharges d'infrastructure.
3. Quelle précision vous faut-il ?
- Classification/extraction : Les modèles locaux 7B conviennent. Utilisez Mistral 7B.
- Raisonnement/génération de code : Les modèles cloud sont nettement meilleurs. Utilisez Claude 3.5 Sonnet.
- Vous n'êtes pas sûr : Commencez par le cloud, mesurez la qualité, basculez vers le local si cela atteint les seuils.
Si vous traitez 2M+ tokens/mois et que la précision n'est pas critique, implémentez le routeur hybride de la section précédente dès aujourd'hui. Testez-le sur 10 % de votre charge de travail. Mesurez le coût par inférence sur les deux sources. Dans 30 jours, vous aurez des données pour prendre la décision réelle.