Performances

Chaque chiffre de cette page provient d’une campagne de qualification identifiée, avec son matériel, son protocole et ses limites. Rien n’est extrapolé.

Le profil Compact a été qualifié fonctionnellement sur un poste CPU sans GPU : la pile complète fonctionne, hors ligne, avec un reranker réel. Les latences mesurées démontrent l’intégration ; elles ne constituent pas un niveau de service.

Résultats clés

Profil Compact, pile complète de bout en bout (du clic à la réponse citée), corpus synthétique publié de 8 documents et 10 questions.

Profil Compact sur CPU — qualifié fonctionnellement

Testé

Poste x86_64, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU. Révision RC2, campagne du 9 novembre 2026.

51sRéponse complète, profil Compact CPU27,8 – 71,3 s
10sPremier token côté client, profil Compact CPU3,9 – 17,9 s
21,5tokens/sDébit de génération, profil Compact CPU15,8 – 52,0 tokens/s
9,5sReranking par question, profil Compact CPU8,9 s (campagne d’intégration) – max 18,2 s
7,8GoMémoire au pic, profil Compact CPUreranker jusqu’à 5,7 Go ; Ollama ≈ 3 Go ; en régime stable (RC2) : TEI 3,5 Go, Ollama 3,0 Go

Verdict interne : GO avec réserves. Les 71 étapes de bout en bout ont réussi (installation à froid, reranking réel, hors-ligne vérifié, résilience, sauvegarde et restauration). Les réserves portent sur la latence (28 à 71 s par réponse) et sur la qualité du modèle de 1,5 milliard de paramètres, qui n’est pas revendiquée.

Profils GPU : non qualifiés

À qualifier

Aucun profil GPU n’est qualifié à ce jour. Le profil Compact 8 Go (même modèle de 1,5 milliard de paramètres) et le profil 12 Go (modèle de 7 milliards) sont décrits dans les dépôts, mais aucune performance GPU n’est publiée tant qu’une qualification n’a pas été menée sur un hôte dédié avec les images officielles.

Constat utile pour préparer un poste GPU : l’image Ollama livrée (0.30.8) ne fonctionne pas avec un pilote NVIDIA 535 ; elle exige un pilote NVIDIA 550 ou plus récent.

Dans tous les profils actuels, le reranking s’exécute sur CPU : un GPU accélérerait la génération, pas nécessairement l’ensemble de la chaîne de réponse.

Méthodologie

  • Pile complète déployée selon la documentation Compact (9 services), modèles approvisionnés puis exécution hors ligne.
  • Corpus : les 8 fichiers synthétiques publiés dans compact/fixtures/corpus (TXT, Markdown, PDF texte de 14 pages, DOCX) et 10 questions avec sources attendues.
  • Script public compact/scripts/e2e_qualification.py : import, attente de l’indexation, questions en mode agrégé puis en flux, vérification des citations.
  • Chronométrage côté client (à travers l’interface) et dans les journaux de la passerelle (tokens par seconde, premier fragment).
  • Mémoire relevée par docker stats ; VRAM par nvidia-smi.

Lire les métriques sans les confondre

Les mesures suivantes ne sont pas comparables entre elles.

Réponse complète
Du clic au dernier token : recherche, reranking, construction du prompt et génération.
Premier token côté client
Délai avant le premier fragment affiché : il inclut la recherche et le reranking.
Premier fragment de la passerelle
Délai interne entre réception du prompt et premier token du modèle (quelques centaines de ms).
Débit de génération
Tokens produits par seconde une fois la génération lancée ; dépend du matériel et de la longueur du prompt.
Reranking
Durée du cross-encoder sur les 20 meilleurs passages ; sur CPU, c’est le poste dominant.
Ingestion
Du dépôt à l’état « prêt » : extraction, découpage, embeddings, indexation.
Mémoire
RAM des conteneurs (docker stats) et VRAM (nvidia-smi) ; valeurs au pic.

Limites

  • Corpus volontairement petit et synthétique : les latences croissent avec la taille des documents et le nombre de passages à reclasser.
  • Un seul utilisateur à la fois : la passerelle accepte deux générations concurrentes, puis répond 503 avec Retry-After.
  • Modèle de 1,5 milliard de paramètres : les réponses démontrent le chemin, pas une qualité documentaire.
  • Profil GPU 12 Go (modèle 7 B) : décrit, jamais installé ni mesuré.
  • Multi-nœuds via le Pool : testé sur nœuds simulés uniquement.

Registre public des mesures

Toutes les mesures publiées, avec leur contexte. Les preuves renvoient aux scripts et corpus publiés dans les dépôts.

Profil Compact (CPU)

Réponse complète, profil Compact CPU51 s

