Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti will be decommissioned after Roihu becomes available. Users should clean up unnecessary files and move any required data by the end of August 2026. See the Roihu data preparation instructions for details.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

Nextflow-työvuoiden ajaminen supertietokoneilla

Nextflow on tieteellinen työnkulunhallintaohjelmisto, joka tarjoaa sisäänrakennetun tuen HPC-ympäristöihin sopiville konteille, kuten Apptainerille (= Singularity). Yksi Nextflown eduista on, että varsinaisen putken toiminnallinen logiikka on erotettu suoritusympäristöstä. Sama skripti voidaan siis suorittaa eri ympäristöissä vaihtamalla suoritusympäristöä koskematta varsinaiseen putkikoodiin. Nextflow käyttää executor-tietoa päättääkseen, missä työ ajetaan. Kun executor on määritetty, Nextflow lähettää jokaisen prosessin puolestasi määritettyyn työnajastimeen.

Oletusexecutor on local, jolloin prosessit ajetaan sillä tietokoneella, jolla Nextflow käynnistetään. Useita muita executoreita tuetaan, ja CSC:n laskentaympäristöihin sopivat parhaiten SLURM- ja HyperQueue-executorit.

Tieteelliseen laskentaan on olemassa monia muitakin suuren läpimenon työkaluja ja työnkulunhallintaohjelmistoja, ja oikean työkalun valinta voi joskus olla haastavaa. Katso yleiskuva sopivista työkaluista suuren läpimenon laskennan ja työnkulkujen sivultamme.

Asennus

Nextflow

Nextflow itsessään on saatavilla moduulina Puhdissa, Mahdissa ja LUMIssa. Saatavilla olevat tarkat versiot on kuvattu Nextflown pääsivulla.

Nextflow’ssa käytettävien työkalujen asennus

Paikalliset asennukset

Oletuksena Nextflow odottaa, että analyysityökalut ovat saatavilla paikallisesti. Työkalut voidaan ottaa käyttöön olemassa olevista moduuleista tai omista mukautetuista moduuliasennuksista. Katso myös, miten luodaan kontteja.

Apptainer-asennukset lennossa

Kontit voidaan integroida sujuvasti Nextflow-putkiin. Nextflow-skripteihin ei tarvita muita muutoksia kuin Apptainer-moottorin käyttöönotto Nextflown asetustiedostossa. Nextflow voi noutaa etäkonteista Apptainer-kuvia lennossa konttirekistereistä. Etäkonttikuvat määritetään yleensä Nextflow-skriptissä tai asetustiedostossa yksinkertaisesti lisäämällä kuvan nimen eteen shub:// tai docker://. On myös mahdollista määrittää eri Apptainer-kuva jokaiselle Nextflow-putken prosessimäärittelylle.

Useimmat Nextflow-putket noutavat tarvittavat konttikuvat lennossa. Jos putkessa kuitenkin tarvitaan useita kuvia, on hyvä ajatus valmistella kontit paikallisesti ennen Nextflow-putken käynnistämistä.

Käytännön huomioita:

  • Apptainer on asennettu kirjautumis- ja laskentasolmuille, eikä erillistä moduulia tarvitse ladata CSC:n supertietokoneilla.
  • Kansioiden bindaukseen tai muiden Apptainer-asetusten käyttöön käytä nextflow.config-tiedostoa.
  • Jos noudat useita Apptainer-kuvia suoraan lennossa, käytä laskentasolmun NVMe-levyä Apptainer-kuvien tallentamiseen. Tätä varten pyydä ensin eräajotiedostossa NVMe-levytilaa ja aseta sitten Apptainerin väliaikaiskansiot ympäristömuuttujiksi.
batch_job.sh
#SBATCH --gres=nvme:100   # Request 100 GB of space to local disk

export APPTAINER_TMPDIR=$LOCAL_SCRATCH
export APPTAINER_CACHEDIR=$LOCAL_SCRATCH

Warning

Vaikka Nextflow tukee myös Docker-kontteja, niitä ei voi käyttää sellaisenaan supertietokoneilla, koska tavallisilla käyttäjillä ei ole ylläpitäjän oikeuksia.

Käyttö

