Nel mio precedente articolo per Opensource.com, ho presentato il progetto OpenHPC, che mira ad accelerare l'innovazione nel calcolo ad alte prestazioni (HPC). Questo articolo fa un ulteriore passo avanti utilizzando le capacità di OpenHPC per creare un piccolo sistema HPC. Per chiamarlo un sistema HPC potrebbe suonare più grande di quello che è, quindi forse è meglio dire che si tratta di un sistema basato sulle Cluster Building Recipes pubblicate dal progetto OpenHPC.
Il cluster risultante è costituito da due sistemi Raspberry Pi 3 che fungono da nodi di calcolo e una macchina virtuale che funge da nodo master:
Il mio nodo master esegue CentOS su x86_64 e i miei nodi di calcolo eseguono un CentOS leggermente modificato su aarch64.
Ecco come appare la configurazione nella vita reale:
Per configurare il mio sistema come un sistema HPC, ho seguito alcuni dei passaggi della guida all'installazione di Cluster Building Recipes di OpenHPC per CentOS 7.4/aarch64 + Warewulf + Slurm (PDF). Questa ricetta include istruzioni per il provisioning usando Warewulf; poiché ho installato manualmente i miei tre sistemi, ho saltato le parti di Warewulf e ho creato un playbook Ansible per i passaggi che ho eseguito.
Contenitori Linux
- Cosa sono i container Linux?
- Un'introduzione alla terminologia dei contenitori
- Download:Primer sui contenitori
- Operatori Kubernetes:automatizzare la piattaforma di orchestrazione dei container
- eBook:modelli Kubernetes per la progettazione di app cloud native
- Cos'è Kubernetes?
Una volta che il mio cluster è stato configurato dai playbook di Ansible, ho potuto iniziare a inviare lavori al mio responsabile delle risorse. Il gestore delle risorse, nel mio caso Slurm, è l'istanza nel cluster che decide dove e quando vengono eseguiti i miei lavori. Una possibilità per avviare un semplice lavoro sul cluster è:
[ohpc@centos01 ~]$ srun hostname
calvin
Se ho bisogno di più risorse, posso dire a Slurm che voglio eseguire il mio comando su otto CPU:
[ohpc@centos01 ~]$ srun -n 8 hostname
hobbes
hobbes
hobbes
hobbes
calvin
calvin
calvin
calvin
Nel primo esempio, Slurm ha eseguito il comando specificato (hostname
) su una singola CPU e nel secondo esempio Slurm ha eseguito il comando su otto CPU. Uno dei miei nodi di calcolo si chiama calvin
e l'altro si chiama hobbes
; che può essere visto nell'output dei comandi precedenti. Ciascuno dei nodi di calcolo è un Raspberry Pi 3 con quattro core CPU.
Un altro modo per inviare lavori al mio cluster è il comando sbatch
, che può essere utilizzato per eseguire script con l'output scritto su un file anziché sul mio terminale.
[ohpc@centos01 ~]$ cat script1.sh
#!/bin/sh
date
hostname
sleep 10
date
[ohpc@centos01 ~]$ sbatch script1.sh
Submitted batch job 101
Questo creerà un file di output chiamato slurm-101.out
con il seguente contenuto:
Mon 11 Dec 16:42:31 UTC 2017
calvin
Mon 11 Dec 16:42:41 UTC 2017
Per dimostrare le funzionalità di base del gestore risorse, sono adatti strumenti a riga di comando semplici e seriali, ma un po' noiosi dopo aver eseguito tutto il lavoro per configurare un sistema simile a HPC.
Un'applicazione più interessante sta eseguendo un lavoro in parallelo Open MPI su tutte le CPU disponibili nel cluster. Sto utilizzando un'applicazione basata su Game of Life, che è stata utilizzata in un video intitolato "Running Game of Life su più architetture con Red Hat Enterprise Linux". Oltre all'implementazione di Game of Life basata su MPI precedentemente utilizzata, la versione ora in esecuzione sul mio cluster colora le celle per ogni host coinvolto in modo diverso. Il seguente script avvia l'applicazione in modo interattivo con un output grafico:
$ cat life.mpi
#!/bin/bash
module load gnu6 openmpi3
if [[ "$SLURM_PROCID" != "0" ]]; then
exit
fi
mpirun ./mpi_life -a -p -b
Inizio il lavoro con il seguente comando, che dice a Slurm di allocare otto CPU per il lavoro:
$ srun -n 8 --x11 life.mpi
A scopo dimostrativo, il lavoro ha un'interfaccia grafica che mostra il risultato corrente del calcolo:
La posizione delle celle rosse viene calcolata su uno dei nodi di calcolo e le celle verdi vengono calcolate sull'altro nodo di calcolo. Posso anche dire al programma Game of Life di colorare la cella per ogni CPU utilizzata (ce ne sono quattro per nodo di calcolo) in modo diverso, il che porta al seguente output:
Grazie alle ricette di installazione e ai pacchetti software forniti da OpenHPC, sono stato in grado di configurare due nodi di calcolo e un nodo master in una configurazione di tipo HPC. Posso inviare lavori al mio gestore risorse e posso utilizzare il software fornito da OpenHPC per avviare applicazioni MPI utilizzando tutte le CPU del mio Raspberry Pi.
Per ulteriori informazioni sull'utilizzo di OpenHPC per creare un cluster Raspberry Pi, partecipa ai discorsi di Adrian Reber alla DevConf.cz 2018, dal 26 al 28 gennaio, a Brno, nella Repubblica Ceca, e al CentOS Dojo 2018, il 2 febbraio a Bruxelles.