feat: add optional parallel processing and disk cache for scan_templates#7
feat: add optional parallel processing and disk cache for scan_templates#7MariusYvard wants to merge 3 commits intoSeismicSource:mainfrom
Conversation
|
Bonjour Marius, Je regarderai plus dans le détails dans quelque semaine (deadline importante en approche). Deux questions rapides :
|
|
Bonjour Claudio, Merci ! Bonne chance pour ta deadline, et ne t'inquiète pas, ce n'est pas pressé.
À bientôt, |
Salut Claudio,
Je te soumets une feature sur laquelle j'ai travaillé après le stage, en partant directement des observations faites sur FDF, MPOM et BIM pendant la détection des séismes répétés dans les Petites Antilles.
Contexte
Le scan séquentiel devient le goulot d'étranglement dès qu'on dépasse quelques années de données continues. Sur 20 ans de données FDF, les runs prenaient plusieurs jours même avec le chunking et la décimation optimisés (chunk = 24 h, taux = 2). L'idée ici est de paralléliser le dispatch des chunks temporels en gardant le comportement séquentiel intact par défaut (
n_jobs = 1).Ce que j'ai ajouté
requake/parallel_utils.py(nouveau module) :parallel_map()— wrapper léger autour deProcessPoolExecutor, utilisable dansscan_catalog.pypour les paires sérialisablesn_jobsidentique à joblib (−1 = tous les CPUs, etc.)concurrent.futuresethashlibde la stdlibrequake/scan/scan_templates.py(ajouts uniquement, original intact) :_split_time_range()— découpe avec chevauchement aux bords (marge = durée du template, 120 s par défaut) pour éviter de couper un pic de CC à cheval sur deux chunks_merge_detections()— déduplique les détections dans les zones de chevauchement en gardant la CC la plus haute_scan_chunk_threaded()— worker thread-safe avec cache local par threadscan_templates()étendue : mode séquentiel (n_jobs=1) inchangé, mode parallèle viaThreadPoolExecutorquandn_jobs > 1requake/config/configspec.conf(ajouts en bas) :Comportement par défaut inchangé
Sans toucher à la config,
n_jobs = 1maintient le mode séquentiel exact — le blocif n_jobs == 1appelle le code original ligne pour ligne.Ce que j'ai testé
N'hésite pas à me dire si tu préfères une organisation différente (ex. intégrer les helpers directement dans
scan_catalog.pyplutôt qu'un module séparé, ou renommern_jobspour coller à une convention existante dans Requake). Je suis dispo pour adapter.Marius