User Tools

Site Tools


cluster

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cluster [2019/10/13 11:03]
osotolongo [Como usar el cluster sin morir en el intento]
cluster [2020/08/04 10:58] (current)
Line 417: Line 417:
  
 {{::email_done.png|}} {{::email_done.png|}}
 +
 +
 +===== Paralelizando un archivo de ordenes =====
 +
 +Podemos abstraer todo esto en un script simple para paralelizar las ordenes escritas en un solo archivo.
 +
 +Ejemplo, este script,
 +
 +<code perl slurmize.pl>
 +#!/usr/bin/perl
 +use strict;
 +use warnings;
 +
 +#Cambiar aqui el tiempo maximo de ejecucion
 +my $time = '3:0:0';
 +
 +my $ifile = $ARGV[0];
 +my $wdir = 'slurm';
 +mkdir $wdir;
 +my $count = 0;
 +open IPDF, "<$ifile" or die "Could not open input file\n$!\n";
 +while (<IPDF>) {
 +        $count++;
 +        my $ofile = sprintf ("%s_%04d", 'sorder', $count);
 +        $ofile = $wdir.'/'.$ofile;
 +        open ORD, ">$ofile";
 +        print ORD '#!/bin/bash'."\n";
 +        print ORD '#SBATCH -J '.$ifile."\n";
 +        print ORD '#SBATCH -c 8'."\n";
 +        print ORD '#SBATCH --mem-per-cpu=4G'."\n";
 +        print ORD '#SBATCH --time='.$time."\n"; #si no ha terminado en X horas matalo
 +        print ORD '#SBATCH --mail-type=FAIL,TIME_LIMIT,STAGE_OUT'."\n"; #que mande email solo cuando falle
 +        print ORD '#SBATCH --mail-user='."$ENV{'USER'}\n";
 +        print ORD '#SBATCH -p fast'."\n";
 +        print ORD '#SBATCH -o '.$wdir.'/'.$ifile.'-%j'."\n";
 +        print ORD "srun $_\n";
 +        close ORD;
 +        system("sbatch $ofile");
 +}
 +close IPDF;
 +my $orderfile = $wdir.'/'.$ifile.'_end.sh';
 +open ORD, ">$orderfile";
 +print ORD '#!/bin/bash'."\n";
 +print ORD '#SBATCH -J '.$ifile."\n";
 +print ORD '#SBATCH --mail-type=END'."\n"; #email cuando termine
 +print ORD '#SBATCH --mail-user='."$ENV{'USER'}\n";
 +print ORD '#SBATCH -o '.$wdir.'/'.$ifile.'_end-%j'."\n";
 +print ORD ":\n";
 +close ORD;
 +my $xorder = 'sbatch --dependency=singleton'.' '.$orderfile;
 +exec($xorder);
 +</code>
 +
 +lee un archivo de entrada y ejecuta cada linea como una tarea de SLURM. Para esto basta hacer,
 +
 +<code bash>
 +$ ./slurmize.pl ordenes.txt
 +</code>
 +
 +donde //ordenes.txt// es cualquier listado de tareas.
 +
 +==== ejemplo ====
 +  * Las ordenes deben ejecutarse dentro del directorio /nas/ para que el sistema de archivos sea accesible a todos los nodos.
 +  * Escribo las ordenes dentro de un archivo (en este caso //test//)
 +  * Ejecuto el script dando como argumento el nombre del archivo de ordenes
 +  * Las tareas seenvian a los nodos del cluster
 +  * El output (STDOUT & STDERR) queda dentro del directorio //slurm// en un archivo distinto para cada proceso
 +  * Tambien pueden mirarse los scripts individuales que quedan en el mismo directorio
 +
 +
 +<code bash>
 +[osotolongo@detritus slurmit]$ pwd
 +/nas/osotolongo/slurmit
 +[osotolongo@detritus slurmit]$ cat test
 +sleep 2000;hostname
 +sleep 2000;hostname
 +sleep 2000;hostname
 +[osotolongo@detritus slurmit]$ ./slurmize.pl test
 +Submitted batch job 129583
 +Submitted batch job 129584
 +Submitted batch job 129585
 +Submitted batch job 129586
 +[osotolongo@detritus slurmit]$ squeue | grep test
 +            129586      fast     test osotolon PD       0:00      1 (Dependency)
 +            129583      fast     test osotolon  R       0:06      1 brick02
 +            129584      fast     test osotolon  R       0:06      1 brick02
 +            129585      fast     test osotolon  R       0:06      1 brick02
 +[osotolongo@detritus slurmit]$ tree
 +.
 +├── slurm
 +│   ├── sorder_0001.sh
 +│   ├── sorder_0002.sh
 +│   ├── sorder_0003.sh
 +│   ├── test-129583
 +│   ├── test-129584
 +│   ├── test-129585
 +│   └── test_end.sh
 +├── slurmize.pl
 +└── test
 +
 +1 directory, 9 files
 +
 +</code>
  
cluster.1570964590.txt.gz · Last modified: 2020/08/04 10:48 (external edit)