wiki:ColaPbs

Version 1 (modified by antonio, 13 years ago) (diff)

--

Nuevas instrucciones!

El proceso de enviar un fichero Matlab al cluster se ha simplificado a lo siguiente:

Hacer una vez:

. Editar el fichero .bashrc del home para incluir al final las lineas:{{{ export EMAIL="tuemail@…" source /software/etc/bashrc}}}

Cada vez que se quiera mandar un .m al cluster:

  1. conectarse a OCEANO por ssh
  2. Ejecutar {{{ enviamatlab mifichero.m}}}
  3. Para ver como estan las colas y ver si el trabajo ha entrado a correr, ejecutar:{{{ colas}}}

TableOfContents(4)?

En estos momentos está operativo el envío de trabajos al cluster de eela. Este envío lo realizaremos a través de nuestro usuario de OCEANO ya que todos los miembros del grupo tenemos un usuario definido en esta máquina. El cluster está compuesto por 7 equipos capaces de realizar dos trabajos simultáneos cada uno, debido a las licencias de Matlab. La máquina que se encargará de distribuir los trabajos enviados al cluster será eela02.macc.unican.es (submitting machine). Los nombres de las máquinas del cluster son:

  • eela01.macc.unican.es (esta máquina está dada de baja, por el momento)
  • eela02.macc.unican.es
  • eela03.macc.unican.es
  • eela04.macc.unican.es (esta máquina está dada de baja, por el momento)
  • eela06.macc.unican.es
  • eela07.macc.unican.es
  • eela08.macc.unican.es (esta máquina está reservada para ENSEMBLES)

Para este tipo de trabajos hay dos colas:

  • macc con un maximo de 10 jobs (con limite de 48 horas de CPU y 72 de estancia en el equipo
  • macc_long con un maximo de 4 jobs (sin limite de tiempo de cpu)

Envío de trabajos matlab:

Para enviar un trabajo al cluster debemos establecer una conexión con oceano, ya que será desde esta máquina desde la que ejecutaremos el script.

Conexión a oceano

La conexión a oceano la realizaremos mediante SSH con nuestra cuenta de usuario. Para ello necesitamos conocer el nombre de la máquina a la cual nos queremos conectar (oceano.macc.unican.es), nuestro nombre de usuario y nuestra contraseña. De este modo nos situaremos en nuestra carpeta de usuario de oceano (equivalentemente '/oceano/gmeteo/users/nombreusuario/' ). En caso de desconocer el nombre de usuario o la contraseña podeis poneros en contacto con Antonio.

Envío de trabajos al cluster

Una vez conectados a oceano, para enviar el trabajo debemos situarnos en el directorio en el cual se encuentre el script que queremos ejecutar. Para realizar el envío Fernando ha creado la función enviamatlab.sh. Esta función puede ejecutarse con uno o dos argumentos.

Enviamatlab con un argumento

En este caso el argumento de la función es el nombre del script a ejecutar sin la extensión '.m' (en el ejemplo: test). Una vez ejecutamos la función nos aparecerá por pantalla una serie de mensajes, como se muestra en el ejemplo, en los que se muestra la información del trabajo enviado. En la última línea se muestra el identificador del trabajo (JobId?, en el ejemplo 6494) seguido del nombre de la máquina eela02.macc.unican.es. Este identificador nos servirá para informarnos del estado del trabajo.

Los mensajes devueltos por pantalla hacen referencia a distintas caraterísticas del trabajo. Entre ellas cabe destacar el walltime que es el tiempo máximo de duración permitido al trabajo. En caso de superar este tiempo el trabajo se detiene y no llega a finalizarse. En caso de que queramos un margen amplio de tiempo (3 días, etc..) debemos modificar este argumento. También es importante el PBS -M ya que es la dirección de correo electrónico a la cual va a mandar los mensajes de salida. En caso de que esta dirección sea errónea debeis decírselo a Fernando.

[fernando@oceano ejemat]$ enviamatlab test
#!/bin/bash
#PBS -N test
#PBS -q macc
#PBS -l nodes=1:ppn=1
#PBS -l walltime=48:00:00
#PBS -m bea
#PBS -M garciatf@unican.es
#PBS -r n
#PBS -V
echo
matlab -logfile 250107-17.33.24.log -r "cd /oceano/gmeteo/users/fernando/ejemat;pwd;test;" -nosplash -nodesktop -nojvm
exit 0
Envio del job desde /oceano/gmeteo/users/fernando/ejemat
6494.eela02.macc.unican.es

Enviamatlab con dos argumentos

En este caso los argumentos de la función serán el nombre del script y la máquina a la cual queremos enviar el trabajo. Este argumento nos será útil en los casos en los que el planificador de trabajos mande el nuestro a una máquina que ya esté ocupada y existan máquinas libres.

En el siguiente ejemplo mostramos como solucionar este problema utilizando el segundo argumento de la función ('-1 host=eela01.macc.unican.es') forzando así a que el trabajo se realice en la máquina eela01.macc.unican.es.

[fernando@oceano ejemat]$ enviamatlab test '-l host=eela01.macc.unican.es'
#!/bin/bash
#PBS -N test
#PBS -q macc
#PBS -l nodes=1:ppn=1
#PBS -l walltime=48:00:00
#PBS -m bea
#PBS -M garciatf@unican.es
#PBS -r n
#PBS -V
echo
matlab -logfile 250107-17.36.17.log -r "cd /oceano/gmeteo/users/fernando/ejemat;pwd;test;" -nosplash -nodesktop -nojvm
exit 0
Envio del job desde /oceano/gmeteo/users/fernando/ejemat
-l host=eela01.macc.unican.es
6495.eela02.macc.unican.es

Información del estado del trabajo:

Una vez hemos enviado el trabajo al cluster, podemos consultar el estado del mismo mediante:

  • un documento creado en el directorio del usuario en el que se muestra en tiempo real la salida por pantalla de Matlab y cuyo nombre se construye del siguiente modo: nombre del script+fecha de ejecución+'.log'. Para ver este documento desde oceano podemos usar el comando 'cat nombre+fecha.log'.
  • un e-mail que recibirán los usuarios con cuenta dentro de unican o del ifca al finalizar su trabajo, con asunto: PBS JOBJOBID.eela02.macc.unican.es.
  • dos ficheros de resultados que se crean el el directorio del usuario y en los que se refleja la salida estándar de Matlab y los mensajes de error. Estos ficheros se nombran del siguiente modo: - salida: nombre del script.m+o+JobId?. - errores: nombre del script.m+e+JobId?.

Desde oceano podemos utilizar distintos comandos u órdenes para consultar el estado de nuestro trabajo, de la cola, etc... Introduzcamos los que considero más útiles:

qstat: Este comando nos muestra por pantalla una tabla en la podemos observar el estado de la cola de trabajos. En caso de que no devuelva nada se entiende que no existe ningún trabajo activo ni en espera. Este comando se escribe del siguiente modo: ssh +nombre de usuario+@… +qstat -n.

[fernando@oceano ejemat]$ ssh fernando@eela02.macc.unican.es qstat -n
eela02.macc.unican.es:
                                                            Req'd  Req'd   Elap
Job ID          Username Queue    Jobname    SessID NDS TSK Memory Time  S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
6506.eela02.mac fernando macc     test        26524   1  --    --  48:00 R 00:00
   eela08
6507.eela02.mac fernando macc     test         1695   1  --    --  48:00 R   --
   eela07
6508.eela02.mac fernando macc     test         1952   1  --    --  48:00 R   --
   eela07
6509.eela02.mac fernando macc     test         7143   1  --    --  48:00 R   --
   eela06
6510.eela02.mac fernando macc     test         7388   1  --    --  48:00 R   --
   eela06
6511.eela02.mac fernando macc     test        19103   1  --    --  48:00 R   --
   eela04
6512.eela02.mac fernando macc     test        19347   1  --    --  48:00 R   --
   eela04
6513.eela02.mac fernando macc     test        24406   1  --    --  48:00 R   --
   eela03

Algunos de los parámetros mas representativos:

  • Job id: muestra el identificador del trabajo (asignado por PBS)
  • Username: el propietario del trabajo (usuario que lo envió)
  • Queue: la cola en la que reside el trabajo
  • Jobname: el nombre del trabajo dado por el usuario o establecido por PBS en caso de no especificarse
  • NDS: indica el número de nodos solicitados
  • TSK: el número de tareas solicitadas
  • Req'd Memory: la cantidad de memoria solicitada
  • Req'd Time: la cantidad de tiempo de reloj (wallclock) solicitado
  • S: el estado del trabajo:
    • E el trabajo está saliendo después de finalizar su ejecución
    • H el trabajo está capturado
    • Q el trabajo está en cola, elegible para su ejecución
    • R el trabajo está ejecutándose
    • T el trabajo está en transición (moviéndose a otra localización)
    • W el trabajo está a la espera de alcanzar el tiempo de ejecución
    • S el trabajo está suspendido
  • Elap Time: el tiempo de CPU utilizado

checkjob: Este comando nos muestra por pantalla la información del trabajo que le especifiquemos mediante el JobId?. Se ejecuta del siguiente modo:

checkjob + JobId?

[fernando@oceano ejemploMatlab]$ checkjob 5907
checking job 5907
State: Running
Creds:  user:fernando  group:gmeteo  class:macc  qos:DEFAULT
WallTime: 00:00:11 of 00:27:00
SubmitTime: Thu Jan 11 10:51:30
  (Time Queued  Total: 00:00:01  Eligible: 00:00:01)
StartTime: Thu Jan 11 10:51:31
Total Tasks: 1
Req[0]  TaskCount: 1  Partition: DEFAULT
Network: [NONE]  Memory >= 0  Disk >= 0  Swap >= 0
Opsys: [NONE]  Arch: [NONE]  Features: [NONE]
Allocated Nodes:
[eela08.macc.unican.e:1]
IWD: [NONE]  Executable:  [NONE]
Bypass: 0  StartCount: 1
PartitionMask: [ALL]
Reservation '5907' (-00:00:11 -> 00:26:49  Duration: 00:27:00)
PE:  1.00  StartPriority:  1

Tracejob: Este comando da información sobre los tiempos de trabajo del trabajo especificado por el JobId?, después de haber terminado su ejecución. La llamada a esta función será:

tracejob + JobId?.

[fernando@oceano ejemat]$ tracejob 6141
Job: 6141.eela02.macc.unican.es
01/15/2007 17:33:43  S    enqueuing into macc, state 1 hop 1
01/15/2007 17:33:43  S    Job Queued at request of fernando@eela02.macc.unican.es, owner = fernando@eela02.macc.unican.es, job name = prueba_macc, queue = macc
01/15/2007 17:33:44  S    Job Modified at request of root@eela02.macc.unican.es
01/15/2007 17:33:44  S    Job Run at request of root@eela02.macc.unican.es
01/15/2007 17:33:44  S    Job Modified at request of root@eela02.macc.unican.es
01/15/2007 17:34:03  S    Exit_status=0 resources_used.cput=00:00:04 resources_used.mem=0kb resources_used.vmem=0kb resources_used.walltime=00:00:19
01/15/2007 17:34:03  S    dequeuing from macc, state 5

qdel: Este comando lo usaremos para eliminar un trabajo de la cola antes de que finalice. Para ello escribiremos:

. ssh +nombre de usuario+@… +qdel +JobId?.

[fernando@oceano ejemploMatlab]$ ssh fernando@eela02.macc.unican.es qdel 5911

qsig: Este comando lo usaremos cuando se nos quede colgado un trabajo y no responda al comando qdel. Llamaremos a esta función con:

. ssh +nombre de usuario+@… +qsig -s+ TERM +JobId?.

[fernando@oceano ejemploMatlab]$ ssh fernando@eela02.macc.unican.es qsig -s TERM 5915

Otras herramientas:

  • qalter: Modificación atributos de un trabajo en cola y pendiente de ejecución.
  • qhold: Marca un trabajo como no elegible para su ejecución.
  • qlrs: Libera un trabajo del estado de espera establecido con el comando qhold.
  • qorder: Cambiar el orden (o reordenar) de dos trabajos en espera de ser ejecutados.
  • qmove: Para mover trabajos de una cola a otra.
  • man pbs_resources: Nos da información sobre los requerimientos que podemos usar.

Observaciones Importantes:

En este apartado podéis escribir las observaciones, dificultades o aclaraciones que encontréis o creáis necesarias a la hora de usar el cluster.

  • A la hora de marcar las rutas en Linux debemos usar los elementos propios de este sistema. En particular debemos usar la '/' en lugar de la '\' usada habitualmente en Windows. Es importante crear los scripts de modo que puedan ser entendidos en Linux. Para consultar dudas podéis preguntar a Chus, Antonio, etc.
  • Debemos tener en cuenta que estamos trabajando en oceano y, por lo tanto, podemos no tener las actualizaciones necesarias de MeteoLab? en nuestro usuario. Puede ser conveniente que, para la ejecución de algunas funciones, copiemos la versión actualizada de la toolbox a nuestro usuario de oceano.
  • Las funciones de MeteoLab? ya están escritas de modo que puedan ejecutarse en Linux y Windows indistintamente (en principio).
  • Chus ha notado que en las llamadas a las funciones anteriormente definidas (genéricamente: ssh+nombre de usuario+@…+función+JobId? ), realmente basta con escribir: ssh eela02+(nombre de la función)+(parámetros de la función)+JobIb?, ya que el sistema contiene el resto de la información.
  • Para poder ejecutar funciones en eela debemos tener en el archivo en el cual ejecutemos el script la función enviamatlab.sh que ha generado Fernando. Si alguien no la tiene, puede pedírnosla a Fernando, Sixto, Dolores, etc.... Una vez copiada en el directorio correspondiente y después de habernos asegurado de que está correctamente implementada, es decir, tiene nuestro nombre de usuario y las demás variables que nos identifican correctamente, podemos ejecutarla sin problema alguno siguiendo las instrucciones explicadas anteriormente.
  • Es importante tener en cuenta que el Matlab en el que se arranca el proceso no tiene porque tener inicializada MeteoLab? y que, por lo tanto, debemos añadir al script una orden para que la inicialice. Bastaría con añadir al inicio del script la ruta de acceso al MeteoLab? que utilicemos, ejecutar el programa init (que arranca la toolbox) y volver al directorio en el que queremos trabajar. De este modo podremos trabajar con todas las funciones de MeteoLab?.
  • Ya no existen problemas con las licencias en el cluster, por lo tanto una máquina puede ejecutar trabajos de varios usuarios simultáneamente. Esto implica que no es necesario pasar el segundo argumento del script enviamatlab.
  • Aunque se indica en la primera parte de esta página, la máquina eela05 no se usa para enviar trabajos al cluster, por lo que cualquier trabajo enviado a esta máquina dará un error.