Changes between Version 3 and Version 4 of ColasPBS


Ignore:
Timestamp:
Dec 13, 2010 6:13:32 PM (12 years ago)
Author:
lluis
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ColasPBS

    v3 v4  
    2929La infraestructura del ''Grupo de Meteorología de Santander'' (GMS) es la siguiente (diciembre 2010).
    3030
    31 '''NOTA IMPORTANTE:''' la ejecución de jobs se hace sólo desde la máquina llamada ''mar''
     31'''NOTA IMPORTANTE:''' la ejecución de jobs se hace sólo desde la máquina llamada ''mar'' ({{{ssh mar}}})
    3232
    3333 * '''nodos''':
     
    4040  * {{{/oceano/gmeteo/DATA}}}: almacenamiento de todos los datos (observaciones, GCMs, RCMs, ...)
    4141  * {{{/oceano/gmeteo/WORK}}}: directorio de trabajo
    42   * {{{/software}}}: directorio con todas las aplicaciones
     42  * {{{/software}}}: directorio con todas las aplicaciones. Por ejemplo:
     43    * /software/Matlab_R2009a/bin/matlab
     44    * /software/CentOS/5.2/R/2.11.1/bin/R
     45    * meditendo {{{source /software/ScientificLinux/4.6/etc/bashrc}}} se exporta en memoria el acceso a muchas aplicaciones instaladas en {{{/software}}}
    4346
    4447 * '''colas''' (no accesibles para tod@s):
     
    5558Las peticiones se hacen por un conjunto de ''flags''. El envio del job al gestor de la cola se puede hacer añadiendo todas las directrices en la línea de comandos de la aplicación, o por medio de una script (archivo de texto con instrucciones de sistema). En según que circumstancias nos va interesar hacerlo de una manera u otra, pero las dos son equivalentes. La estructura tipo de un script (llamado por ejemplo {{{job.pbs}}}) de colas tiene la siguiente estructura (se añaden todas las opciones a modo de ejemplo):
    5659
    57 {{{#!/bin/bash
     60{{{
     61#!/bin/bash
    5862### Job name
    5963#PBS -N [jobname]
     
    6973#PBS -o [rutaArchivo]
    7074### Dependecy
    71 #PBS -W afterany:[jobid]
     75#PBS -W depend=afterany:[jobid]
    7276### Number of nodes and processors per node
    7377#PBS -l nodes=[N]:ppn=[M]
    7478
    75 cd ${PBS_O_WORKDIR
    76 
    77 [aplicacion]}}}}
     79cd ${PBS_O_WORKDIR}
     80
     81[aplicacion]
     82}}}}
    7883
    7984En esta plantilla se muestra la sintaxis de los siguientes requerimientos/especificaciones:
     
    8590 * ''-e [rutaArchivo]:'' ruta del archivo en donde se quiere almacenar la salida estandard del error del job (si no se indica se construye en el directorio donde está el script el archivo ${PBS_JOBNAME}.e${PBS_JOBID})
    8691 * ''-o [rutaArchivo]:'' ruta del archivo en donde se quiere almacenar la salida estandard del job (si no se indica se construye en el directorio donde está el script el archivo ${PBS_JOBNAME}.o${PBS_JOBID})
    87  * ''-W afterany:[jobid]:'' el job se mandará a la cola cuando otro job anterior (el número [jobid]) termine su ejecución (no importa como termine)
     92 * ''-W depend=afterany:[jobid]:'' el job se mandará a la cola cuando otro job anterior (el número [jobid]) termine su ejecución (no importa como termine)
    8893 * ''-l nodes=[N]:ppn:[M] :'' número de nodos ({{{[N]}}}) y número de cores a coger de cada nodo ({{{[M]}}}), al cual se quiere mandar el job
    8994
    9095El job se mandaría a la cola con la instrucción:
    91 {{{qsub job.pbs}}}
     96  {{{
     97qsub job.pbs
     98}}}
    9299
    93100o bien por la línea de comandos en una línea como sigue:
    94 {{{qsub -N [jobname] -l walltime=[HH]:[MM]:[SS] -q [queueNAME] -M [emailCOUNT] -e [rutaArchivo] -o [rutaArchivo] -W afterany:[jobid] -l nodes=[N]:ppn=[M] [aplicacion]
    95 }}}
     101  {{{
     102qsub -N [jobname] -l walltime=[HH]:[MM]:[SS] -q [queueNAME] -M [emailCOUNT] -e [rutaArchivo] -o [rutaArchivo] -W afterany:[jobid] -l nodes=[N]:ppn=[M] [aplicacion]
     103}}}
     104
     105Para editar un archivo de colas se puede utilizar los programas: nano, vi, vim,...
    96106
    97107Todos los jobs tienen un número que los identifica que se llama [jobid]. En el clúster del GMS tiene el siguiente formato: [jobid].ce01.macc.unican.es. Cada job tiene associado los siguientes valores PBS:
     
    113123  * ''-u [usuario]'' muestra todos los jobs de [usuario]
    114124  Por lo general mestra en lista los trabajos que concidan con los criterios escogidos con la siguiente estructura:
    115 {{{[jobid] [usuario] [queue] [jobname] [SessID] [NDS] [TSK] [Req' Memory] [Req' time] [S] [Time]
     125   {{{
     126[jobid] [usuario] [queue] [jobname] [SessID] [NDS] [TSK] [Req' Memory] [Req' time] [S] [Time]
    116127}}}
    117128  Los estados [S] que puede tener un job en la cola son:
     
    127138
    128139=== Wall time insuficiente ===
    129 Tomamos un job sencillo de ejemplo escrito en un fichero llamado {{{prueba.pbs}}}. Este job deja una espera de 60 segundos.
    130 {{{#!/bin/bash
     140Tomamos un job sencillo de ejemplo escrito en un fichero llamado {{{prueba.pbs}}}. Este job lanza el script {{{espera.bash}}} el cual se espera los segundos dados por el primer argumento y escribe por pantalla el mensaje "Hola mundo".
     141{{{
     142#!/bin/bash
    131143### Job name
    132144#PBS -N prueba
     
    143155rm ${PBS_JOBNAME}.o*
    144156
    145 sleep 60}}}
     157./espera.bash 60
     158}}}
    146159
    147160Lanzando el job obtendríamos:
    148 {{{[lluis@mar CursilloPBS]$ qsub prueba.pbs
     161  {{{
     162[lluis@mar CursilloPBS]$ qsub prueba.pbs
    149163307065.ce01.macc.unican.es
    150164[lluis@mar CursilloPBS]$ qstat | grep prueba
     
    153167307065.ce01.macc.uni lluis    grid     prueba      23057     1  --    --  48:00 R   --    wn001
    154168[lluis@mar CursilloPBS]$ ls
    155 prueba.pbs}}}
     169prueba.pbs
     170}}}
    156171Pasados los 60 segundos...
    157 {{{[lluis@mar CursilloPBS]$ ls
    158 prueba.e307065  prueba.o307065  prueba.pbs}}}
     172  {{{
     173[lluis@mar CursilloPBS]$ ls
     174prueba.e307065  prueba.o307065  prueba.pbs
     175}}}
    159176Al mirar el contenido de los ficheros:
    160 {{{[lluis@mar CursilloPBS]$ cat prueba.o307065
     177  {{{
     178[lluis@mar CursilloPBS]$ cat prueba.o307065
    161179[lluis@mar CursilloPBS]$ cat prueba.e307065
    162 =>> PBS: job killed: walltime 43 exceeded limit 10}}}
     180=>> PBS: job killed: walltime 43 exceeded limit 10
     181}}}
    163182El tiempo dado al job es insuficiente.
    164183
    165184=== Mandar el job a un nodo en concreto ===
    166185Si se quiere mandar el job a un nodo en concreto se substituye la línea {{{PBS -l nodes=1:ppn=1}}} por:
    167    {{{#PBS -l nodes=wn[nnn].macc.unican.es
     186   {{{
     187#PBS -l nodes=wn[nnn].macc.unican.es
    168188}}}
    169189Donde [nnn] es el nodo requerido
     
    171191=== Ocupar toda la memória de un nodo con un único job ===
    172192Para ocupar toda la memória de un nodo con un único job, bastará con pedit todos los cores de un nodo de la cola. Así, si queremos toda la memória de los nodos de la cola {{{dinamica}}}, requeriríamos:
    173    {{{#PBS -l nodes=1:ppn=8
     193   {{{
     194#PBS -l nodes=1:ppn=8
    174195}}}
    175196
    176197=== Lanzar un job interactivo ===
    177198A la hora de hacer pruebas es muy útil abrir una sessión interactiva en un nodo del clúster. Esto se hace mandando un job interactivo. La sessión que se habra durará todo el tiempo que se quiera hasta que no se le mande la instrucción de salida {{{exit}}}. La sintaxis es:
    178    {{{qsub -I -l nodes=1 -q [queue]
     199   {{{
     200qsub -I -l nodes=1 -q [queue]
    179201}}}
    180202'''NOTA:''' A la hora de lanzar este tipo de jobs se tiene que ser muy consciente de que se está ocupando un nodo del clúster. Tendría que utilizarse sólo para realizar pruebas que no sean muy largas. Para lanzar jobs muy largos mejor prepararse una script de shell.
     203
     204=== Lanzar un job con dependencias ===
     205En este caso, no se lanzará una script {{{listar.bash}}} hasta que no termine la espera de 60 segundos (una vez corregido el walltime)
     206   {{{
     207   [lluis@mar CursilloPBS]$ date
     208Mon Dec 13 17:53:57 CET 2010
     209[lluis@mar CursilloPBS]$ qsub prueba.pbs
     210307079.ce01.macc.unican.es
     211[lluis@mar CursilloPBS]$ qsub -N listado -q grid -W depend=afterany:307079 -l nodes=1 ./listar.bash
     212307080.ce01.macc.unican.es
     213}}}
     214  La script 'listar.bash' no se ejecutará hasta que termine 'prueba.pbs' con pid 307079. Se sigue:
     215  {{{
     216[lluis@mar CursilloPBS]$ ls
     217espera.bash listar.bash  prueba.pbs
     218[lluis@mar CursilloPBS]$ date
     219Mon Dec 13 17:54:30 CET 2010
     220[lluis@mar CursilloPBS]$ ls
     221espera.bash  listar.bash  prueba.pbs
     222[lluis@mar CursilloPBS]$ date
     223Mon Dec 13 17:54:43 CET 2010
     224[lluis@mar CursilloPBS]$ ls
     225espera.bash  listar.bash  prueba.pbs
     226[lluis@mar CursilloPBS]$ date
     227Mon Dec 13 17:54:54 CET 2010
     228[lluis@mar CursilloPBS]$ ls
     229espera.bash  listar.bash  prueba.pbs
     230[lluis@mar CursilloPBS]$ date
     231Mon Dec 13 17:55:02 CET 2010
     232[lluis@mar CursilloPBS]$ ls
     233espera.bash      prueba.pbs   listar.bash   prueba.e307079     prueba.o307079
     234[lluis@mar CursilloPBS]$ date
     235Mon Dec 13 17:55:12 CET 2010
     236[lluis@mar CursilloPBS]$ ls
     237espera.bash listado.e307080 listado.o307080 listar.bash prueba.e307079 prueba.o307079 prueba.pbs
     238}}}
     239
     240== Monitorización del clúster ==
     241Hay dos maneras de observar la activada del clúster. Por línea de comandos se tiene la instrucción {{{pbs_nodes}}}
     242Por entorno web está instalado el [http://www.meteo.unican.es/ganglia/ ganglia]. En este entorno se muestra toda la actividad de los nodos (consumo de cpu, memoria, disocs duros, etc...) con una interfaz gráfica.
     243
     244== Recomendaciones ==
     245 * Cualquier trabajo que implique manejo de datos, archivos, etc... se tiene que hacer mediante un job de colas.
     246 * '''mar SOLO sirve para mandar trabajos a la cola'''
     247 * No utilizar jobs interactivos para tareas muy largas. Cuanto mas larga mas peligro que se termine por algún problema del nodo
     248 * Realizar jobs con ''checking points'', que en caso de caída del nodo no se tenga que volver a empezar desdel principio
     249 * Ajustar el ''walltime'' de los trabajos
     250 * Hay una wiki de las colas para el [http://www.meteo.unican.es/wiki/waimet/ColaPbs envia_matlab.sh]