Qsub tradicional

Ejecutar en la línea de comandos
qsub script_file

donde el archivo script_file contiene las directivas para el gestor de colas TORQUE y los comandos a ejecutar para poner el trabajo en marcha. En las siguientes secciones se detallan ciertos scripts. Una vez mandado el trabajo a la cola, obtendremos en pantalla el número de identificación del proceso, por ejemplo:

159.lgua00

Tras la ejecución, comprobar el contenido del archivo script.e159, en este caso para verificar los errores. La salida estándar del programa está en scrip.o159.

Trabajo en serie
En los trabajos en serie es altamente recomendable que se trabaje usando el espacio de disco local, la partición /scratch situada en cada nodo. El proceso de lectura y escritura es más rápido, por lo que el propio trabajo se ve beneficiado. Además, no se usa la red (NFS) en la lectura/escritura, por lo que el resto de los trabajos en otros nodos también irán más rápido y se evita saturar la red.

Los scripts se envían al sistema de colas con el comando

qsub script_file

o se puede usar el modo interactivo

qsub

Para seleccionar el tipo de arquitectura o nodo ver otras directivas.

Una plantilla de script que ejecuta el programa a.out es

#!/bin/bash
#PBS -l walltime=[val]
#PBS -l mem=[val]
#PBS -l nodes=1:ppn=1

#Nuestro directorio de scratch
scrt=/scratch/$USER/$PBS_JOBID

mkdir $scrt
#Copiamos los archivos al directorio scratch.
#Usaremos cp -r para copiar también subdirectorios.
cp $PBS_O_WORKDIR/* $scrt

#Nos movemos de directorio
cd $scrt

#Ejecutamos el programa
./a.out

#Movemos los archivos finales a nuestro home
outdir=escoger_nombre
mkdir $PBS_O_WORKDIR/$outdir
mv -f $scrt/* $PBS_O_WORKDIR/$outdir

#Borramos el directorio
rmdir $scrt

Las líneas que comienzan con #PBS son órdenes para el gestor de colas que seleccionan:

nodes: [opcional] Se puede usar para selecionar el nodo de cálculo (ejemplo: node=cn14).

mem: Memoria RAM reservada para el cálculo, medida en mb o gb (ejemplo: [val]=100mb).

walltime: Tiempo de microprocesador reservado en formato hh:mm:ss (ejemplo: [val]=24:00:00).

El resto de líneas que comienzan con # son comentarios.

En el script hay que sustituir escoger_nombre por el del directorio donde queremos guardar los resultados. La variable $USER devuelve el nombre del usuario, $PBS_O_WORKDIR el directorio de trabajo desde donde se ejecuta el comando qsub y $PBS_JOBID el número de identificación del trabajo.

Si el programa a.out no está en un directorio del $PATH, e.g. /usr/local/bin sino en nuestro directiorio es necesario usar ./a.out .

Ejemplo de trabajo en serie.

Tras la ejecución, comprobar el contenido del archivo script.eXXX para verificar los errores.

Las órdenes para PBS se pueden indicar directamente en el comando, en vez de en el script, usando a la hora de enviar el trabajo

qsub -l nodes=[name],mem=[val],walltime=[val] script

Trabajo en paralelo
Es recomendable lanzar los trabajos a 4 procesadores o 8 procesadores por nodo (ppn=4 o ppn=8), lo cual reduce los tiempos de espera. También es altamente recomendable que los trabajos escriban localmente en los nodos cuando sea posible.

Si el trabajo corre en un único nodo o, corriendo en más nodos, los microprocesadores no comparten archivos, el trabajo puede escribir sobre el disco local. Los scripts se envían al sistema de colas con el comando

qsub script_file

o se puede usar el modo interactivo

qsub

Para seleccionar el tipo de arquitectura o nodo ver otras directivas.

Una plantilla de script que ejecuta el programa a.out en paralelo es

#!/bin/bash
#PBS -l nodes=[val]:ppn=[val]
#PBS -l walltime=[val]
#PBS -l mem=[val]

#Nuestro directorio de scratch
scrt=/scratch/$USER/$PBS_JOBID

#Creamos el directorio
mkdir $scrt
#Copiamos los archivos al directorio scratch
#Usaremos cp -r $scrt para copiar también subdirectorios.
cp $PBS_O_WORKDIR/* $scrt

#Nos movemos de directorio
cd $scrt

#Ejecutamos el programa
mpirun a.out

#Movemos los archivos finales
outdir=escoger_nombre
mkdir $PBS_O_WORKDIR/$outdir
mv -f $scrt/* $PBS_O_WORKDIR/$outdir

#Borramos el directorio
rmdir $scrt

Las líneas que comienzan con #PBS son órdenes para el gestor de colas que seleccionan:

nodes: Número de nodos en los que se va a ejecutar el programa (ejemplo [val]=2).

ppn: Número de microprocesadores por nodo que va a usar el programa (ejemplo [val]=4).

mem: Memoria RAM reservada para el cálculo, medida en mb o gb (ejemplo: [val]=100mb).

walltime: Tiempo de microprocesador reservado en formato hh:mm:ss (ejemplo: [val]=24:00:00).

En el script hay que sustituir escoger_nombre por el del directorio donde queremos guardar los resultados la variable $USER devuelve el nombre del usuario, $PBS_O_WORKDIR el directorio de trabajo desde donde se ejecuta el comando qsub y $PBS_JOBID el número de identificación del trabajo.

Ejemplo de trabajo en paralelo usando el disco local /scratch .

Si el trabajo va a correr en varios nodos y los procesos comparten archivos han de ejecutarse desde nuestro /gscratch, que es un sistema de archivos de alto rendimiento compartido por todos los nodos (ver coniguración). El script que realiza esto es

#!/bin/bash
#PBS -l nodes=[val]:ppn=[val]
#PBS -l walltime=[val]
#PBS -l mem=[val]

#Nuestro directorio de scratch
scrt=/gscratch/$USER/$PBS_JOBID

#Creamos el directorio
mkdir $scrt
#Copiamos los archivos al directorio scratch
#Usaremos cp -r $scrt para copiar también subdirectorios.
cp $PBS_O_WORKDIR/* $scrt

#Nos movemos de directorio
cd $scrt

#Ejecutamos el programa
mpirun a.out

#Movemos los archivos finales
outdir=escoger_nombre
mkdir $PBS_O_WORKDIR/$outdir
mv -f $scrt/* $PBS_O_WORKDIR/$outdir

#Borramos el directorio
rmdir $scrt

Ejemplo de trabajo en paralelo usando gscratch.

Tras la ejecución, comprobar el contenido del archivo script.eXXX para verificar los errores.

Las órdenes para PBS se pueden indicar directamente en el comando, en vez de en el script, usando a la hora de enviar el trabajo

qsub -l nodes=[val]:ppn=[val],mem=[val],cput=[val] script