Latence d’une réponse complète (du clic à la fin de la réponse)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
10 · médiane 51,2 s ; moyenne 50,2 s
Plage observée
27,8 – 71,3 s
Chemin mesuré
Pile RAG complète (9 services), de bout en bout via l’interface web : question → recherche hybride → reranking → génération → réponse avec citations.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, synthétique, représentative
Révision
RC2 (campagne du 2026-11-09)
Date
9 novembre 2026
Limites
Corpus synthétique de 8 documents et 10 questions ; modèle de 1,5 milliard de paramètres ; CPU partagé entre Ollama et le reranker. Ces chiffres démontrent l’intégration, pas un niveau de service.
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/fixtures/corpus/manifest.json compact/docs/limites-et-capacites.md
Premier token côté client, profil Compact CPU10 s

Délai avant le premier fragment de réponse (flux SSE), recherche et reranking inclus

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
10 · médiane 10,1 s
Plage observée
3,9 – 17,9 s
Chemin mesuré
Pile RAG complète (9 services), de bout en bout via l’interface web : question → recherche hybride → reranking → génération → réponse avec citations.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, synthétique, représentative
Révision
RC2 (campagne du 2026-11-09)
Date
9 novembre 2026
Limites
Inclut recherche hybride, reranking (≈ 9,5 s) et construction du prompt ; la passerelle seule émet son premier fragment en 274–377 ms une fois le prompt reçu.
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/fixtures/corpus/manifest.json
Débit de génération, profil Compact CPU21,5 tokens/s

Tokens générés par seconde (journaux de la passerelle, 24 générations RAG)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
24 · moyenne
Plage observée
15,8 – 52,0 tokens/s
Chemin mesuré
Journal de la passerelle (generate.ok) dans la pile complète ; prompts RAG longs.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, synthétique
Révision
pré-release (campagne d’intégration du 2026-11-09)
Date
9 novembre 2026
Limites
Moyenne hétérogène sur des prompts RAG longs. Ne pas confondre avec une mesure Ollama directe sur un prompt court (34,6 tokens/s, une exécution).
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/fixtures/corpus/manifest.json
Reranking par question, profil Compact CPU9,5 s

Durée d’un appel de reranking (cross-encoder sur CPU)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
22 · moyenne dérivée des compteurs (210 s / 22 appels)
Plage observée
8,9 s (campagne d’intégration) – max 18,2 s
Chemin mesuré
Backend → passerelle /v1/rerank → TEI CPU, pile complète.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, synthétique
Révision
RC2 (campagne du 2026-11-09)
Date
9 novembre 2026
Limites
Reranker float32 sur 8 threads ; le profil Compact fixe un timeout de 20 s. Le reranking est le poste dominant de la latence.
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/docs/limites-et-capacites.md
Ingestion de 8 documents, profil Compact CPU13 s

Temps entre le premier dépôt et le dernier document prêt (37 fragments, 38 Ko de texte)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
8 · —
Plage observée
10 s (campagne d’intégration) – 12,9 s (RC2)
Chemin mesuré
Dépôt via l’interface → worker Celery → embeddings via la passerelle → index.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, synthétique
Révision
RC2 (campagne du 2026-11-09)
Date
9 novembre 2026
Limites
Petit corpus texte ; un seul worker (concurrence 2) ; aucun OCR.
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/fixtures/corpus/manifest.json
Mémoire au pic, profil Compact CPU7,8 Go

Mémoire cumulée des 9 conteneurs au pic (docker stats)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
1 · pic ; moyenne ≈ 7,1 Go
Plage observée
reranker jusqu’à 5,7 Go ; Ollama ≈ 3 Go ; en régime stable (RC2) : TEI 3,5 Go, Ollama 3,0 Go
Chemin mesuré
Échantillonnage docker stats pendant la campagne E2E.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle
Révision
pré-release et RC2 (2026-11-09)
Date
9 novembre 2026
Limites
Une machine de 8 Go ne suffit pas ; limite de 6 Go nécessaire pour le reranker (3 Go provoque un OOM).
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/docs/limites-et-capacites.md
Campagne de qualification fonctionnelle, profil Compact CPU71 / 71 étapes

Étapes de bout en bout sans échec (installation à froid, reranking réel, hors ligne vérifié, résilience, sauvegarde/restauration)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
71 · 0 échec (58 PASS, 11 OBSERVED, 2 INFO)
Plage observée
durée 795 s
Chemin mesuré
Pile RAG complète (9 services), de bout en bout via l’interface web : question → recherche hybride → reranking → génération → réponse avec citations.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, reproduite
Révision
RC2 (campagne du 2026-11-09)
Date
9 novembre 2026
Limites
Qualification fonctionnelle, exécutée trois fois sur la pile complète (pré-RC, RC1, RC2). Verdict interne : GO avec réserves (latences, qualité du modèle 1,5 B non revendiquée).
Reproductibilité
Installation Compact selon la documentation publiée puis compact/scripts/e2e_qualification.py sur le corpus de fixtures.
Preuves
compact/scripts/e2e_qualification.py compact/scripts/resilience_check.py compact/docs/limites-et-capacites.md
Empreinte disque (RC4)779 / 941 / 274 / 236 Mo

Taille des images applicatives construites localement (non-root)

