Quick Start

Di seguito sono descritti i passi necessari per l’esecuzione di un semplice esperimento su TeraStat2 (TS2) (non hai ancora un account? Clicca qui per ottenerne gratuitamente uno)
Si supponga di voler eseguire una breve procedura basata sull'uso del software R.
Nota: una copia del materiale descritto in questo esempio è presente cartella “esempi” della propria home directory.

Passo 1: Preparazione esperimento

Il primo passo consiste nel preparare tutto quanto è necessario per l’esecuzione dell’esperimento desiderato. Nel nostro caso, andiamo a creare un file di testo esempio.R (clicca qui per scaricare una copia del file) contenente le istruzioni nel linguaggio R che compongono il nostro esperimento. In dettaglio, il file conterrà le seguenti due istruzioni:

a <- rnorm(1000,0,1)
print(a)

Passo 2: Confezionamento esperimento

Il secondo passo consiste nel creare uno script che contenga delle speciali direttive per TS2, necessarie a definire il contesto dell'esperimento, nonché le istruzioni operative per l’esecuzione dell’esperimento stesso. Una volta recepito da TS2, tale script sarà eseguito attraverso la creazione di un nuovo job. Nel nostro caso, andiamo a creare un file di testo esempio.sh (clicca qui per scaricare una copia del file) contenente le seguenti istruzioni:

#!/bin/sh
# Attenzione: il carattere # che precede la direttiva SBATCH non va eliminato

#SBATCH --job-name=esempio_base                      #  nome attribuito al job #SBATCH --output=%x_%j.log                 # nome del file di output; produce esempio_base_JOBID.log #SBATCH --error=%x_%j.err                  # nome del file di errore; produce esempio_base_JOBID.err
#SBATCH --mem-per-cpu=1024M                      # quantità di memoria riservata
#SBATCH --time=0-00:02:00                        # stima tempo esecuzione (giorni-ore:minuti:secondi)
#SBATCH -n 1                                     # numero di processori
#SBATCH -N 1                                     # numero di server
#SBATCH --mail-user=utente.terastat2@uniroma1.it # proprio indirizzo email
#SBATCH --mail-type=ALL

 

module load R/4.0.5_10gcc
R -f esempio.R
sleep 60

Le righe che iniziano per #SBATCH (righe 2-9) permettono di specificare le risorse richieste a TS2 per l’esecuzione del proprio esperimento. 

Ferma restando la possibilità per l’esperimento di produrre dei file di output, tutto quello che il codice eseguito mostrerebbe a schermo viene riversato all’interno di un file il cui nome è indicato dalla direttiva --output (riga 3). In questo caso, il file di output avrà come nome la stringa "job_name" seguita dal codice identificativo del job appena eseguito.

La riga 11 chiede al sistema di caricare la versione 4.0.5_10 del software R  (consultare la pagina sul software disponibile per maggiori dettagli). La riga 12 contiene il codice necessario all’esecuzione dell’esperimento vero e proprio. 

La riga 13 ha lo scopo di trattenere il job nel sistema di code 60 secondi prima della sua esecuzione, in modo da renderlo temporaneamente visibile in coda anche nel caso ci fossero le risorse per una sua pronta esecuzione. 

Ulteriori dettagli circa le direttive disponibili in SLURM per l'esecuzione di un esperimento sono disponibili alla pagina https://docs.dei.unipd.it/en/CLUSTER/Slurm_basics

Passo 3: Sottomissione esperimento

I file esempio.R ed esempio.sh sono già disponibili nella directory esempi nella propria home ma sarebbe stato possibile prepararli o direttamente sui server, utilizzando uno degli editor di testo disponibili (nano, joe, vim, emacs, grossomodo in ordine di complessità crescente) o sul proprio pc trasferendoli dopo sul cluster.
Il trasferimento sul cluster può essere fatto, a seconda della situazione, o da linea di comando con i comandi che seguono

pc> scp -P2020 esempio.R <nome_utente>@ts2.uniroma1.it
pc> scp -P2020 esempio.sh <nome_utente>@ts2.uniroma1.it

o utilizzando un tool grafico.

Una volta trasferiti tutti i file, occorre collegarsi a TS2 per l’avvio dell’esperimento vero e proprio. L’accesso può avvenire utilizzando una applicazione con interfaccia grafica (Vedi “Come Collegarsi”) oppure attraverso il comando ssh:

pc> ssh -l <nome_utente> -p 2020 ts2.sta.uniroma1.it

Dopo aver inserito la password, ci si trova nella propria home directory (il comando pwd restituisce il path che avrà la forma /lustre/home/<nome_utente>) e in questa dovrebbero essere presenti i file precedentemente trasferiti ( il comando ls permette di verificarlo).

E’ ora possibile sottomettere il proprio esperimento eseguendo il comando sbatch:

terastat2> sbatch esempio.sh

NB se si stanno utilizzando i file già presenti sul sistema (directory esempi), è necessario prima spostarsi nella directory esempi con il comando cd:

terastat2> cd esempi

Una volta avvenuta la sottomissione, sarà possibile conoscere lo stato di esecuzione del proprio job attraverso il comando squeue:

terastat2> squeue -l

Nella lista che compare a schermo, si noterà la presenza del proprio job, in esecuzione (valore Running nella colonna ST) oppure in attesa che si liberino le risorse per la sua attivazione (valore Pending nella colonna ST).

L’ordine di esecuzione dipende da quello di inserimento nella coda ma ci sono alcuni fattori di correzione; in particolare il sistema favorisce gli utenti che nei giorni precedenti hanno usato poco il sistema. Maggiori dettagli sono disponibili nella pagina sul sistema di code. 

Passo 4: Conclusione di un esperimento

Una volta terminata l’esecuzione dell’esperimento, due file contenenti l’output a schermo e gli errori verificatisi durante l’esecuzione saranno trasferito dal sistema nella home directory dell’utente che lo ha messo in coda.
E' comunque probabilmente preferibile scrivere su di un file i risultati dei prorpri esperimenti con le stesse tecniche che si utilizzerebbero in una sessione sul proprio pc; l'unica accortezza è che si deve tener conto che la home delle utenze è condivisa tra tutti i nodi quando si eseguoo più versioni dello stesso esperimento in contemporanea in modo tale da evitare che i vari processi scrivano inconsapevolmente sugli stessi file.
Assumendo che il job sia stato eseguito con ID 312, è possibile visionare il contenuto di questi due file utilizzando il comando cat come nel seguente esempio:

terastat2> cat esempio_base_312.log

L’uso del carattere jolly * consente di visionare il contenuto dei file prodotti da tutti gli esperimenti. Nel caso si sia interessati ad un particolare esperimento, occorre sostituire tale carattere con il codice identificativo dell’esperimento in questione (riportato dal comando squeue).

Nel caso si voglia rimuovere un job dalla coda od interromperne l'esecuzione si può utilizzare il comando scancel:

terastat2> scancel 312