Skip to content

Instantly share code, notes, and snippets.

@jvfe
Forked from iaradsouza1/Nextflow_on_NPAD_UFRN.md
Last active May 19, 2025 15:58
Show Gist options
  • Select an option

  • Save jvfe/7af8f3b6ec76364a1fd8ab96ff9315a8 to your computer and use it in GitHub Desktop.

Select an option

Save jvfe/7af8f3b6ec76364a1fd8ab96ff9315a8 to your computer and use it in GitHub Desktop.
Run Nextflow pipelines and RStudio at NPAD local cluster

Este é um guia básico para configurar algumas configurações básicas para executar pipelines Nextflow no NPAD.

Primeiro, estou assumindo que sua análise ocupará mais de 9 GB (sua cota de espaço no diretório home), então você precisará usar o disco scratch para armazenar os resultados e as imagens Singularity.

0. Instalar conda e nf-core

Aqui, recomendo usar o conda para instalar o Nextflow e o nf-core.

Baixe e instale o conda: https://docs.conda.io/en/latest/miniconda.html

Instale o nf-core com conda: https://nf-co.re/docs/usage/installation#bioconda-installation

Certifique-se de instalá-los no diretório scratch.

1. Criar um diretório para ser usado como cache do Singularity no scratch

Pipelines complexos precisarão de várias imagens Singularity. Você precisará baixá-las antecipadamente para um diretório de cache. Crie um diretório no scratch:

mkdir /scratch/iddsouza/singularity_images
mkdir /scratch/iddsouza/singularity_images/cache

2. Exportar variáveis de ambiente para o seu perfil local

Adicione as seguintes variáveis ao arquivo ~/.bashrc. Além disso, chame o módulo Singularity por padrão (assim você não esquecerá de chamá-lo ao executar o pipeline):

export SINGULARITY_CACHEDIR='/home/SEU_USER/scratch/singularity_images/cache'
export NXF_SINGULARITY_CACHEDIR='/home/SEU_USER/scratch/singularity_images'
module load singularity

Depois de modificar o arquivo ~/.bashrc, reinicie sua sessão com source ~/.bashrc.

3. Baixar as imagens Singularity

Após criar os diretórios, baixe as imagens. Este é um exemplo para o pipeline scrnaseq, versão 2.4.0. Altere esta linha para o seu pipeline:

nf-core download --container-system singularity --container-cache-utilisation amend -r 2.4.0 -p 5 nf-core/scrnaseq

4. Alterar o arquivo ~/.nextflow/config

Se este arquivo não estiver presente no diretório ~/.nextflow/, crie-o.

Este é um exemplo do meu arquivo ~/.nextflow/config:

singularity{
  autoMounts = true
}

process {
  executor = 'slurm'
  queue = 'amd-512'
  queueSize = 30
  submitRateLimit = '10/1min'
  clusterOptions = '--qos=preempt'
  errorStrategy = 'retry'
  maxRetries = 3
  time = '24h'
  errorStrategy = { task.exitStatus in [125,139] ? 'retry' : 'finish' }
}

Os parâmetros necessários são singularity{ autoMounts = true } e process { clusterOptions = '--qos=preempt' executor = 'slurm' }. Isso garante que o Nextflow direcione cada processo para os nós de processamento.

5. Criar uma screen para executar o pipeline

Organize os arquivos necessários para sua execução no scratch local. Depois disso, crie uma screen para rodar o pipeline, com screen -S analysis, por exemplo. Na screen, ative o ambiente nf-core.

