Cómo hacer uso del clúster de supercomputación

 

Registro en el clúster

Para poder hacer uso del clúster de supercomputación del C3UPO, primero es necesario completar los datos de registro en la pestaña Registrarse. La petición será recibida por la Administración del clúster, que posteriormente facilitará al usuario su nombre de usuario y una contraseña temporal de acceso al sistema.

 

Conexión al cluster

Para poder hacer uso del clúster, es necesario acceder mediante SSH al nodo maestro. Trabajando con Linux o MacOs, se puede hacer uso del terminal; en caso de usar Windows, se puede utilizar alguna herramienta como PuTTY o Cygwin.

> ssh usuario@servidor.cluster

El usuario recibirá la dirección del servidor del clúster al darse de alta. Una vez que el acceso se realice correctamente, el usuario se ubicará en su carpeta HOME (/home/usuario) dentro del nodo00. En este nodo no se debe de ejectuar ningún programa; para ello se deben usar el resto de nodos como se detalla a continuación.

 

Uso del clúster

El clúster cuenta con un sistema de colas encargado de repartir las diferentes tareas por los nodos existentes. De este modo, el usuario, a través de comandos, sólo tendrá que lanzar su aplicación y el gestor de cola se encargará de encontrar nodos libres en los que ejecutar los cálculos. En caso de que estén todos ocupados, el gestor de colas se encargará de poner la tarea en espera y de lanzarla cuando haya recursos disponibles, sin necesidad de que el usuario esté conectado esperando.

Para poder hacer un uso responsable del clúster hay que tener una serie de pautas en mente:

  • No se deben instalar aplicaciones en el directorio HOME.
  • No se deben realizar cálculos en el nodo maestro (nodo00).
  • Para hacer cálculos en el clúster, hay que ejecutar el software mediante el gestor de colas.
  • Reservar un número de nodos ajustado a las necesidades reales.
  • Marcar un tiempo de ejecución acorde con los cálculos que se van a llevar a cabo, así se evitará que haya tareas malgastando recursos de forma innecesaria.
  • Cada usuario podrá utilizar un máximo de 120 cores simultáneamente (entre todas las colas).
 

Para intercambiar ficheros entre un equipo y el clúster se pueden usar dos métodos:

  • scp: El comando scp en el terminal (sin estar conectado al clúster) para copiar ficheros entre las máquinas.
#Copiar un archivo local a un destino remoto:
> scp /ruta/archivo-origen usuario@servidor.cluster:/ruta/directorio-destino/

#Copiar un archivo de un ordenador remoto al ordenador local:
> scp usuario@servidor.cluster:/ruta/archivo-origen /ruta/directorio-destino

 

  • Cliente SFTP: Como Filezilla, por ejemplo. Para ello, se debe descargar la aplicación en el equipo y usar las credenciales de acceso al clúster. A través de la aplicación, se podrá navegar por la carpeta HOME e intercambiar ficheros entre el quipo y el clúster.

 

 

Uso del sistema de colas

