Cenni su LSF. Utilizzo dell Infrastruttura Cresco. Ing. Fiorenzo Ambrosino, PhD DTE-ICT-HPC. Frascati 5 Aprile 2017

Documenti analoghi
ENEA GRID. CRESCO: Corso di introduzione. Autore: Alessandro Secco

ENEA GRID. Corso di introduzione all'uso ed all'amministrazione. Autore: Alessandro Secco

Primi Programmi con MPI 1

Laboratorio Centro Calcolo

Modalità di utilizzo dei server di calcolo del C.E.D. di Frascati

Si digita login e password e si clicca su accedi. Si apre la finestra di collegamento:

CLUSTER COKA. Macchine e Risorse

Laboratorio Centro Calcolo

Un introduzione a. Condor Project Computer Sciences Department University of Wisconsin-Madison

Somma di un array di N numeri in MPI

Perché il linguaggio C?

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2

ENEA GRID. Corso di introduzione all'uso ed all'amministrazione. Autore: Alessandro Secco

Shell BASH. Variabili Redirezione

Corso di Laboratorio di Sistemi Operativi

Prodotto Matrice - Vettore in MPI II Strategia

Realizzazione di un cluster Condor su macchine virtuali

Passare argomenti al programma

Debug di un programma

Introduzione al Multithreading

Progetto II: Il linguaggio C e le chiamate di sistema sui processi

Manuale HTCondor. Indice

Sistemi di calcolo distribuiti e paralleli per l utilizzo di codici Monte Carlo

A.d'Alessio. Calcolo Parallelo. Esempi di topologie

UNIVERSITA DEGLI STUDI DI NAPOLI FEDERICO II

Gestione dei processi

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Grid Tutorial Day Palermo, 13 Aprile 2011 Job Description Language Gestione job utente

Capitolo 5 - Funzioni

La gestione della memoria dinamica Heap

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Dipartimento di Scienze Chimiche Laboratorio Interdipartimentale di Chimica Computazionale

Alcuni strumenti per lo sviluppo di software su architetture MIMD

file fisico file logico

Chiamate di sistema. Pipe Flussi di I/O

System call per la gestione di processi

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

In generale può essere utile che i due processi eseguano del codice diverso

Sistemi Operativi. Compito d esame 08 Settembre Versione A

Sistemi Operativi. Esercitazione 2 Compilazione, Makefile e Processi

Corso di Programmazione Concorrente Processi. Valter Crescenzi

Esperienze di gestione di OpenNebula, Openstack, VMWare

Gestione delle catene operative previsionali nel settore meteo - idrologico al Cineca

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

L ambiente di un processo (I)

SmallShell Piccolo processore comandi

Introduzione a GCC: GNU Compiler Collection

Manipolazioni elementari di flussi di testo strutturati

Manuale utente del cluster Linux

IDE DevC

Stringhe e allocazione dinamica della memoria

ZZZ01 Esercizi Vari. Esercizi per preparazione alla prova pratica di laboratorio

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Università degli Studi di Cassino e del Lazio Meridionale Corso di Fondamenti di Informatica Allocazione dinamica di memoria

Laboratorio di Algoritmi e Strutture Dati

Problem solving avanzato

Controllo di flusso negli script: if-then-else

MPI è una libreria che comprende:

Calcolo parallelo. Una sola CPU (o un solo core), per quanto potenti, non sono sufficienti o richiederebbero tempi lunghissimi

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

Streaming Video con Adobe Flash Media Server. Configurazione ed utilizzo

Introduzione. P4 termina prima di P3, P2 e P3 prima di P1 P1 P2 P3 P4 P1 P1 P2 P3 P4. Padre. P1,..., P4 sono processi. Figlio

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Tutorial. Cluster Linux Ultimo aggiornamento Ottobre 2004

L utility Unix awk [Aho-Weinberger-Kernighan]

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Scheduling della CPU

Workshop Congiunto INFN CCR e GRID. Acireale, Maggio INFN - Sezione di Trieste - C. Strizzolo - L. Strizzolo

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