Se preferir usar o Nextflow Tower, defina o token no arquivo ~/.bashrc. (https://help.tower.nf/22.2/getting-started/usage/#nextflow-with-tower)

Não se esqueça de definir o --outdir no scratch.

nextflow run nf-core/scrnaseq -profile test,singularity --outdir scratch/scrnaseq_results

Este é um guia básico para configurar algumas configurações básicas para executar pipelines Nextflow no NPAD.

Primeiro, estou assumindo que sua análise ocupará mais de 9 GB (sua cota de espaço no diretório home), então você precisará usar o disco scratch para armazenar os resultados e as imagens Singularity.

0. Instalar conda e nf-core

Aqui, recomendo usar o conda para instalar o Nextflow e o nf-core.

Baixe e instale o conda: https://docs.conda.io/en/latest/miniconda.html

Instale o nf-core com conda: https://nf-co.re/docs/usage/installation#bioconda-installation

Certifique-se de instalá-los no diretório scratch.

1. Criar um diretório para ser usado como cache do Singularity no scratch

Pipelines complexos precisarão de várias imagens Singularity. Você precisará baixá-las antecipadamente para um diretório de cache. Crie um diretório no scratch:

mkdir /scratch/iddsouza/singularity_images
mkdir /scratch/iddsouza/singularity_images/cache

2. Exportar variáveis de ambiente para o seu perfil local

Adicione as seguintes variáveis ao arquivo ~/.bashrc. Além disso, chame o módulo Singularity por padrão (assim você não esquecerá de chamá-lo ao executar o pipeline):

export SINGULARITY_CACHEDIR='/home/iddsouza/scratch/singularity_images/cache'
export NXF_SINGULARITY_CACHEDIR='/home/iddsouza/scratch/singularity_images'
module load singularity

Depois de modificar o arquivo ~/.bashrc, reinicie sua sessão com source ~/.bashrc.

3. Baixar as imagens Singularity

Após criar os diretórios, baixe as imagens. Este é um exemplo para o pipeline scrnaseq, versão 2.4.0. Altere esta linha para o seu pipeline:

nf-core download --container-system singularity --container-cache-utilisation amend -r 2.4.0 -p 5 nf-core/scrnaseq

4. Alterar o arquivo ~/.nextflow/config

Se este arquivo não estiver presente no diretório ~/.nextflow/, crie-o.

Este é um exemplo do meu arquivo ~/.nextflow/config:

singularity{
  autoMounts = true
}

process {
  executor = 'slurm'
  queue = 'intel-512'
  queueSize = 30
  submitRateLimit = '10/1min'
  clusterOptions = '--qos=preempt'
  errorStrategy = 'retry'
  maxRetries = 3
  time = '24h'
  errorStrategy = { task.exitStatus in [125,139] ? 'retry' : 'finish' }
}

Os parâmetros necessários são singularity{ autoMounts = true } e process { clusterOptions = '--qos=preempt' executor = 'slurm' }. Isso garante que o Nextflow direcione cada processo para os nós de processamento.

5. Criar uma screen para executar o pipeline

Organize os arquivos necessários para sua execução no scratch local. Depois disso, crie uma screen para rodar o pipeline, com screen -S analysis, por exemplo. Na screen, ative o ambiente nf-core.

Se preferir usar o Nextflow Tower, defina o token no arquivo ~/.bashrc. (https://help.tower.nf/22.2/getting-started/usage/#nextflow-with-tower)

Não se esqueça de definir o --outdir no scratch.

nextflow run nf-core/scrnaseq -profile test,singularity --outdir scratch/scrnaseq_results

#!/bin/bash
#SBATCH --time=01-00:00:00
#SBATCH --partition=intel-128
#SBATCH --signal=USR2
#SBATCH --exclusive
#SBATCH --output=saida.txt
module load singularity
#diretorio temporario pras coisas do rstudio
basescratch=~/scratch
workdir=$basescratch/rstudio
echo workdir: ${workdir}
mkdir -p -m 700 ${workdir}/run ${workdir}/tmp ${workdir}/var/lib/rstudio-server
cat > ${workdir}/database.conf <<END
provider=sqlite
directory=/var/lib/rstudio-server
END
# Set OMP_NUM_THREADS to prevent OpenBLAS (and any other OpenMP-enhanced
# libraries used by R) from spawning more threads than the number of processors
# allocated to the job.
#
# Set R_LIBS_USER to a path specific to rocker/rstudio to avoid conflicts with
# personal libraries from any R installation in the host environment
# Define OMP_NUM_THREADS para o numero de CPUs do nó
# Muda o local de instalação dos pacotes com R_LIBS_USER
cat > ${workdir}/rsession.sh <<END
#!/bin/sh
export OMP_NUM_THREADS=${SLURM_JOB_CPUS_PER_NODE}
export R_LIBS_USER=${CONDA_PREFIX}/lib/R/library
exec /usr/lib/rstudio-server/bin/rsession "\${@}"
END
chmod +x ${workdir}/rsession.sh
# Aqui embaixo voce insere a pasta do scratch que deseja vincular
# No meu caso ela eh "${basescratch}/intro-single-cell:/home/jvfcavalcante/intro-single-cell"
export SINGULARITY_BIND="${workdir}/run:/run,${basescratch}/intro-single-cell:/home/jvfcavalcante/intro-single-cell,${workdir}/tmp:/tmp,${workdir}/database.conf:/etc/rstudio/database.conf,${workdir}/rsession.sh:/etc/rstudio/rsession.sh,${workdir}/var/lib/rstudio-server:/var/lib/rstudio-server"
#Para não suspender a sessão
export SINGULARITYENV_RSTUDIO_SESSION_TIMEOUT=0
export SINGULARITYENV_USER=$(id -un)
export SINGULARITYENV_PASSWORD=12345
readonly PORT=8787
cat 1>&2 <<END
1. Comando para fazer o túnel SSH da sua máquina local :
ssh -p 4422 -N -L 8787:${HOSTNAME}:${PORT} [email protected]
2. Então abra seu navegador em http://localhost:8787
user: ${SINGULARITYENV_USER}
password: ${SINGULARITYENV_PASSWORD}
END
singularity exec --cleanenv /opt/npad/shared/containers/rstudio-server.sif \
/usr/lib/rstudio-server/bin/rserver --www-port ${PORT} \
--auth-none=0 \
--auth-pam-helper-path=pam-helper \
--auth-stay-signed-in-days=30 \
--auth-timeout-minutes=0 \
--rsession-path=/etc/rstudio/rsession.sh \
--server-user ${SINGULARITYENV_USER}
printf 'rserver exited' 1>&2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment