Spaces:
Running
Calculer la profondeur pendant le parcours BFS
Objectif
Accélérer la recherche en calculant la profondeur minimale de chaque nœud pendant le BFS, au lieu de relancer ensuite des motifs Cypher à longueur variable pour mesurer les distances.
Implémentation
- fork minimal d’OpenGDS à partir du tag
2.22.0; - ajout de la liste
depths, alignée avecnodeIds, au résultat degds.bfs.stream; - compilation et chargement du JAR personnalisé dans l’image Neo4j ;
- utilisation directe des profondeurs lors de la construction du résultat ;
- conservation des profondeurs négatives pour les ascendants.
Le patch source, les instructions de reproduction et le checksum du JAR sont inclus dans opengds/.
Tests
BFSTest: 12/12 ;BfsStreamProcTest: 7/7 ;- reconstruction du JAR depuis un checkout propre du tag
2.22.0; - compilation Python de l’application.
La branche est prête pour revue et déployée sur le Space de test.
Déploiement de validation réussi sur cnil/genmod-english au commit ca51a8e.
- runtime Hugging Face :
RUNNING; - page de l’application : HTTP 200 ;
- recherche réelle à profondeur 1 : terminée avec succès en 14 s ;
- tests OpenGDS : BFS 12/12, procédure BFS 7/7, compatibilité client 3/3.
Résultats de performance : profondeur calculée après le BFS vs pendant le BFS
Nous avons comparé les deux implémentations sur le modèle mistralai/Mistral-7B-v0.1 :
- Genmod English : le BFS renvoie les nœuds, puis les profondeurs sont calculées après le parcours ;
- Genmod Faster / cette PR : le BFS renvoie conjointement chaque nœud et sa profondeur.
Chaque profondeur a été testée 5 fois. Les exécutions English et Faster ont été lancées séquentiellement, afin d’éviter toute interférence entre les deux Spaces. Les moyennes ci-dessous portent uniquement sur les paires dont les résultats fonctionnels sont strictement identiques.
| Profondeur | Résultats identiques | English moyen | Faster moyen | Gain Faster | Accélération |
|---|---|---|---|---|---|
| 1 | 5/5 | 15,79 s | 10,94 s | 30,7 % | 1,44× |
| 2 | 5/5 | 24,55 s | 15,74 s | 35,9 % | 1,56× |
| 3 | 5/5 | 29,94 s | 21,51 s | 28,2 % | 1,39× |
| 4 | 5/5 | 88,09 s | 21,20 s | 75,9 % | 4,16× |
| 5 | 5/5 | 236,63 s | 21,95 s | 90,7 % | 10,78× |
| Illimitée | 5/5 | 984,46 s | 20,86 s | 97,9 % | 47,20× |
Vérification fonctionnelle
Les 30 paires de résultats sont strictement identiques pour les ensembles de modèles renvoyés comme source, ascendants et descendants. Les distances numériques ne sont volontairement pas comparées, puisque leur mode de calcul est précisément la différence entre les deux implémentations.
Conclusion
Le calcul conjoint {nœud, profondeur} pendant le BFS apporte peu à profondeur faible, mais évite le coût croissant du recalcul a posteriori. Le bénéfice devient très important à partir de la profondeur 4 et atteint environ 47× en profondeur illimitée, sans différence dans les modèles retournés.