perror: individuare l errore quando una system call restituisce -1

I processi: concetti di base, context switch e scheduling

SISTEMI OPERATIVI E LABORATORIO (Indirizzo Sistemi e Reti) 5 luglio 2004

Allocazione dinamica della memoria

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment. Codice corso: 21012

ACSO Programmazione di Sistema e Concorrente

Sommario. Introduzione al problema Infrastruttura realizzata Procedure di ottimizzazione Validazione Conclusioni

Il sistema operativo UNIX/Linux. Gli script di shell

Principles of Concurrent Programming

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

Threads: 1. Concetti di base 2. Threads in sistemi operativi attuali (NT/UNIX)

Sistemi Operativi T. Esercizi

Gestione dei file. File di testo e binari

Ottenere una modifica del parametro attuale

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Linea di comando. Compilazione. Aprire una shell di DOS tramite:

ORGANIZZAZIONE del FILE SYSTEM SISTEMA OPERATIVO UNIX FILE SYSTEM. FILE astrazione unificante del sistema operativo

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Lezione 3: Programmazione della Shell di Unix

Esercizi MPI. Algoritmi e Calcolo Parallelo. Daniele Loiacono

COSTRUZIONE DI UN APPLICAZIONE

Configurazioni ottimizzate per lo scheduling dei job

INFN-BOLOGNA-T3. L. Rinaldi

Sistemi Operativi. Des crizione e controllo dei proces s i

Il sistema operativo LINUX La shell

Gestione della memoria

Transcript:

Cenni su LSF Utilizzo dell Infrastruttura Cresco Ing. Fiorenzo Ambrosino, PhD DTE-ICT-HPC Frascati 5 Aprile 2017 5/4/2017 1

Informazioni utili su CRESCO Comandi Base di LSF Code, sottomissione, monitoring Esempi e casi particolari Job MPI Flussi di Job Job Array 5/4/2017 Ing. Fiorenzo Ambrosino, PhD - DTE-ICT-HPC 2

Informazioni utili su CRESCO Link utili: Portale web CRESCO: http://www.cresco.enea.it/ Faro2: http://www.cresco.enea.it/nx-2.php Documentazione sui sistemi Cresco: http://www.afs.enea.it/project/eneagrid/resources/cresco_documents/index.ht ml Documentazione ENEAGRID: http://www.eneagrid.enea.it/ Primo accesso & HowTo: http://www.cresco.enea.it/helpdesk.php JobRAMA Job Monitor: https://jobrama.enea.it/ ENEAGRID Software: https://gridsrv.enea.it/egrid_software Grid Ticket System: https://gridticket.enea.it/ 5/4/2017 Ing. Fiorenzo Ambrosino, PhD - DTE-ICT-HPC 3

Code I job vengono sottomessi tramite le code; Le code sono dei contenitori di job che hanno certe regole in base alle quali i job vengono schedulati; Con la coda vengono definiti alcuni parametri tra i quali: Utenti abilitati; Massimo tempo di durata del job (runlimit); Regole sul numero di core (minimo, massimo, multiplo di); Priorità; LSF Le Code Quali e quanti nodi di calcolo possono essere occupati dalla coda; Quanti core possono essere in running contemporaneamente; 4

bqueues LSF bqueues Il comando mostra l elenco delle code definite sul site LSF; ~@cresco4-fg1.portici.enea.it>bqueues QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP cresco4_256h24 24 Open:Active - - - - 29120 27616 560 0 cresco4_16h24 24 Open:Active 256 - - - 640 416 224 0 cresco4open_256 22 Open:Active - - - - 1568 1568 0 0 cresco4_h144 22 Open:Active 47 - - - 86 39 46 0 cresco4_h6 22 Open:Active - - - - 576 0 576 0 cresco3_72h24 20 Open:Active - - - - 3552 2640 792 0 cresco3_h144 18 Open:Active - - - - 346 10 330 0 cresco5_16h24 10 Open:Active - - - - 400 0 400 0 cresco5_h144 10 Open:Active - - - - 144 112 32 0 cresco4test_h14 100 Open:Active - - - - 0 0 0 0 system 100 Open:Active - - - - 0 0 0 0 small_10m 30 Open:Active - - - - 0 0 0 0 small_h144 3 Open:Active - - - - 310 86 192 0 cresco5_h3 1 Open:Active - - - - 0 0 0 0... 5

