Plan V&V multi-million DDL : QF Solver 0.2.2 alpha¶
Statut¶
Ce dossier definit la campagne de scalabilite au-dela de deux millions de
degres de liberte. Il conserve le plan de readiness et une tentative initiale
controlee qui a ete bloquee sur l'hote faute de petsc4py. Une seconde tranche
a depuis ete executee dans l'image Docker PETSc epinglee et est archivee dans
qualification/benchmarks/qf_solver_0_2_2_multi_million_campaign_docker/.
Aucune promotion de maturite generale n'est deduite : seule la preuve statique
TET4, contiguë, sur une machine, est PASS bornée.
Matrice de campagne¶
Le meme modele TET4 structure, le meme materiau isotrope, les memes conditions aux limites et le meme chargement doivent etre rejoues dans les quatre cases :
| Cible | Rangs MPI | Backend | Preconditionneur | Format matrice | Partitionnement |
|---|---|---|---|---|---|
| 2 000 000 DDL | 2 | PETSc | GAMG | BAIJ | contigu ou graphe trace |
| 2 000 000 DDL | 4 | PETSc | GAMG | BAIJ | contigu ou graphe trace |
| 4 000 000 DDL | 2 | PETSc | GAMG | BAIJ | contigu ou graphe trace |
| 4 000 000 DDL | 4 | PETSc | GAMG | BAIJ | contigu ou graphe trace |
La campagne doit conserver une variante matrix_free pour le controle de
memoire, mais cette variante ne remplace pas la preuve PETSc/MPI multi-rang.
SciPy est explicitement exclu de ce palier par le gate
MULTI-MILLION-GATE.
Readiness avant calcul¶
Chaque case commence par un rapport large-readiness. Le rapport doit montrer :
- un backend
petscoumatrix_free; - un budget memoire explicite, enregistre dans les metadonnees runtime ;
- une estimation
petsc_rule_of_thumb_bytesinferieure a ce budget ; - un espace disque suffisant pour le modele, les sorties file-backed et les manifests ;
- une taille de chunk positive et compatible avec le budget ;
- les versions Python, PETSc, MPI, petsc4py, mpi4py et le materiel traces.
Exemple de planification sans execution :
python qf_solver.py large-campaign `
--output qualification/benchmarks/qf_solver_0_2_2_multi_million_plan `
--targets 2000000 4000000 `
--solver-backend petsc `
--preconditioner gamg `
--memory-budget-mb 32768
Cette commande ne doit pas recevoir --execute pendant la preparation. Les
executions MPI seront lancees separement, dans des environnements epingles,
par exemple avec mpiexec -n 2 puis mpiexec -n 4, et dans des repertoires de
sortie distincts.
Observables obligatoires¶
Chaque execution doit produire, par rang et au niveau global :
- nombre de noeuds, elements, DDL et NNZ ;
- temps de chargement, assemblage, resolution et pipeline total ;
- iterations KSP, residu initial, residu final, residu relatif et raison de convergence ;
- pic RSS par rang, somme RSS, memoire Python et estimation sparse ;
- repartition des elements, lignes et charges, avec les communications estimees ;
- deplacements file-backed, reactions, energie et audit d'equilibre ;
- empreinte du modele, environnement runtime et manifest de preuve.
Les tableaux de scaling doivent comparer les deux rangs sur la meme taille (strong scaling) et les deux tailles a travail par rang documente (weak scaling). Une seule station ne permet pas d'extrapoler a un cluster different.
Criteres de sortie proposes¶
Une case est PASS uniquement si tous les points suivants sont satisfaits :
- DDL reels au moins egaux a la cible ;
- audit de maillage et de chargement
PASS; - residu relatif final au plus
1e-8, ou seuil justifie dans le rapport ; - ecart de deplacement et de reactions entre les configurations equivalentes
au plus
1e-8relatif, hors tolerance numerique documentee ; - aucun deplacement non fini et aucune sortie monolithique JSON ;
- budget memoire respecte par le pic observe ;
- manifest et empreinte d'entree verifies ;
- temps, iterations et repartition disponibles pour les quatre cases.
Une efficacite faible ne transforme pas un calcul correct en echec numerique,
mais elle reste un WARNING de scalabilite et interdit une revendication
generale de performance. Le seuil provisoire de weak scaling est conserve a
60 % jusqu'a une decision technique fondee sur au moins deux configurations
materielles.
Comparaison numerique¶
Avant toute comparaison de temps, les cases doivent comparer les memes grandeurs mecaniques :
- norme relative des deplacements nodaux ;
- reactions sur les DDL bloques et resultant global ;
- energie de deformation ;
- residu d'equilibre ;
- maximum de contrainte ou champ equivalent lorsque le post-traitement est disponible.
Une difference de performance ne sera retenue que si ces observables sont identiques dans les tolerances. Les sorties MPI-IO et les sorties rassemblees ne doivent pas etre comparees comme des fichiers bruts.
Limites et decision¶
Cette campagne reste manuelle, couteuse et dependante de PETSc/MPI. Le gate
de readiness protege contre une allocation prematuree, mais ne prouve ni la
scalabilite forte, ni la scalabilite faible, ni la portabilite sur une autre
machine. Le statut du dossier reste draft jusqu'a obtention des quatre
rapports d'execution et d'une revue technique.
Tentative locale controlee¶
L'execution est archivee dans
qualification/benchmarks/qf_solver_0_2_2_multi_million_campaign_execute_blocked/.
Le resultat est BLOCKED au controle DEP-PETSC4PY, avec mpi4py et h5py
disponibles, un budget de 32 GiB accepte et une estimation PETSc de
4,13 GiB pour la cible 2M. Le second cas 4M est NOT_RUN conformement a la
politique stop_on_failure. Cette sortie demontre le comportement du gate,
pas la capacite de resolution PETSc.
La decision de release et toute promotion de maturite restent reservees a l'Owner.
Execution Docker realisee le 2026-08-23¶
L'image executee est qf-solver-large:0.2.0@sha256:f2a7931d0543ee142ce67847bb91bf59350a947d5d4874bfe7be43b6848a49c8, construite
depuis l'image de base epinglee sha256:2ae4bfbc0d9077268880faf04c72750528bee986c94ab223a2c159969bd56fa8.
Le backend est PETSc, avec CG, GAMG, BAIJ, sorties deplacements
file-backed et partitionnement contigu.
| Cas | DDL reels | Rangs | Assemblage (s) | Resolution (s) | Pipeline (s) | Iterations | Residu | RSS cumule |
|---|---|---|---|---|---|---|---|---|
2m_r2 |
2 044 416 | 2 | 19,921 | 27,161 | 48,238 | 54 | 8,801e-19 |
4,70 GiB |
2m_r4 |
2 044 416 | 4 | 12,585 | 23,530 | 37,029 | 55 | 5,477e-19 |
5,10 GiB |
4m_r2 |
4 102 893 | 2 | 61,328 | 57,781 | 121,394 | 57 | 7,552e-19 |
9,14 GiB |
4m_r4 |
4 102 893 | 4 | 47,227 | 49,624 | 98,690 | 57 | 1,041e-18 |
9,59 GiB |
Le scaling fort 2 vers 4 rangs donne une efficacité de 0,651 à 2M et
0,615 à 4M, pour un seuil provisoire de 0,60. Les quatre manifestes et
les audits grand modèle sont vérifiés PASS. Le rapport consolidé est
campaign.md/campaign.json dans le dossier d'archive.
La campagne backend complémentaire est maintenant agrégée dans
qualification/benchmarks/qf_solver_0_2_2_backend_campaign/. Elle ajoute :
| Variante | Résultat borné |
|---|---|
| PETSc/PT-Scotch graphe, 2M DDL, 2/4 rangs | PASS, efficacité forte 0,621 |
| matrix-free, 107 811 DDL | PASS, résidu relatif 1,104e-12 |
| modal SLEPc, 107 811 DDL | PASS, trois modes, résidu maximal 2,789e-12 |
| Newmark PETSc/GAMG, 2 044 416 DDL | PASS, 10 pas, résidu relatif maximal 1,968e-6 |
La comparaison SciPy/matrix-free/PETSc sur 1 029 DDL termine avec trois
backends et des écarts relatifs inférieurs à 1,5e-13. La tentative modale
SLEPc à 2 044 416 DDL a été arrêtée par le conteneur pendant la
factorisation shift-invert (signal 9, environ 33,5 GiB) et reste classée
BLOCKED_RESOURCE_LIMIT. La tranche ferme donc un périmètre backend borné,
mais ne revendique pas le modal multi-million, une seconde machine ou une
promotion de maturité.