Hyppää sisältöön

A new version of SD Connect and SD Desktop will be available from Monday, September 28. The major upgrade will introduce significant improvements, but also includes changes that are not compatible with the current version of the service. Click here to review the available support materials.

Warning!

Puhti and Mahti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti and Mahti login nodes and storage services are planned to remain available until 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.

Nextflow

Nextflow on tieteellinen työnkulunhallintajärjestelmä skaalautuvien, siirrettävien ja toistettavien työnkulkujen luomiseen. Putket kirjoitetaan Groovy-pohjaisella kielellä, ja niihin voidaan upottaa skriptejä muilla kielillä, kuten R:llä, bashilla ja Pythonilla. Nextflow tukee sisäänrakennetusti HPC-ympäristöihin sopivia kontteja, kuten Apptaineria (= Singularitya).

Keskeinen etu on se, että putken logiikka on erotettu suoritusympäristöstä: sama skripti toimii eri ympäristöissä vaihtamalla määritettyä executor-asetusta, joka kertoo Nextflow’lle, minne kukin prosessi lähetetään. Oletusarvoinen local-executor suorittaa prosessit koneella, jolla Nextflow käynnistetään; CSC:n järjestelmissä SLURM- ja HyperQueue-executorit sopivat parhaiten. Työvuo-työkalun valinnasta yleisemmin kerrotaan sivullamme high-throughput computing and workflows.

Saatavilla

CSC:n palvelimilla saatavilla olevat versiot

  • Roihu-CPU: 25.10.2-standalone, 26.04.6-standalone (bio-apps-moduulin kautta)
  • Roihu-GPU: 25.10.2-standalone, 26.04.6-standalone (bio-apps-moduulin kautta)
  • 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 vanhempaan versioon DSL1-yhteensopivia putkia varten.

Lisenssi

Nextflow on julkaistu Apache 2.0 -lisenssillä.

Asennus

Nextflow

Roihussa Nextflow kuuluu bio-apps -kokoelmaan ja on saatavilla sekä CPU- että GPU-solmuilla. Lataa ensin bio-apps-moduulipuu ja sitten Nextflow-moduuli:

module load bio-apps/v202603
module load nextflow/26.04.6-standalone

LUMIssa Nextflow on saatavilla erillisenä moduulina. Jotta CSC:n moduulit ovat käytettävissä LUMIssa, lataa ensin CSC:n moduulipuu käyttöön:

module use /appl/local/csc/modulefiles
module load nextflow

Saat käyttöohjeen komennolla:

nextflow -h

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

Paikalliset asennukset

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

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 lisäämällä kuvan nimen eteen yksinkertaisesti 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. 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ä sen käyttö CSC:n supertietokoneilla vaadi erillisen moduulin lataamista.
  • 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 hyödynnä eräajotiedostossasi paikallista NVMe-levytilaa ja aseta sitten Apptainerin väliaikaiskansiot ympäristömuuttujiksi. Esimerkiksi Roihussa voit hyödyntää solmukohtaista nopeaa paikallista tallennustilaa hakemistossa $TMPDIR seuraavasti:
batch_job.sh
export APPTAINER_TMPDIR="$TMPDIR"
export APPTAINER_CACHEDIR="$TMPDIR"

Osiosta riippuen solmun $TMPDIR-tilassa on Roihussa käytettävissä noin 20 GiB:stä 600 GiB:iin levykiintiötä. Levytila on paikallinen yhdelle solmulle, joten siirrä asennuksesi pois tältä levytilalta työn valmistuttua.

Warning

Vaikka Nextflow tukee myös Docker-kontteja, niitä ei voida käyttää sellaisenaan supertietokoneilla, koska tavallisilla käyttäjillä ei ole järjestelmänvalvojan oikeuksia.

Käyttö

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

  1. Vuorovaikutteisessa 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öajastimena. Voi käyttää useita solmuja saman eräajovarauksen sisällä, mutta vaatii monimutkaisimman käyttöönoton. Sopii hyvin tilanteisiin, joissa työnkulku sisältää paljon pieniä työvaiheita ja paljon syötetiedostoja (high-throughput computing).

Yleisen johdannon eräajoihin löydät sivulta esimerkkieräajoskriptit Roihulle.

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ääteulostus 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-putkien ajaminen

Local executor (vuorovaikutteinen)

Nextflow’n ajaminen vuorovaikutteisessa istunnossa:

sinteractive --account <project> --cores 2   # replace <project> with your project
module load bio-apps/v202603
module load nextflow/26.04.6-standalone
nextflow run workflow.nf

Huom.

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

Local executor (eräajo)

Jos haluat käynnistää Nextflow-työn tavallisena eräajona siten, että kaikki työtehtävät suoritetaan saman työvarauksen 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 bio-apps/v202603
module load nextflow/26.04.6-standalone

# 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

SLURM executor

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

Ensimmäinen eräajotiedosto varaa resurssit vain Nextflow’ta itseään varten. Tämän jälkeen Nextflow luo lisää SLURM-töitä työnkulun prosesseille. Nextflow’n 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- ja GPU-osioita. 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-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'
   }

 roihu {
     process.clusterOptions = '--account=<project> --ntasks-per-node=1 --cpus-per-task=4 --ntasks=1 --time=00:15:00'
     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 bio-apps/v202603
module load nextflow/26.04.6-standalone

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

Lopuksi lähetä työ supertietokoneelle:

sbatch nextflow_slurm_batch_job.sh

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

HyperQueue executor

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 bio-apps/v202603
module load nextflow/26.04.6-standalone

# 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 seuraavaan julkaisuun:

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