LSF bqueues bqueues l nome_coda Il comando mostra dettagli sulla configurazione della coda; ~@cresco4-fg1.portici.enea.it>bqueues -l cresco4_16h24 QUEUE: cresco4_16h24 -- Queue for small parallel jobs (max slots=256). Featuring Intel Sandy Bridge (Xeon E5-2670) nodes. PARAMETERS/STATISTICS PRIO NICE STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SSUSP USUSP RSV 24 0 Open:Active 256 - - - 640 416 224 0 0 0 RUNLIMIT 1440.0 min of cresco3x002.portici.enea.it PROCLIMIT 16 16 256... USERS: cresco4users/ HOSTS: intel_e5_2670_large_job/ POST_EXEC: /afs/enea.it/software/lsf/bin/dp_post_exec RES_REQ: select[type==large_job && cresco4 && node_up == up] span[ptile=16] Maximum resource reservation time: 57800 seconds 6

LSF sottomissione job Per sottomettere un job su Cresco occorre in genere specificare: Sezione su cui sottomettere (coda); Numero di core richiesto; Eventuale utilizzo di risorse particolari; Eseguibile da lanciare con eventuali opzioni; LSF prenderà in carico il job, gli assegnerà un ID e in base alle proprie policy di scheduling (priorità, fairshare, backfill, ecc) e disponibilità delle risorse richieste (numero di core richiesti e disponibili, durata prevista del job, eventuale memoria, precondizioni eventualmente impostate, ecc) gli assegnerà uno status. ~@cresco4-fg1.portici.enea.it>bsub sleep 10 Job <2522> is submitted to default queue <small_10m> 7

bsub LSF bsub Il comando sottomette il job su Cresco Alcune opzioni: -n specifica il numero di core -q specifica la coda -R specifica richiesta di risorse -W specifica una runlimit diversa da quella della coda -e file di error (standard error) -o file di otput (standard uotput) -w per job con dipendenze Es: bsub n 64 q cresco4_16h24 e errorfile o outputfile W 30 mioscript.sh 8

LSF job status Un job può trovarsi in uno di 4 stati: Running Pending Done Exit Il comando bjobs restituisce informazioni sullo stato dei propri job sottomessi L opzione l restituisce informazioni aggiuntive come: stato del job, data di sottomissione, data di start (se c è), data di stop (se c è), coda, numero di core, risorse particolari richieste, runlimit ecc. L opzione p (come anche l), in caso di job in Pending, restituisce informazioni aggiuntive sulle motivazioni del Pending. Opzione u seguita da un nome utente restituisce i job sottomessi dall utente specificato. Il comando bkill termina un job che è in Running o in Pending 9

LSF job monitoring Comandi per monitorare lo stato di occupazione dei nodi di calcolo da parte di LSF: lsload lshosts bhosts lsxlosd Monitoring risorse dinamiche per host Monitoring le risorse statiche per host Mostra il numero di job sui vari host Unisce le informazioni degli altri comandi (necessita di righe da 132 caratteri) 10

LSF freecresco E stata sviluppata l'utility freecresco che permette di controllare gli slot liberi sulle varie code per sapere quanti core si possono usare e per quanto tempo, in modo da poter andare immediatamente in Running ~@cresco4-fg1.portici.enea.it>freecresco --------------------------------------------------------------------------------------------------------- Specific Available slots Available slots Backfill time Queue name resource throughout queue for backfill runs window (minutes) option runtime limit --------------------------------------------------------------------------------------------------------- cresco3_72h24 - - 192(72,192,24) 336 cresco3_h144 - - 3(1,3,1) 5690 5(1,5,1) 5689 cresco4_256h24-336(256,336,16) 464(256,464,16) 1416 cresco4open_256h24-336(256,336,16) 464(256,464,16) 1416 cresco4_16h24-32(16,32,16) cresco4_h6-464(1,464,1) cresco5_h144-8(1,8,1) cresco5_16h24-32(16,32,16) See "freecresco -h" for documentation and known bugs. 11

Job MPI /* hello.c * * Simple "Hello World" program in MPI. * NOTA: Programma di test preso in prestito dal sito del CERN */ #include "mpi.h" #include <stdio.h> int main(int argc, char *argv[]) { int numprocs; /* Number of processors */ int procnum; /* Processor number */ /* Initialize MPI */ MPI_Init(&argc, &argv); /* Find this processor number */ MPI_Comm_rank(MPI_COMM_WORLD, &procnum); /* Find the number of processors */ MPI_Comm_size(MPI_COMM_WORLD, &numprocs); printf ("Hello world! from processor %d out of %d\n", procnum, numprocs); /* Shut down MPI */ MPI_Finalize(); return 0; } 12

Job MPI Compilazione: mpicc hello.c Per lanciare il job, crearsi un semplice script di lancio (wrapper): #!/bin/sh PROCS=`cat $LSB_DJOB_HOSTFILE wc -l` mpirun -n $PROCS --mca pls_rsh_agent "blaunch.sh" hostfile $LSB_DJOB_HOSTFILE./a.out Lo script deve Contare i processori assegnati da LSF Sostituire eventualmente ssh con blaunch.sh Esempio di lancio del programma: bsub -n 64 -q cresco_16h24 W 10 -o test.%j./lancio.sh 13

Job array I job array sono utili quando bisogna lanciare uno stesso codice di calcolo seriale su un grande numero di dati diversi bsub -J "myarray[1-1000]" myjob Job <123> is submitted to default queue <normal>. Nell esempio vengono sottomessi 1000 job seriali dello script myjob Lo script differenzia i vari casi in base alla variabile $LSB_JOBINDEX Es: $!/bin/sh cd./caso-$lsb_jobindex./solver.sh 14

Flussi di Job I flussi sono utili in molti ambiti: Job dipendente dal file di output di un altro Job che collezioni l'output di diversi job precedenti Sequenze di job automatizzate (loop) Per pianificare un flusso di job, è necessario conoscere un po' di scripting, alcune nozioni di LSF ed un minimo di progettazione di algoritmi. L esempio applicativo sui flussi di job è stato preparato da A. Secco ed è reperibile sul sito www.cresco.enea.it 15

Flussi di Job In molti casi servirà avere esattamente il jobid come output di bsub: bsub... awk -F'<' '{print $2}' awk -F'>' '{print $1} Si potrebbe mettere il filtro in uno script dentro la propria home directory (jobid.sh): #!/bin/sh awk -F'<' '{print $2}' awk -F'>' '{print $1}' 16

Flussi di Job 17

Flussi di Job sub.sh: #!/bin/sh JOBID1=`bsub sleep 10./jobid.sh` JOBID2=`bsub sleep 10./jobid.sh` JOBID3=`bsub sleep 10./jobid.sh` export JOBID1 JOBID2 JOBID3 DEPEND1=`echo "done($jobid1) && done($jobid2) && done($jobid3)"` JOBID4=`bsub -w "$DEPEND1" -o done./done.sh./jobid.sh` export JOBID4 DEPEND2=`echo "exit($jobid1) exit($jobid2) exit($jobid3) ended($jobid4)"` JOBID5=`bsub -w "$DEPEND2" -o clean./clean.sh` done.sh: #!/bin/sh echo $JOBID1, $JOBID2, $JOBID3 done clean.sh: bkill $JOBID1 $JOBID2 $JOBID3 $JOBID4 >/dev/null 2>&1 echo game over 18

Ing. Fiorenzo Ambrosino, PhD - DTE-ICT-HPC 5/4/2017 19