Une application basée sur un LLM peut vite devenir un centre de coût imprévisible. Chaque appel a un prix, et la facture dépend directement du nombre de tokens, de la complexité du modèle et de la latence. Le FinOps pour les LLM n’est pas une option : c’est une discipline essentielle pour piloter ces coûts. En optimisant les prompts, en utilisant intelligemment le cache et en choisissant le bon modèle pour la bonne tâche, on peut construire une expérience utilisateur rapide et économiquement viable.
les leviers principaux de l’optimisation
La maîtrise des coûts et de la latence repose sur un ensemble de techniques complémentaires.
mesurer pour pouvoir piloter
On ne peut pas optimiser ce que l’on ne mesure pas. La première étape est de mettre en place une observabilité fine des appels au LLM.
- Coût par tâche et par utilisateur: Pour identifier les cas d’usage les plus coûteux et responsabiliser les équipes.
- Latence p95: La latence moyenne est trompeuse. La p95 (le 95ème percentile) vous donne une bien meilleure idée de l’expérience utilisateur réelle.
- Taux de cache hit: Un taux de cache élevé est le signe d’une optimisation réussie.
-- Suivre les coûts et l'efficacité du cache par route applicative
SELECT
route_name,
ROUND(SUM(total_cost_eur), 2) AS cout_total_7j,
APPROX_QUANTILES(duration_ms, 100)[OFFSET(95)] AS latence_p95_ms,
ROUND(100.0 * SUM(CASE WHEN is_cache_hit THEN 1 ELSE 0 END) / COUNT(*), 1) AS cache_hit_pct
FROM
llm.api_traces
WHERE
trace_timestamp >= CURRENT_DATE - INTERVAL '7 day'
GROUP BY 1
ORDER BY cout_total_7j DESC;
arbitrages dans le choix du modèle
Le modèle le plus gros et le plus puissant n’est pas toujours la meilleure solution. Une architecture intelligente est souvent plus performante et moins chère.
- Petit modèle + RAG > Gros modèle seul: Pour des questions factuelles, un petit modèle rapide auquel on fournit du contexte via RAG (Retrieval-Augmented Generation) sera souvent plus précis et 10x moins cher qu’un gros modèle généraliste.
- Chaînage de modèles (Chain-of-thought): Pour une tâche complexe, utilisez une chaîne de petits modèles spécialisés. Un premier modèle classifie l’intention, un second génère la réponse, un troisième vérifie la conformité.
hygiène opérationnelle
- Rotation des clés et quotas: Faites tourner vos clés d’API régulièrement et définissez des quotas stricts par utilisateur ou par projet pour éviter les abus.
- Timeouts: Configurez des timeouts agressifs. Mieux vaut une erreur rapide qu’une requête qui tourne pendant 30 secondes.
- Suppression des traces: Ne stockez les prompts et les réponses que le temps nécessaire à l’analyse, pour des raisons de coût et de confidentialité.
pièges frequents
-
Symptôme: La facture explose à cause du nombre de tokens.
- Cause: Prompts trop verbeux et réponses non contraintes.
- Correctif: Utiliser des gabarits de prompts (templates) très courts. Toujours spécifier une longueur maximale pour la réponse (
max_tokens).
-
Symptôme: L’application est lente car elle répète les mêmes appels au LLM.
- Cause: Pas de cache.
- Correctif: Mettre en place un cache simple (ex: Redis) avec une durée de vie courte (quelques minutes) pour les requêtes identiques et déterministes (température à 0).
-
Symptôme: Un seul gros modèle est utilisé pour toutes les tâches, ce qui le rend lent et cher.
- Cause: Manque de routage intelligent.
- Correctif: Mettre en place un routeur qui envoie les requêtes simples vers un petit modèle rapide et ne sollicite le gros modèle que lorsque c’est absolument nécessaire.
faq
-
Comment définir un budget réaliste ? Commencez par estimer le coût d’un millier de requêtes types pour votre cas d’usage. Extrapolez ensuite en fonction de votre trafic attendu. Mettez une alerte à 50% de ce budget, puis ajustez-le après la première semaine de production.
-
Le streaming de la réponse améliore-t-il vraiment la latence ? Il n’améliore pas la latence totale (le temps pour générer la réponse complète reste le même), mais il améliore drastiquement la latence perçue par l’utilisateur. Afficher les mots au fur et à mesure qu’ils sont générés donne une impression de réactivité immédiate.