Envío de Jobs

El departamento de Bioinformática en Enfermedades Infecciosas tiene infraestructura de computo especializado que es accesible para cualquier investigador,alumno,técnico del INSP que lo solicite.
Al ser una infraestructura compartida por varios usuarios, se debe PLANIFICAR los procesos que requieran ejecutarse. El departamento de bioinformática usa un planificador para encolar los procesos(tareas/jobs) y estos sean ejecutados en orden de acuerdo a la disponibilidad de recursos, tiempo de espera en la cola y prioridad asignada.

SGE(Sun Grid Engine)

SGE es un scheduler (planificador) que gestiona/administra los recursos computacionales, de modo que se utilicen los dichos recursos de la manera más eficiente posible.

> ¿De qué se encarga SGE?

  • Mantiene la información de los recursos y sus disponibilidades para actualizar las colas.
  • Recibe las peticiones de los usuarios (job) y las ordena por prioridad.
  • Determina cual job puede correr en donde cuando los recursos están disponibles.
  • Se encarga de revisar los estados de estos trabajos.

> Buen uso de la infraestructura de cómputo

  • No se debe correr job directos sobre el servidor, para realizar sus tareas: usan un job interactivo.
  • No esperes a que un recurso este disponible para enviar tus job (SGE ejecuta los jobs cuando esten libres los recursos)
  • Prueba tus jobs antes de enviarlos

> Comandos básicos SGE

Comandos básicos que permiten tener un panorama de la infraestructura,status de nuestros job y carga en el sistema de colas

Comando Descripción
qhost Muestra los recursos disponibles (TOTALES DEL SERVIDOR)
qstat Muestra el estado de los jobs y las colas de MI USUARIO
qstat -u '*' Muestra el estado de jobs y colas de todos los usuarios
qstat -gc Muestra el estado de las colas de manera resumida
qrsh Para usar jobs INTERACTIVOS (para tareas/comandos cortos)
qsub mi_script.sh Envio de batch jobs (jobs en lote, es decir que no requiere interacción durante su proceso, se ejecutan mediante scripts bash)
qacct -j job_id Muestra las estadísticas de un job FINALIZADO
qdel job_id Elimina/Cancela jobs encolados (no se pueden eliminar los jobs FINALIZADOS)

Modo de Uso

qhost
Muestra los recursos disponibles (TOTALES DEL SERVIDOR)
qstat
Muestra el estado de los jobs y las colas de MI USUARIO (normalmente se usa despues de mandar un job a la cola)
qstat -u '*'
Muestra el estado de jobs y colas de todos los usuarios
qstat -g -c
Muestra el estado de las colas de manera resumida
qrsh
Para usar jobs INTERACTIVOS (para tareas/comandos cortos que no ocupen demasiado tiempo ni recursos)
qsub
Envio de batch jobs (jobs en lote, es decir que no requiere interacción durante su proceso, se ejecutan mediante scripts bash)
mi_script.sh

Dónde:

  1. #!/bin/bash --> SHEBANG describe que el script se ejecutará en BASH
  2. #$ -N beast --> NOMBRE DEL JOB, puede ser igual o diferente del nombre del script, no ayuda a ser mas descriptivos con el proceso
  3. #$ -j y --> JUNTA LA SALIDA ESTANDAR Y LA SALIDA DE ERROR. Por defecto, al finalizar nuestro job se generán 2 archivos(STDOUT y STDERR) dónde puedes ver por separado las salidas o errores de los comandos de tu script, con la opcion -y indicamos que genere un ÚNICO ARCHIVO con ambas salidas
  4. #$ -S /bin/bash --> SHELL QUE EJECUTARA EL SCRIPT. Por defecto SGE usa csh como shell predeterminada, usamos esta linea para asegurarnos que los comandos que coloquemos en el script se ejcutarn correctamente en BASH.
  5. #$ -cwd --> INDICAMOS QUE UTILICE EL CURRENT WORK DIRECTORY, Nuestro script se ejecutara en el directorio en el cuál se encuentra posicionado antes de enviar el job, Recomendamos usar paths absolutos dentro del script para asegurar la salidas de sus análisis
  6. set -e --> OPCION DE PROGRAMADOR (ERROR), si algun comando dentro del script falla, el shell saldrá inmediatamente
  7. source ~/.bashrc --> carga las configuraciones que el usuario tenga en su perfil personal , como alias,variables entre otros
  8. echo "Hola "$USER" Bienvenid@ al sistema de colas de Bioinformática"
  9. --> IMPRIME EN PANTALLA

qacct -j job_id
Muestra las estadísticas de un job FINALIZADO

>Envío de jobs en lote (qsub)

Para poder enviar jobs en lote es necesario crear un script en bash que contenga las especificaciones de recursosa utilizar, configuración de variables de entorno,carga de programas o ambientes a utilizar y la serie de comandos a ejecutar.

Nota:
  • Crea un directorio para almacenar todos tus scripts
  • Usa algun editor de texto como vim o nano para crear o editar tu script
  • Como buena práctica guarda tu script con la extension .sh
  • Agrega los permisos de ejecución a tu script. Ejemplo:chmod +x mi_script.sh

Ejemplo de un script básico (mi_script.sh):


		#!/bin/bash
		#$ -S /bin/bash

		echo "Hola"  $USER  " Bienvenid@ al sistema de colas de Bioinformática" 


            
Dónde:
  • #!/bin/bash SHEBANG,indica que este archivo es un script y bajo que lenguaje se ejecutará
  • #$ -S /bin/bash --> SHELL QUE EJECUTARA EL SCRIPT. Por defecto SGE usa csh como shell predeterminada, usamos esta linea para asegurarnos que los comandos que coloquemos en el script se ejcutarn correctamente en BASH.
  • echo COMANDO, imprime en pantalla texto
Ejecución

Usamos:
  • qsub mi_script.shPara enviar nuestro job (encolado)
  • qstat Para verificar el estado de las colas (vemos que nuestro job esta en espera de recursos --> qw)

>Solicitud de recursos con jobs en lote (qsub)

Dependiendo de la tarea que quieras realizar y si el SOFTWARE que utilices, habrá situaciones en las que necesites solicitar recursos especificos, como más memoria, número de cpu's entre otros.
Puedes solicitar esos recursos a traves de opciones cuando ejecutas qsub [opciones] mi_script.sh o puedes indicarlos dentro del script.

Ejemplo de soliciud de recursos:
Línea de Comando Línea en Script Efecto
-N MiJob #$ -N MiJob Nombre del job: MiJob
-j y #$ -j y Juntar STDOUT y STDERR
-l h_vmem=12G #$ -l h_vmem=12G Pedir 12 Gb por core
-cwd #$ -cwd Ejecución en “pwd” (el directorio actual)
-pe thread X #$ -pe thread X Para pedir X cores con el ambiente thread (paralelismo OpenMP)
-V #$ -V Exporta todas las variables de ambiente
-v lista_de_variables #$ -v exporta esas variables de ambiente