Nextflow-putkia voidaan ajaa supertietokoneympäristössä eri tavoilla:

  1. Interaktiivisessa tilassa local-executorilla, rajallisilla resursseilla. Hyödyllinen lähinnä virheenjäljitykseen tai hyvin pienten työnkulkujen testaukseen.
  2. Eräajona ja local-executorilla. Hyödyllinen pienille ja keskisuurille työnkuluille.
  3. Eräajona ja SLURM-executorilla. Tämä voi käyttää useita solmuja ja eri SLURM-osioita (CPU ja GPU), mutta voi aiheuttaa merkittävää kuormaa monien pienten töiden tapauksessa. Tätä voi käyttää, jos jokainen työvaihe jokaiselle tiedostolle kestää vähintään 30 minuuttia.
  4. Eräajona ja HyperQueue alityönajastimena. Voi käyttää useita solmuja saman eräajovarauksen sisällä, mutta on asetuksiltaan monimutkaisin. Sopii hyvin tilanteisiin, joissa työnkulku sisältää paljon pieniä työvaiheita ja paljon syötetiedostoja (suuren läpimenon laskenta).

Yleisen johdannon eräajoihin löydät Puhdin esimerkkiajoskripteistä.

Note

Jos et ole varma, miten työnkulku kannattaa ajaa tehokkaasti, älä epäröi ottaa yhteyttä CSC:n asiakastukeen.

Nextflow-skripti

Seuraava minimalistinen esimerkki havainnollistaa Nextflow-skriptin perussyntaksia.

workflow.nf
#!/usr/bin/env nextflow

greets = Channel.fromList(["Moi", "Ciao", "Hello", "Hola","Bonjour"])

/*
 * Use echo to print 'Hello !' in different languages to a file
 */

process sayHello {

  input:
    val greet

  output:
    path "${greet}.txt"

  script:
    """
    echo ${greet} > ${greet}.txt
    """
}

workflow {

    // Print a greeting
    sayHello(greets)
}
Tämä skripti määrittelee yhden prosessin nimeltä sayHello. Tämä prosessi ottaa joukon eri kielisiä tervehdyksiä ja kirjoittaa sitten jokaisen niistä erilliseen tiedostoon satunnaisessa järjestyksessä.

Tuloksena syntyvä pääteulostulo näyttäisi samankaltaiselta kuin alla oleva teksti:

N E X T F L O W  ~  version 23.04.3
Launching `hello-world.nf` [intergalactic_panini] DSL2 - revision: 880a4a2dfd
executor >  local (5)
[a0/bdf83f] process > sayHello (5) [100%] 5 of 5 

Nextflow-putken ajaminen local-executorilla interaktiivisesti

Nextflown ajaminen interaktiivisessa istunnossa:

sinteractive -c 2 -m 4G -d 250 -A project_2xxxx  # replace actual project number here
module load nextflow/23.04.3                     # Load nextflow module
nextflow run workflow.nf

Note

Älä käynnistä raskaita Nextflow-työnkulkuja kirjautumissolmuilla.

Nextflown ajaminen local-executorilla eräajossa

Jos haluat käynnistää Nextflow-työn tavallisena eräajona niin, että kaikki työtehtävät suoritetaan saman ajovarauksen sisällä, luo eräajotiedosto:

nextflow_local_batch_job.sh
#!/bin/bash
#SBATCH --time=00:15:00            # Change your runtime settings
#SBATCH --partition=test           # Change partition as needed
#SBATCH --account=<project>        # Add your project name here
#SBATCH --cpus-per-task=<value>    # Change as needed
#SBATCH --mem-per-cpu=1G           # Increase as needed

# Load Nextflow module
module load nextflow/23.04.3

# Actual Nextflow command here
nextflow run workflow.nf <options>
# nf-core pipeline example:
# nextflow run nf-core/scrnaseq  -profile test,singularity -resume --outdir .

Lopuksi lähetä työ supertietokoneelle:

sbatch nextflow_local_batch_job.sh

Nextflown ajaminen SLURM-executorilla

Jos työnkulku sisältää vain rajallisen määrän yksittäisiä töitä tai työvaiheita, Nextflown SLURM-executoria voidaan harkita.

Ensimmäinen eräajotiedosto varaa resurssit vain Nextflow’lle itselleen. Nextflow luo sitten lisää SLURM-töitä työnkulun prosesseille. Nextflown luomat SLURM-työt voidaan jakaa useille supertietokoneen solmuille, ja ne voivat myös käyttää eri osioita eri työnkulkusäännöille, esimerkiksi CPU:lle ja GPU:lle. SLURM-executoria tulisi käyttää vain, jos työvaiheet kestävät vähintään 20–30 minuuttia, muuten se voi kuormittaa SLURMia liikaa.

Warning

Älä käytä SLURM-executoria, jos työnkulku sisältää paljon lyhyitä prosesseja. Se kuormittaisi SLURMia liikaa. Käytä sen sijaan HyperQueue-executoria.

SLURM-executorin käyttöönottoa varten määritä process.xx-asetukset nextflow.config-tiedostossa. Asetukset ovat samankaltaisia kuin eräajotiedostoissa.

nextflow.config
profiles {


 standard {
     process.executor = 'local'
   }

 puhti {
     process.clusterOptions = '--account=project_xxxx --ntasks-per-node=1 --cpus-per-task=4 --ntasks=1 --time=00:00:05'
     process.executor = 'slurm'
     process.queue = 'small'
     process.memory = '10GB'
    }

}

Luo eräajotiedosto ja huomaa profiilin käyttö.

nextflow_slurm_batch_job.sh
#!/bin/bash
#SBATCH --time=00:15:00            # Change your runtime settings
#SBATCH --partition=test           # Change partition as needed
#SBATCH --account=<project>        # Add your project name here
#SBATCH --cpus-per-task=1          # Change as needed
#SBATCH --mem-per-cpu=1G           # Increase as needed

# Load Nextflow module
module load nextflow/23.04.3

# Actual Nextflow command here
nextflow run workflow.nf -profile puhti

Lopuksi lähetä työ supertietokoneelle:

sbatch nextflow_slurm_batch_job.sh

Tämä lähettää työnkulkusi jokaisen prosessin erillisenä eräajona Puhti-supertietokoneelle.

Nextflown ajaminen HyperQueue-executorilla

HyperQueue-meta-ajastimen executor sopii tilanteisiin, joissa työnkulku sisältää paljon lyhyitä prosesseja ja laskentaan tarvitaan useita solmuja. Executorin asetukset voivat kuitenkin olla monimutkaisia putkesta riippuen.

Tässä on eräajoskripti nf-core-putken ajamiseen:

nextflow_hyperqueue_batch_job.sh
#!/bin/bash
#SBATCH --job-name=nextflowjob
#SBATCH --partition=small
#SBATCH --account=<project>
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=40
#SBATCH --mem-per-cpu=2G
#SBATCH --time=01:00:00

# Load the required modules
module load hyperqueue
module load nextflow

# Create a per job directory
wrkdir=${PWD}/WRKDIR-${SLURM_JOB_ID}

# Set the directory which hyperqueue will use 
export HQ_SERVER_DIR=${wrkdir}/.hq-server
mkdir -p ${HQ_SERVER_DIR}

# Start the server in the background (&) and wait until it has started
hq server start &
until hq job list &>/dev/null ; do sleep 1 ; done

# Start the workers in the background and wait for them to start
srun --overlap --cpu-bind=none --mpi=none hq worker start --cpus=${SLURM_CPUS_PER_TASK} &
hq worker wait "${SLURM_NTASKS}"

# change to the work directory if needed 

cd ${wrkdir}
# Ensure Nextflow uses the right executor and knows how many jobs it can submit
# The `queueSize` can be limited as needed. 

echo "executor {
  queueSize = $(( 40*SLURM_NNODES ))
  name = 'hq'
  cpus = $(( 40*SLURM_NNODES ))
}" >> ${wrkdir}/nextflow.config

# run the Nextflow pipeline here 
nextflow run main.nf <options>

# Wait for all jobs to finish, then shut down the workers and server
hq job wait all
hq worker stop all
hq server stop

Lopuksi lähetä työ supertietokoneelle:

sbatch nextflow_hyperqueue_batch_job.sh

Lisätietoja

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta