Mistral – 🛠️ Déploiement & Ops
MLOps/LLMOps CI/CD · Monitoring (latence, coûts, hallucinations) · Scaling (multi-GPU, multi-nœud) · Edge/On-prem (quantization) · Fiabilité/SRE. Modales ultra-densifiées : schémas, tableaux, snippets, checklists.
CI/CD modèle & prompt Obs. p50/p95/p99 TP/PP & autoscaling SLO & rollback
Glossaire express
- LLMOps : pratiques Ops dédiées aux LLM (modèle+prompt+ctx).
- TP/PP/DP : Tensor/Pipeline/Data Parallel.
- ZeRO : sharding optim/grad/poids.
- HPA/KEDA : autoscaling K8s par métriques/custom.
- Canary/A-B : routage fractionné pour tests & promotion.
- Edge : exécution locale (latence/privacité).
- On-prem : infra privée (compliance, data locality).
- INT8/INT4 : quantization poids pour VRAM↓.
- Observabilité : métriques + logs + traces corrélées.
- SLO/SLA : objectifs/accords de service.
CI/CD Modèles & Prompts — registry, canary, promotion par métriques
Artefacts à versionner
- Poids modèle (id + sha) et quantizations (fp16/int8/int4).
- Prompts système & gabarits + stop sequences.
- Datasets & golden sets + scripts de build.
GitHub Actions (extrait)
on: [push]
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make build
- run: make test_offline # exact-match, groundedness
- run: make red_team
- run: make push_registryDéploiement (ArgoCD/Helm)
helm upgrade --install llm ./charts/llm \
--set image.tag= --set canary.weight=10Tableau de promotion
| Critère | Seuil | Action |
|---|---|---|
| Exact-match | ≥ baseline | OK |
| Factualité/groundedness | ≥ baseline | OK |
| p95 latence | ≤ SLA | OK |
| Coût / 1k tok | ≤ budget | OK |
| Tests rouges | ≤ FP/FN max | OK |
Anti-patterns
- Prompter en prod sans versionning & review.
- Aucun canary → risque de régression globale.
- Pas de rollback “1 clic” (ou auto) en cas d’écart SLO.
Tip : stocker un manifest par release (poids, prompts, hyperparams, seeds, datasets, métriques) pour la reproductibilité.
Monitoring — latence, coûts, hallucinations, refus
Métriques clés
| Métrique | Description | Objectif |
|---|---|---|
| latency p50/p95/p99 | ms/réponse | ≤ SLA |
| tokens/s | débit génération | ≥ cible |
| cost/1k tok | coût unitaire | ↘ continu |
| refusal_rate | refus justifiés | conforme policy |
| hallucination_rate | sorties non fondées | < seuil |
Export Prometheus
llm_latency_seconds_bucket{model="mistral",le="0.5"} 42
llm_tokens_total{type="out"} 123456
llm_cost_per_1k_tok{env="prod"} 0.0039
llm_refusal_total{policy="safety"} 12Traces OpenTelemetry
Span: chat.completions
attrs: model, temp, top_p, max_new_tokens
event: retrieval {k, sources, time_ms}
event: moderation {toxicity, pii, verdict}
event: cost {tok_in,tok_out,unit_cost}Alerting (extraits)
alert: LLM_p95_high
expr: histogram_quantile(0.95, rate(llm_latency_seconds_bucket[5m])) > 2
for: 10m
labels: {severity: "critical"}Anti-patterns
- Seuils statiques sans différencier heures/jours.
- Absence de corrélation traces ↔ logs ↔ métriques.
- Pas d’échantillonnage des sorties pour score hallucination.
Tip : journaliser IDs des passages RAG et afficher les citations au client pour monitorer la groundedness.
Scaling — TP/PP/DP, ZeRO, KV cache, batching
Choix de parallélisme
| Contrainte | Préférence | Notes |
|---|---|---|
| VRAM par GPU limitée | PP + ZeRO + checkpoint | Stages équilibrés |
| NVLink/IB rapide | TP | All-reduce efficace |
| Beaucoup de GPU | Hybride TP+PP | Load-balancing fin |
Batching & KV cache
- Batch dynamique + paged KV cache (vLLM/TGI-like).
- Limiter max_model_len & max_new_tokens.
- Fenêtre glissante si prompts très longs.
HPA/KEDA (extraits)
# Autoscaling sur QPS ou tokens/s
scaleTargetRef: {name: vllm}
metrics:
- type: Pods
pods:
metric:
name: tokens_per_second
target:
type: AverageValue
averageValue: "200"Anti-patterns
- TP sans interconnect rapide → bénéfice nul.
- PP mal équilibré → “bubbles” et p95 ↑.
- OOM tardifs par window context trop grande.
KPIs scaling
util_gpu ≥ 70% | p95 < SLA | cost/1k tok ↘
tokens/s ∝ batch_effectif / latence_stepTip : profiler “long-context” vs “short-burst” et ajuster batch, TP/PP, KV cache & quantization.
Edge / On-prem — latence, confidentialité, quantization
Options:
GPU local (fp16/bf16) | INT8 (VRAM↓ ×2) | INT4 (VRAM↓ ×3–4) | CPU (INT8) pour petits modèles
Tableau décision
| Contrainte | Solution | Note |
|---|---|---|
| Latence < 200 ms | GPU local + vLLM | batch modéré |
| VRAM limitée | INT8/INT4 | évaluer qualité post-quant |
| Pas d’Internet | On-prem air-gap | registries internes |
| CPU only | INT8 + kernels optim. | débit plus faible |
Snippets (d’installation rapide)
# vLLM local
python -m vllm.entrypoints.openai.api_server --model mistralai/Mistral-7B-Instruct \
--max-model-len 8192 --gpu-memory-utilization 0.92# Chargement 8-bit
model = AutoModelForCausalLM.from_pretrained(..., load_in_8bit=True)Gouvernance
- Data locality & chiffrement (repos/transit).
- Inventaire des modèles/poids/quantizations utilisés.
- Logs épurés de PII, TTL, purge automatisée.
Tip : garder un modèle de référence FP16 pour A/B local et rollback instantané.
Fiabilité & SRE — SLO/SLA, canary, rollback, chaos, runbooks
SLO/SLA (exemples)
| Indicateur | SLO | Action |
|---|---|---|
| p95 < 2s | Oui | TP/PP↑, batch, cache KV |
| 5xx < 0.5% | Oui | retry/backoff, circuit-breaker |
| Coût/1k tok | –5%/mois | INT8, RAG k↓ |
Runbook incident (pseudo)
on_alert(breach):
freeze_deployments()
route_to_canary(reference_model)
rollback_if_needed()
replay_samples()
postmortem_with_actions()Chaos tests
- Kill pod aléatoire, réseau lent, VRAM pressure.
- Fail d’un retriever (RAG) ou d’un outil externe.
- Overflow contexte (prompts très longs).
A/B router: v1 (réf 90%) | v2 (canary 10%) → promotion si métriques OK → 100%
Rollback automatique si p95↑, 5xx↑, groundedness↓
Tip : tracer seed, temp, top-p, stop sequences et IDs passages RAG pour rejouabilité exacte.
Coût & Gouvernance — budgets, quotas, tagging & optimisation
Formules utiles
cost ≈ (tok_in + tok_out) × unit_price + storage + egress
throughput ≈ (batch_eff × tok_out) / latence_stepBudgets/quotas
- Quota par clé/projet, rate-limit & taille requête.
- Tags coût (env, équipe, feature) sur pods & traces.
- Alertes journalières & mensuelles (dérives).
Optimisations
- INT8/4-bit selon tâche (qualité mesurée).
- RAG : réduire k, re-ranker, cache embeddings.
- Streaming & early-stop (max_new_tokens).
Dashboard (extraits métriques)
latency_p95 | tokens/s | cost/1k tok | refusal_rate | hallucination_rateAnti-patterns
- Pas de tag coût → chargeback impossible.
- Bench hors-domaine comme seule boussole.
- Pas de canary coûts (coûts explosent à la promo).
Tip : maintenir une “carte coût→feature” (k RAG, temp, top-p, max_new_tokens, format JSON strict) et automatiser des tests de coût en CI.
