ARPA-SIMC / arkimaps

generazione mappe meteorologiche da modelli previsionali
GNU General Public License v2.0
0 stars 1 forks source link

Refactoring parallelizzazione per HPC #129

Open brancomat opened 1 year ago

brancomat commented 1 year ago

La coordinazione tra arkimaps e i suoi worker che fanno rendering è praticamente tutta nel file system: i dati sono nella working directory, la descrizione di un'immagine da generare è una piccola struttura dati serializzabile.

Dato un filesystem condiviso, il rendering può essere fatto da un numero arbitrario di processi, e pure su un numero arbitrario di macchine.

Riprogettiamo la cosa in base a queste premesse?

Originally posted by @spanezz in https://github.com/ARPA-SIMC/arkimaps/issues/128#issuecomment-1350653683

dcesari commented 1 year ago

Per fare questo prenderei in considerazione l'integrazione con lo scheduler HPC slurm, che non è l'unico al mondo ma il più open ed usato su tutti i cluster a cui abbiamo accesso (nostro, Cineca, ECMWF).

Se ci mettiamo in questa ottica, è lo scheduler a preoccuparsi di riservare le risorse e mettere a disposizione strumenti per ditsribuire i processi tra nodi. v. ad esempio https://slurm.schedmd.com/man_index.html comandi sbatch e srun o https://slurm.schedmd.com/quickstart.html

I possibili approcci che vedo sono molteplici:

Il primo approccio ha più overhead per lo scheduler ma secondo me è più flessibile perché usa le risorse al massimo, mentre negli altri due, soprattutto nel terzo, se non abbiamo uno scheduling interno dei thread nell'applicazione, tutte le risorse restano occupate finché non esce l'ultimo renderer e si impedisce l'esecuzione di nuovi job.

L'argomento è complesso, magari vale la pena sentirsi (ma non so quando).

dcesari commented 1 year ago

Aggiungo due info: nel renderer potremmo assumere di essere in ambiente batch slurm se è definita ad es. la variabile d'ambiente $SLURM_ID e in tal caso il numero di thread massimo da utilizzare per quel processo è $SLURM_CPUS_PER_TASK (+ eventuali thread di controllo che non succhiano cpu), non il numero di core della macchina, non credo che alla fine dei conti ci sia molto altro da fare.

dcesari commented 1 year ago

Quanto scritto in https://github.com/ARPA-SIMC/arkimaps/issues/128#issuecomment-1351423706 va nella direzione del primo approccio, che non richiede ulteriore consapevolezza dell'ambiente batch da parte di arkimaps.