Matériel
Exécution locale des suites de tests
Échantillon
1 · backend / frontend / passerelle / pool
Plage observée
modèles ≈ 3,9 Go ; images tierces (pgvector, Redis, TEI, Ollama) ≈ 5 Go supplémentaires
Chemin mesuré
docker images après construction.
Contexte
Sans corpus (sonde directe) · n/a
Nature
locale
Révision
RC4 (2026-11-10)
Date
10 novembre 2026
Limites
Le « ~3 Go d’images » de la documentation ne compte que les images applicatives et bases légères ; l’empreinte totale avec Ollama et TEI est d’environ 7 Go hors modèles.
Reproductibilité
docker compose build puis docker images.
Preuves
README.md compact/docs/limites-et-capacites.md

GPU (non qualifié)

Compatibilité pilote NVIDIA de l’image Ollama livrée0 / 2 générations

Générations réussies avec l’image Ollama officielle 0.30.8 sur pilote 535

Matériel
Station GPU partagée — AMD Ryzen Threadripper 2990WX, 128 Go de RAM, NVIDIA RTX 3060 Ti 8 Go, pilote 535.309.01 / CUDA 12.2, hôte non dédié
Échantillon
2 · —
Plage observée
erreur « device kernel image is invalid »
Chemin mesuré
Ollama direct dans le conteneur, sans passerelle ni RAG.
Contexte
Sans corpus (sonde directe) · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, ponctuelle
Révision
RC2 (2026-11-10)
Date
10 novembre 2026
Limites
Constat utile comme prérequis : l’image Ollama officielle ≥ 0.30 exige un pilote NVIDIA ≥ 550 (noyaux CUDA compressés).
Reproductibilité
Reproductible : lancer l’image Ollama livrée sur un hôte à pilote 535.
Preuves
app/models_registry.yaml compact/compose.gpu-12gb.yml
Profil GPU 12 Go0 mesure

Mesures disponibles

Matériel
Aucun matériel
Échantillon
0 · —
Plage observée
jamais installé
Chemin mesuré
Aucune.
Contexte
Sans corpus (sonde directe) · qwen2.5:7b-instruct
Nature
non généralisable
Révision
RC2 à RC4
Date
10 novembre 2026
Limites
Décrit dans compose.gpu-12gb.yml avec qwen2.5:7b-instruct ; jamais installé, aucun digest enregistré, aucune mesure, non qualifié.
Reproductibilité
Procédure documentée (provision --with-12gb) mais non exécutée.
Preuves
compact/compose.gpu-12gb.yml compact/docs/limites-et-capacites.md

Pool, tests et tailles

Parité Direct / Pool (mono-nœud)32 / 33 opérations

Opérations identiques via la passerelle directe et via le Pool (vecteurs d’embeddings et ordres de reranking identiques)

Matériel
Poste CPU x86_64 — Intel Core i5-1145G7, 4 cœurs / 8 threads, 14 Go de RAM, sans GPU
Échantillon
33 · 1 différence attendue, 0 échec
Plage observée
premier événement de flux : direct 269 ms / Pool 216 ms ; RAG complet via le Pool : 71 étapes, 0 échec
Chemin mesuré
Client → passerelle directe, puis client → Pool → même passerelle.
Contexte
Corpus synthétique publié (compact/fixtures/corpus) : 8 documents, 10 questions · qwen2.5:1.5b-instruct · granite-embedding:278m · bge-reranker-v2-m3
Nature
locale, matérielle, reproduite
Révision
Pool candidat et RC2 (2026-11-09)
Date
9 novembre 2026
Limites
Un seul nœud. Le multi-nœuds est implémenté et testé sur nœuds simulés uniquement : non qualifié matériellement.
Reproductibilité
ai-gateway-pool-open : docs/contract-qualification.md, docs/performance.md.
Preuves
docs/contract-qualification.md docs/performance.md
Suites de tests automatisés (RC4, publication)≈ 17 100 tests

Tests réussis, 0 échec

Matériel
Exécution locale des suites de tests
Échantillon
1 · backend 13 011 (profil FULL) · frontend 1 307 · passerelle 2 036 · pool 795
Plage observée
backend FAST 9 953 en 167 s ; STANDARD 12 965 en 244 s ; FULL 13 011 en 930 s
Chemin mesuré
Exécution locale des suites publiées ; la CI GitHub des trois dépôts exécute les mêmes points d’entrée.
Contexte
Sans corpus (sonde directe) · n/a
Nature
locale, reproduite
Révision
RC4 et RC4.1 (2026-11-10 et 11)
Date
10 novembre 2026
Limites
Les comptes varient légèrement selon le profil (FAST sans base de données, STANDARD, FULL) et la révision.
Reproductibilité
make test-backend-all, npm test (frontend), suites pytest de la passerelle et du pool.
Preuves
Makefile .github/workflows/ci.yml

Accès aux preuves

Les scripts de qualification, le corpus et les documents de limites sont publiés dans les dépôts. Les dossiers de qualification détaillés (journaux bruts) sont internes au projet et ne sont pas distribués.

e2e_qualification.py (lien externe) · Corpus synthétique (lien externe) · Limites et capacités (lien externe)