Hyppää sisältöön

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

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

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

Nextflow on tieteellinen työnkulunhallintajärjestelmä skaalautuvien, siirrettävien ja toistettavien työnkulkujen luomiseen. Se on Groovyyn perustuva kieli, jolla koko työnkulku voidaan ilmaista yhdessä skriptissä, ja se tukee myös muiden kielten, kuten R:n, bashin ja Pythonin, skriptien suorittamista (Snakemake-säännön script/run/shell-direktiivin kautta).

Nextflow tarjoaa sisäänrakennetun tuen HPC-ympäristöihin sopiville konteille, kuten Apptainerille (= Singularity). Yksi Nextflow’n eduista on, että varsinainen putken toiminnallinen logiikka on erotettu suoritusympäristöstä. Sama skripti voidaan siksi 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 suoritetaan siinä tietokoneessa, jossa Nextflow käynnistetään. Useita muita executoreita tuetaan, ja CSC:n laskentaympäristöihin sopivat parhaiten SLURM- ja HyperQueue-executorit.

Jos pohdit edelleen työnkulkuja yleisemmällä tasolla tai sitä, mitä työnkulkuvälinettä kannattaa käyttää, katso myös suurteholaskennan ja työnkulkujen sivumme.

Saatavilla

CSC:n palvelimilla saatavilla olevat versiot

  • Roihu-CPU: 25.10.4.11173
  • Roihu-GPU: ei saatavilla
  • Puhti: 21.10.6, 22.04.5, 22.10.1, 23.04.3, 24.01.0-edge.5903, 24.10.0
  • Mahti: 22.05.0-edge, 24.04.4
  • LUMI: 22.10.4

Kiinnitä huomiota Nextflow-version käyttöön

Huomaa, että Nextflow-versiota 23.04.3 ja sitä uudempia voidaan käyttää vain DSL2:lla rakennettuihin putkiin. Voit vaihtaa alempaan versioon DSL1-yhteensopivia putkia varten.

Lisenssi

Nextflow on julkaistu Apache 2.0 -lisenssillä.

Asennus

Nextflow

Nextflow LUMIssa

Jotta voit käyttää CSC:n moduuleja LUMIssa, muista ensin ottaa CSC:n moduulipuu käyttöön komennolla

module use /appl/local/csc/modulefiles

Nextflow itse on saatavilla moduulina Puhdissa, Mahdissa ja LUMIssa. Saatavilla olevat tarkat versiot on lueteltu yllä.

Nextflow otetaan käyttöön lataamalla nextflow-moduuli:

module load nextflow

Oletusversio on yleensä uusin. Valitse Nextflow-versio oman putkesi vaatimusten mukaan. Toistettavuuden näkökulmasta on suositeltavaa ladata Nextflow-moduuli versionumeron kanssa. Jos haluat ladata nextflow-moduulin tietyllä versiolla:

module load nextflow/22.04.5

Käyttöohjeen saat komennolla:

nextflow -h

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 kontteja luodaan.

Apptainer-asennukset lennossa

Kontit voidaan integroida sujuvasti Nextflow-putkiin. Nextflow-skripteihin ei tarvita muita muutoksia kuin Apptainer-moottorin käyttöönotto Nextflow’n asetustiedostossa . Nextflow voi noutaa etäkonttikuvia Apptainer-muodossa konttirekistereistä lennossa. Etäkonttikuvat määritellää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 skriptin prosessimäärittelylle.

Useimmat Nextflow-putket noutavat tarvittavat konttikuvat lennossa. Kuitenkin, kun putkessa 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ä se vaadi erillisen moduulin lataamista 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äajotiedostossasi 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 voida sellaisenaan käyttää supertietokoneilla, koska tavallisilla käyttäjillä ei ole ylläpito-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 local-executorilla. Hyödyllinen pienille ja keskisuurille työnkuluille.
  3. Eräajona 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 vuoksi. Tätä voidaan käyttää, jos jokainen työvaihe jokaiselle tiedostolle kestää vähintään 30 minuuttia.
  4. Eräajona 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 (suurteholaskenta).

Yleisen johdannon eräajoihin löydät Puhdin esimerkkieräajoskripteistä.

Note

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

Nextflow-skripti

Seuraava minimaalinen 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 suunnilleen alla olevan tekstin kaltaiselta:

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

Nextflow’n 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

Huomio

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

Nextflow’n ajaminen local-executorilla eräajossa

Jos haluat käynnistää Nextflow-työn tavallisena eräajona, joka suorittaa kaikki työtehtävät samassa ajovarauksessa, 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

Nextflow’n ajaminen SLURM-executorilla

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

Ensimmäinen eräajotiedosto varaa resurssit vain Nextflow’lle itselleen. Tämän jälkeen Nextflow luo lisää SLURM-töitä työnkulun prosesseille. Nextflow’n luomat SLURM-työt voidaan jakaa supertietokoneen useille solmuille, ja ne voivat myös käyttää eri osioita eri työnkulkusäännöille, esimerkiksi CPU:ta ja GPU:ta. 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önkulkusi sisältää paljon lyhyitä prosesseja. Se kuormittaisi SLURMia liikaa. Käytä sen sijaan HyperQueue-executoria.

SLURM-executor otetaan käyttöön asettamalla 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äajotyönä Puhdin supertietokoneelle.

Nextflow’n ajaminen HyperQueue-executorilla

HyperQueue-meta-ajastimen executori 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

Viitteet

Jos käytät Nextflow’ta työssäsi, viittaa seuraavasti:

Di Tommaso, P., Chatzou, M., Floden, E. et al. Nextflow enables reproducible computational workflows. Nat. Biotechnol. 35, 316–319 (2017). https://doi.org/10.1038/nbt.3820

Lisätietoja

Suomenkielinen tekoälykäännös

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

Klikkaa tästä antaaksesi palautetta