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.
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
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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/fixtures/corpus/manifest.jsoncompact/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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/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.pysur le corpus de fixtures. - Preuves
compact/scripts/e2e_qualification.pycompact/scripts/resilience_check.pycompact/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 buildpuisdocker images.- Preuves
README.mdcompact/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.yamlcompact/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.ymlcompact/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.mddocs/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)