Laboratorio e Centro Calcolo: cluster gauss

Sul server venere è installato SLURM, Simple Linux Utility for Resource Management.
Tramite SLURM gli utenti possono accedere al cluster gauss dedicato al calcolo intensivo. Il cluster è costituito da due nodi 
gauss0, con 8 core (2 cpu Intel Xeon Quad-Core 2.4 Ghz) e 32 GB RAM
gauss1, con 4 core (4 cpu AMD Opteron serie 8000 3Ghz) e 16 GB di RAM.

Chi può utilizzare gauss
Gli utenti dei server dipartimentali che desiderano utilizzare il cluster per il calcolo devono inviare un e-mail a CentroCalcolo@mat.uniroma1.it chiedendo l'attivazione di un account personale sul server gauss. Per gli studenti e per i collaboratori esterni, la richiesta deve essere inviata da un docente del dipartimento.

Prime informazioni per utilizzare gauss
I programmi che si vogliono mandare in esecuzione sulle code del cluster per il calcolo (gauss), devono essere sviluppati (scritti, compilati e testati) sul server venere. È possibile mandare in esecuzione su gauss programmi scritti in c, c++, fortran e programmi generati compilando M-files Matlab. Sono disponibili le seguenti librerie: BLAS, Electric Fence, Givaro, LinBox, OpenMPI, Valgrind. Su richiesta degli utenti interessati potranno essere installati altri programmi e librerie.

E' possibile mandare in esecuzione programmi sul nodo gauss0 o sul nodo gauss1.
I passi necessari per eseguire un programma sono:

  1. collegarsi al server venere;
  2. copiare l'eseguibile e i file con i dati in input sulla directory /gauss0/home/username (per utilizzare il nodo gauss0), o sulla directory /gauss1/home/username (per utilizzare il nodo gauss1);  username è il nome dell'utente  (attenzione: le directory /gauss0/home/ e /gauss1/home/ NON sono salvate nei backup);
  3. posizionarsi sulla directory /gauss0/home/username o /gauss1/home/username;
  4. mandare in esecuzione il programma utilizzando i comandi messi a disposizione da SLURM.

    Per avere l'elenco completo dei comandi, consultare l'help in linea sul server  venere alla voce slurm (digitare man slurm).
    Alcuni dei comandi disponibili sono:

       srun          per inviare jobs sul cluster per il calcolo
       sbatch      per sottomettere un batch script sul cluster per il calcolo
       squeue     per visualizzare la coda dei jobs sul cluster per il calcolo
                         (ogni utente può visualizzare solo i propri job)
       scancel    per interrompere un jobs sul cluster per il calcolo
       sinfo          per visualizzare informazioni relative al cluster per il calcolo

Vedi anche Introduzione ai cluster di calcolo del Dipartimento di Matematica

Qualche esempio
  • Per inviare un programma sulle code di esecuzione del cluster 
  1. scrivere uno shell script di nome ad esempio run_mio_prog.sh contenente le seguenti righe:

          #!/bin/sh
          mio_prog  < in_mioprog  > out_mioprog

    dove   
       mio_prog          è il nome del file da eseguire
       in_mioprog       è il nome del file contenente i dati in input
       out_mioprog     è il nome del file contenente i dati in output

  2. inviare il comando

    sbatch   run_mio_prog.sh

    Se si desidera ricevere via e-mail la notifica di inizio/fine/fallimento del programma, inviare il comando

    sbatch  --mail-type=ALL   --mail-user=indirizzo_email   run_mio_prog.sh

    dove  indirizzo_email  è l'indirizzo e-mail al quale deve essere inviata la notifica.

    Nell'esempio sopra, le opzioni per sbatch  (--mail-type, --mail-user) sono passate da linea di comando. Potrebbe risultare più comodo scrivere le opzioni direttamente dentro lo shell script. In questo caso il file run_mio_prog.sh diventerebbe:

          #!/bin/sh
          #SBATCH  --mail-type=ALL   --mail-user=indirizzo_email
          mio_prog  < in_mioprog  > out_mioprog

    ed il comando da inviare sarebbe semplicemente

    sbatch   run_mio_prog.sh

  • Per inviare un programma parallelo sulle code di esecuzione del cluster
  1. scrivere uno shell script di nome ad esempio run_mio_prog_parallelo.sh contenente le seguenti righe:

          #!/bin/sh
          srun   -c num   -i  in_mioprog    -o  out_mioprog   mio_prog_parallelo

    dove   
       num 
    è il numero di processori richiesti per l'esecuzione del job (1 <= num <= 8)
       mio_prog          è il nome del file da eseguire
       in_mioprog       è il nome del file contenente i dati in input
       out_mioprog     è il nome del file contenente i dati in output

  2. inviare il comando

    sbatch   -c num   run_mio_prog_parallelo.sh

    Se si desidera ricevere via e-mail la notifica di inizio/fine/fallimento del programma, inviare il comando

    sbatch    -c num    --mail-type=ALL    --mail-user=indirizzo_email    run_mio_prog_parallelo.sh

    dove  indirizzo_email  è l'indirizzo e-mail al quale deve essere inviata la notifica.

    Potrebbe risultare più comodo scrivere le opzioni per il comando sbatch direttamente dentro lo shell script. In questo caso il file run_mio_prog_parallelo.sh diventerebbe:

          #!/bin/sh
          #SBATCH  --mail-type=ALL   --mail-user=indirizzo_email
          #SBATCH  -c num
          srun   -c num   -i  in_mioprog    -o  out_mioprog   mio_prog_parallelo

    ed il comando da inviare sarebbe semplicemente

    sbatch   run_mio_prog_parellelo.sh

  • Per inviare  programma MATLAB sulle code di esecuzione del cluster
  1. sviluppare il programma e generare l'eseguibile compilando l'M-file con il comando:

    mcc   -m   mio_prog_matlab.m

    dove   
       mio_prog_matlab.m       è il nome dell'M-files
       mio_prog_matlab           è il nome del file eseguibile generato dal compilatore mcc

    Per avere maggiori informazioni sull'utilizzo del compilatore mcc e sulle opzioni disponibili consultare l'help in linea richiambile dal menu di Matlab.

    Prima di inviare il programma in esecuzione su gauss0 o gauss1 si consiglia di testarlo su Venere. Per eseguire il programma mio_prog_matlab su Venere è necessario scrivere uno shell script di nome ad esempio  test_mio_prog_matlab.sh contenente le seguenti righe:

          #!/bin/sh
          MCRROOT="/usr/local/matlab/"
          LD_LIBRARY_PATH=.:${MCRROOT}/runtime/glnxa64 ;
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MCRROOT}/bin/glnxa64 ;
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MCRROOT}/sys/os/glnxa64;
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MCRROOT}/sys/opengl/lib/glnxa64;
          export LD_LIBRARY_PATH;
          ./mio_prog_matlab > mio_prog_matlab.output 

    ed inviare comando 

    ./test_mio_prog_matlab.sh

    Attenzione: per eseguire file test_mio_prog_matlab.sh si devono avere "diritti" di escuzione sul file.

  2. copiare l'eseguibile mio_prog_matlab sulla directory /gauss0/home/username (per utilizzare il nodo gauss0) oppure sulla directory /gauss1/home/username (per utilizzare il nodo gauss1). 
    username è il nome dell'utente.

  3. scrivere uno shell script di nome ad esempio 
    run_mio_prog_matlab.sh contenente le seguenti righe:

          #!/bin/sh
          MCRROOT="/usr/local/mcr-matlab/"
          LD_LIBRARY_PATH=.:${MCRROOT}/runtime/glnxa64 ;
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MCRROOT}/bin/glnxa64 ;
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MCRROOT}/sys/os/glnxa64;
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MCRROOT}/sys/opengl/lib/glnxa64;
          export LD_LIBRARY_PATH;
          ./mio_prog_matlab > mio_prog_matlab.output 
         

    ed eseguire il programma sulle code di esecuzione del cluster inviando il comando:

    sbatch   run_mio_prog_matlab.sh      per  inviare su gauss0      oppure  
    sbatch  -p mat-nostop  run_mio_prog_matlab.sh  per inviare su gauss1
     

  4. se il programma richiede molta memoria, nello shell script run_mio_prog_matlab.sh, prima della riga 
             ./mio_prog_matlab > mio_prog_matlab.output

    aggiungere la riga
           export  MCR_CACHE_ROOT=/gauss0/home/username/CACHE-DIR     (per gauss0)
    oppure 
           export  MCR_CACHE_ROOT=/gauss1/home/username/CACHE-DIR     (per gauss1)
    dove username è il nome dell'utente
     

  • Per avere informazioni sui tempi di CPU:

    /usr/bin/time -p   srun   -c num   -i in_mio_prog   -o out_mio_prog   mio_prog

    dove
       num è il numero di processori richiesti per l'esecuzione del job (1 <= num <= 8)
       mio_prog            è il nome del file da eseguire
       in_mio_prog       è il nome del file contenente i dati in input
       out_mio_prog    è il nome del file contenente i dati in output

    Per avere maggiori informazioni sul comando /usr/bin/time e sulle opzioni utilizzabili, consultare il manuale in linea ("man time").

  • Per inviare un programma che utilizza le librerie OpenMPI:
  1. scrivere uno shell script di nome ad esempio run_mio_prog_mpi.sh contenente le seguenti righe:

          #!/bin/sh
          mpirun   -np num  mio_prog_mpi   < in_mio_prog_mpi   > out_mio_prog_mpi 

    dove
       num  è il numero di processori richiesti per l'esecuzione del job (1 <= num <= 8)
       mio_prog_mpi             è il nome del file da eseguire
       in_mio_prog_mpi       è il nome del file contenente i dati in input
       out_mio_prog_mpi     è il nome del file contenente i dati in output

  2. inviare il comando

    sbatch   -c num  run_mio_prog_mpi.sh

    oppure, per ricevere notifica via e-mail

    sbatch   -c num --mail-type=ALL  --mail-user=indirizzo_email   run_mio_prog_mpi.sh

  • Per avere informazioni sullo stato delle CPU:

    sinfo   -o   %C

    Verrà visualizzato il numero di CPUs Allocated/Idle/Other/Total.
    Per maggiori informazioni consultare l'help in linea con il comando "man sinfo".

Documentazione
Per ulteriori informazioni si consiglia di consultare l'help in linea e la documentazione disponibile sul sito https://computing.llnl.gov/linux/slurm/documentation.html

Vedi anche Introduzione ai cluster di calcolo del Dipartimento di Matematica