🧪 NextFlow#

NextFlow es un framework de flujo de trabajo que permite el desarrollo de pipelines de análisis de datos científicos y bioinformáticos. Está diseñado para ser escalable y reproducible, permitiendo la ejecución de flujos de trabajo en diferentes entornos computacionales, desde laptops hasta clusters de alto rendimiento.

Nota

Para más información revise la documentación oficial.

Instalación#

NextFlow puede compilarse e instalarse a través de Spack.

A continuación se detallan los pasos:

  1. Use Spack para compilar e instalar el programa NextFlow

    # Instalar NextFlow
    spack install nextflow
    
  2. Si la compilación fue exitosa, va a poder hacer lo siguiente:

    # Actualizar módulos de Spack
    spack module tcl refresh -y
    module use ~/spack/share/spack/modules/linux-rocky8-zen2/
    
  3. Dentro del listado de módulos disponibles podrá encontrar la versión de NextFlow instalada.

    # Verificar módulos disponibles
    module avail
    

Ejemplo Básico#

  1. Para ejecutar el «hello world» de NextFlow primero tiene que cargar el módulo:

    # Cargar la versión instalada recientemente
    module load nextflow/23.10.0-gcc-12.3.0-u6v2oc2
    
  2. Luego puede trabajar dentro de un directorio para la prueba del «hello world»:

    # Crear y entrar al directorio del proyecto
    mkdir -p ~/workspace/nextflow-hello-world
    cd ~/workspace/nextflow-hello-world
    
    # Ejecutar el ejemplo hello world
    nextflow run hello
    

Script de SLURM#

A continuación se muestra un script de ejemplo para ejecutar un pipeline de NextFlow en el cluster.

Escriba el script submit_nf.sh

#!/bin/bash
#SBATCH --job-name=test_nf
#SBATCH --partition=short
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=64
#SBATCH --nodes=1
#SBATCH --time 05:00

source /etc/profile

# Cargar módulos necesarios
module use ~/spack/share/spack/modules/linux-rocky8-zen2/
module load nextflow/23.10.0-gcc-12.3.0-u6v2oc2

# Configurar variables de entorno para NextFlow
export NXF_BASE_DIR="/scratch/$USER/nextflow-hello-world"
export NXF_WORK="$NXF_BASE_DIR/nxf_work"
export NXF_TEMP="$NXF_BASE_DIR/nxf_temp"
export NXF_LAUNCHER="$NXF_BASE_DIR/nxf_launcher"

# Crear directorios temporales
mkdir -p $NXF_BASE_DIR $NXF_WORK $NXF_TEMP $NXF_LAUNCHER

# Ejecutar el pipeline
cd $NXF_BASE_DIR
nextflow run hello -ansi-log false

Nota

Ajuste los parámetros de SLURM (nodos, CPUs, tiempo) según las necesidades específicas de su pipeline.

Ya puede encolar el job:

sbatch submit_nf.sh
Ejemplo de salida
slurm.out#
N E X T F L O W  ~  version 23.10.0
Launching `https://github.com/nextflow-io/hello` [golden_moriondo] DSL2 - revision: 2be824e69a [master]
[a0/b4fbcf] Submitted process > sayHello (2)
[9b/923a62] Submitted process > sayHello (3)
[76/dc9944] Submitted process > sayHello (4)
[de/9d6753] Submitted process > sayHello (1)
Bonjour world!

Ciao world!

Hello world!

Hola world!

Contenedores#

NextFlow permite que cada proceso pueda ejecutarse dentro de un container, ya sea de Docker o de Apptainer (anteriormente conocido como Singularity).

Puede verificar que Apptainer está cargado y funcionando a través del commando:

apptainer --help

Script de SLURM con Apptainer#

Importante

  1. Dado que solo los nodos cabecera (head) cuentan con acceso a internet, es necesario descargar las imágenes de Apptainer previo a la ejecución del workflow dentro de un directorio en nuestro Home.

  2. Este directorio será informado a NextFlow mediante la variable de entorno NXF_APPTAINER_CACHEDIR.

Descarga de las imágenes de Apptainer#

Apptainer almacenará las imágenes por defecto en /scratch/$USER/.apptainer/cache. La ubicación de la caché puede modificarse configurando la variable de entorno APPTAINER_CACHEDIR.

Para cambiar el directorio a Home:

export APPTAINER_CACHEDIR=$HOME/.apptainer/cache
export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR
mkdir -p $APPTAINER_CACHEDIR

Además,es necesario crear un directorio con las imágenes en formato SIF:

export APPTAINER_SIFDIR_FOR_NXF=$HOME/workspace/apptainer/images
mkdir -p

Luego descargue las imágenes que serán utilizadas por el workflow, en este caso de ejemplo, ejecutamos:

cd $APPTAINER_SIFDIR_FOR_NXF
apptainer pull docker://quay.io/nextflow/bash

Nota

Puede encontrar todas las imágenes utilizadas dentro del archivo nextflow.config de su workflow NextFlow.

Verificamos que la imagen esté guardada:

apptainer cache list

En caso de necesitar limpiar el cache:

apptainer cache clean

Encolado del job#

Escriba el script submit_nf_apptainer.sh

#!/bin/bash
#SBATCH --job-name=test_nf_apt
#SBATCH --partition=short
#SBATCH --ntasks-per-node=60
#SBATCH --cpus-per-task=1
#SBATCH --nodes=1
#SBATCH --time 05:00

source /etc/profile

# Cargar módulos necesarios
module use ~/spack/share/spack/modules/linux-rocky8-zen2/
module load nextflow/23.10.0-gcc-12.3.0-u6v2oc2

# Configurar variables de entorno para NextFlow
export NXF_BASE_DIR=/scratch/$USER/nextflow-hello-world
export NXF_WORK=$NXF_BASE_DIR/nxf_work
export NXF_TEMP=$NXF_BASE_DIR/nxf_temp
export NXF_LAUNCHER=$NXF_BASE_DIR/nxf_launcher
export APPTAINER_SIFDIR_FOR_NXF=$HOME/workspace/apptainer/images

# Configurar el directorio cache para las imagenes de Apptainer
export APPTAINER_CACHEDIR=$HOME/.apptainer/cache
export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR

# Crear directorios temporales
mkdir -p $NXF_BASE_DIR $NXF_WORK $NXF_TEMP $NXF_LAUNCHER $NXF_APPTAINER_CACHEDIR

# Ejecutar el pipeline
cd $NXF_BASE_DIR
nextflow run hello -ansi-log false -with-apptainer $APPTAINER_SIFDIR_FOR_NXF/bash_latest.sif

Ya puede encolar el job:

sbatch submit_nf_apptainer.sh
Ejemplo de salida
slurm.out#
Nextflow 25.04.4 is available - Please consider updating your version to it
N E X T F L O W  ~  version 23.10.0
Launching `https://github.com/nextflow-io/hello` [berserk_magritte] DSL2 - revision: 2be824e69a [master]
[9b/35ec78] Submitted process > sayHello (4)
[01/9630d3] Submitted process > sayHello (2)
[b6/0e877c] Submitted process > sayHello (1)
[98/eaed8b] Submitted process > sayHello (3)
Hola world!

Ciao world!

Hello world!

Bonjour world!

Múltiples imágenes#

En caso de contar con procesos dentro del workflow que utilizan diferentes imágenes de Apptainer, es necesario especificarlas dentro del archivo de configuración nextflow.config, como el siguiente ejemplo:

process {
    withName:foo {
        container = '$APPTAINER_SIFDIR_FOR_NXF/image_name_1'
    }
    withName:bar {
        container = '$APPTAINER_SIFDIR_FOR_NXF/image_name_2'
    }
}
apptainer {
    enabled = true
}

Más información disponible aquí