A continuación se van a detallar algunos de los comandos más utiles para gestionar correctamente tareas en el cluster. En cualquier caso, se puede obtener más información sobre los comandos existentes en el manual de SLURM.

  • Para ejecutar tareas en el clúster hay principalmente tres métodos:

    1. Usar el comando srun.

    Con el comando srun se pueden ejecutar tareas en paralelo. Se pueden especificar, entre otras cosas, en qué cola queremos añadir nuestro trabajo (p), cuántas veces se necesita que se ejecute la tarea (n) y en cuántos nodos (N). Además, también podemos darle un nombre al trabajo para poder localizarlo posteriormente con mayor facilidad (J).

    > srun -n2 -N2 -p day -J user_task_run --label hostname

    2. Usar el comando salloc.

    Con el comando salloc se reserva un espacio en un conjunto de nodos y, una vez hecha la reserva, se ejecutan los comandos necesarios. Es importante tener en cuenta que para poder hacer un uso correcto del clúster y aprovechar los recursos, hay que ejecutar los comandos haciendo uso de srun. Una vez que se hayan llevado a cabo las tareas, hay que liberar los recursos reservados con el comando exit o no serán liberados hasta salir del terminal. Al igual que con el comando srun, se puede especificar en qué cola queremos lanzar nuestro trabajo (p), cuántos nodos queremos reservar (N), en cuántos hilos queremos que se divida la tarea (n) y el nombre que se le quiere dar (J). Una vez hemos reservado el espacio podemos lanzar srun con los comandos que necesitemos, sin necesidad de volver a especificar los valores.

    > salloc -n2 -N2 -p day -J user_task_salloc -t=10
    > srun --label hostname
    > exit

    3. Usar el comando sbatch.

    Con el comando sbatch se envía a la cola un fichero batch. Por defecto, tanto la salida del fichero como la salida con los errores serán almacenadas en un fichero llamado slurm-x.out donde "x" es el ID de la tarea asignada por el gestor de cola; dicho fichero se almacenará en el directorio de trabajo actual. Esto puede ser modificado a través de los parámetros -e para especificar dónde se quieren almacenar los errores y -o para indicar dónde se quiere almacenar la salida. Además, se pueden utilizar en el nombre del fichero las variables %A, que será reemplezada con el ID de la tarea, y %a, que será sustituida por el índice del array.
    En el fichero batch debe ir la información sobre la cola en la que se van a ejecutar los cálculos (p), en cuántos nodos (N), así como en cuántos hilos como máximo se puede dividir el trabajo (n). También se le puede dar un nombre a la tarea (J).

    Se va a comenzar con un ejemplo de un programa que se va a ejecutar en un solo nodo y va a hacer uso de un solo core.

    Contenido del fichero programa.sh:
     

    #Este programa va a llamar a un script que se va a ejecutar en un solo nodo y utilizará un solo core:
    #!/bin/bash
    #SBATCH -o /home/user/outputs/programa_output_%A.out
    #SBATCH -e /home/user/errors/programa_error_%A.out
    #SBATCH -p UPO
    #SBATCH -N 1
    #SBATCH -n 1
    #SBATCH -J user_task_sbatch
    script.sh

    > sbtach programa.sh


     

    A continuación se muestra un ejemplo de un programa que se ejecuta en un solo nodo pero que hace uso de varios cores: proceso multicore. Para este ejemplo se va a utilizar blastp, que se puede ejecutar en multicore y que tiene como curiosidad que, además de especificar en el el script el número de hilos en los que se dividirá el trabajo (n), hay que especificarlo en el comando (num_threads). En caso de que no se especifique este valor en el comando, se reservarán un número determinado de cores (n) que no serán utilizados; por lo que es importante recordar que sólo hay que reservar más de un core en caso de que el programa que vamos a ejecutar soporte multicore. También es importante recordar que hay programas, como por ejemplo blastp, que no pueden ser ejecutados en más de un nodo al mismo tiempo, por lo que si se especifica un N mayor que 1 se estarán reservando más nodos de los que se usarán, por lo que quedarán ociosos.

    Contenido del fichero programa.sh:
     
    #En este programa se va a hacer uso de un solo nodo pero se van a usar varios cores:
    #!/bin/bash
    #SBATCH -p UPO
    #SBATCH -N 1
    #SBATCH -n 6
    #SBATCH -J user_task_sbatch
    blastp -query /home/username/data.fasta -db /mnt/beegfs/DB/uniref/Uniref50/2017_8/uniref50.fasta -num_threads 6


    > sbtach programa.sh

    Es importante tener en mente el parámetro --array, el cual sirve para ejecutar el mismo trabajo múltiples veces. Para poder ejecutar el comando sbatch con este parámetro hay que especificar los índices del array, ya sea a través de una lista o especificando un rango. Este parámetro también soporta el separador %X, con el cual se especifica que como máximo puede haber X iteraciones ejecutándose al mismo tiempo (este parámetro es opcional). Para poder hacer un uso completo de este parámetro es muy útil la variable SLURM_ARRAY_TASK_ID, la cual indica la iteración actual del programa. Como se ve en el siguiente ejemplo, esta variable puede servir para indicar al programa de una forma dinámica los parámetros de entrada que debe tomar a la hora de la ejecución. Es importante asegurarse de que existen los ficheros de entrada con el nombre de los índices que se especifican.

    Contenido del fichero programa.sh:
     
    #En este programa se va a hacer uso de un solo nodo, se van a usar varios cores y además se van a ejecutar varias iteraciones del mismo programa:
    #!/bin/bash
    #SBATCH -o /home/user/outputs/programa_output_%A_%a.out
    #SBATCH -e /home/user/errors/programa_error_%A_%a.out
    #SBATCH -p UPO
    #SBATCH -N 1
    #SBATCH -n 6
    #SBATCH -J user_task_sbatch
    #SBATCH --array=1-60%15
    blastp -query /home/username/data_$SLURM_ARRAY_TASK_ID.fasta -db /mnt/beegfs/DB/uniref/Uniref50/2017_8/uniref50.fasta -num_threads 6


    > sbtach programa.sh

    Nota: Si va a ejecutar una tarea prolongada en el tiempo, es una buena práctica incluir en el fichero programa.sh algunos "puntos de depuración" para saber en qué estado se encuentra la ejecución.

    ...
    # Se imprime el ID del trabajo que se está ejecutando; siguiendo el ejemplo anterior irá de 1 a 16.
    echo "Mi trabajo ID: " $SLURM_ARRAY_TASK_ID
    ...
    echo "Paso 1 Iniciado" >> my_program_status.txt
    ...
    echo "Paso 1 Finalizado" >> my_program_status.txt
    ...
     
  • Para detener una tarea se puede usar el comando scancel. Este comando nos permite terminar trabajos de diferentes maneras. Si se ha especificado un nombre a la tarea, se puede cancelar usando el nombre asignado; en otro caso, habrá que indicar el identificador de la tarea.

    #Para cancelar una tarea por su nombre:
    > scancel -n user_task_sbatch

    #Cancela el trabajo con ID 1234:
    > scancel 1234
  • A través de squeue se puede conocer el estado actual de las tareas que se están ejecutando en el clúster. También permite visualizar solamente las tareas que pertenecen a un usuario en concreto (u) o las de una partición en particular (p).

    #Muestra las tareas en la partición UPO del usuario nombre:
    > squeue -p UPO -u nombre

    #Muestra información de las tareas especificadas:
    > squeue --name user_task_run,user_task_run2

Uso de software

Todos los usuarios tienen acceso al software instalado en el clúster a través de la herramienta Environment Modules. Cada software se instala como módulo independiente, así como sus dependencias, y los usuarios pueden seleccionar en cada momento qué herramientas necesitan utilizar. Las dependencias se cargan automáticamente, facilitando esta tarea al usuario.

  • Comandos esenciales para el uso de Modules:

    #Mostrar todos los módulos (software) disponibles.
    > module avail

    #Cargar un módulo en concreto.
    > module load módulo

    #Mostrar los módulos actualmente cargados por el usuario.
    > module list

    #Salir de un módulo cargado.
    > module unload módulo

    #Salir de todos los módulos cargados y limpiar.
    > module purge

    Cuando haya disponible más de una versión del mismo software, será necesario especificar cuál se quiere cargar, salvo que haya una configurada por defecto. Siempre es de ayuda poder autocompletar gracias a la tecla de tabulación.

    Todos estos comandos se pueden utilizar a través del terminal o en los scripts de Slurm para lanzar trabajos a la cola del clúster.
     

  • Instalación de software:

    Cuando un usuario necesite hacer uso de una herramienta que no esté actualmente instalada, podrá solicitar su instalación contactando con la Administración del clúster.
     

  • Software instalado:

    • Anaconda
    • BioPerl
    • Cufflinks
    • GROMACS
    • HISAT2
    • HTSeq
    • LAMMPS
    • MultiQC
    • prokka
    • QIIME2
    • roary
    • RSeQC
    • sma3s -> incluye BLAST y BLAST+ y configura las siguientes variables de entorno:
      • $SMA3S -> ruta al fichero sma3s.pl a través del directorio /mnt/beegfs/uniprot/sma3s
      • $UNIPROT -> ruta al directorio /mnt/beegfs/uniprot/uniprot
      • $UNIREF -> ruta al directorio /mnt/beegfs/uniprot/uniref
    • SRA-Toolkit
    • STAR
    • StringTie
    • TopHat
    • Trinity


Nota: Si necesita una solución personalizada, no dude en contactar con nosotros a través de la dirección c3upo_admin@upo.es