HPC DISI - Hello Cow!

Architettura

Il sistema usa Slurm per la gestione delle code di attività da eseguire su nodi di calcolo, con attività descritte tramite script sbatch ed eseguite tramite container apptainer. L'architettura comprende:

Flusso Operativo

  1. Accesso SSH ad uno dei nodi di login slogin.disi.unibo.it or slogin2.disi.unibo.it
  2. Creazione o caricamento di un container .sif
  3. Creazione dello script sbatch
  4. Trasferimento dati nella directory /scratch.hpc/username
  5. Inserimento dello script nella coda Slurm

Le due aree condivise hanno limiti di spazio diversi, si consiglia di utilizzare la scratch.hpc sia per la CACHE di APPTAINER

export APPTAINER_CACHEDIR=/scratch.hpc/username
sia per il run dei jobs

Esempio di Computazione

Creazione container "lolcow" e stampa mucca felice

Fase 1 - Creazione Container

#!/bin/bash
#SBATCH --job-name=mkMucca
#SBATCH --ntasks=1
#SBATCH --nodes=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=1G
#SBATCH --partition=sbuild
#SBATCH --output=%N_%j.log
#SBATCH -e slurm.%N.%j.err
#SBATCH --chdir=/scratch.hpc/username
#SBATCH --mail-type=ALL
#SBATCH --mail-user=username@unibo.it

export APPTAINER_CACHEDIR=/scratch.hpc/username

echo "Make a mucca"
apptainer build lolcow.sif docker://ghcr.io/apptainer/lolcow

Fase 2 - Esecuzione

#!/bin/bash
#SBATCH --job-name=RunMucca
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --mem=1G
#SBATCH --partition=sbuild
#SBATCH --output=%N_%j.log
#SBATCH --chdir=/scratch.hpc/username
#SBATCH --mail-type=ALL
#SBATCH --mail-user=username@unibo.it

echo "Run baby run!"
sleep 20
apptainer exec lolcow.sif cowsay moo

Output Atteso

Run baby run!
 _____
< moo >
 -----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Note Utili

Avere una shell interattiva con una GPU su una partition, se disponibile

srun -p l40s --gres=gpu:1 --pty bash

Creazione Container Personalizzato

Bootstrap: docker
From: debian:bookworm

%post
    apt update
    apt-get -y install cowsay lolcat

%environment
    export LC_ALL=C
    export PATH=/usr/games:$PATH

%runscript
    date | cowsay | lolcat

%labels
    DISI

Costruzione:

srun -p sbuild --cpus-per-task=8 apptainer build  my.sif my.def

Esecuzione:

srun -p sbuild --cpus-per-task=8 apptainer run my.sif

Controllare sempre il valore di --mem e --cpus-per-tasks

Se non vengono specificati i valori di queste variabili, il default impostato da Slurm corrisponde a 1 GB di RAM e 2 core di CPU.

Note sull'utilizzo di Apptainer con le GPU

 apptainer run --rocm etcc...  per GPU AMD    
 apptainer run --nv   etcc...  per GPU NVIDIA 

Note sullo storage

Se aveste dei problemi di latenza legati al IO sulla share di rete /scratch.hpc potete usare come cache temporanea per il calcolo /dev/shim tale area viene pulita ogni volta che il job viene completato, quindi è da usare solo come cache durante il calcolo in quanto alla fine del job viene cancellata. Qualora lanciaste due job sullo stesso nodo che usano /dev/shim il primo che finisce pulisce la cache cancellando anche i semilavorati prodotti dal secondo job