-
Nextflow
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:
LUMIssa Nextflow on saatavilla erillisenä moduulina. Jotta CSC:n moduulit ovat käytettävissä LUMIssa, lataa ensin CSC:n moduulipuu käyttöön:
Saat käyttöohjeen komennolla:
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
$TMPDIRseuraavasti:
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:
- Vuorovaikutteisessa tilassa local-executorilla, rajallisilla resursseilla. Hyödyllinen lähinnä virheenjäljitykseen tai hyvin pienten työnkulkujen testaukseen.
- Eräajona local-executorilla. Hyödyllinen pienille ja keskisuurille työnkuluille.
- 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.
- 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.
#!/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)
}
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:
#!/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:
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.
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ö.
#!/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:
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:
#!/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:
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
- Nextflow’n virallinen dokumentaatio
- Antoni Gołośin diplomityö, jossa vertaillaan automatisoituja työnkulkuratkaisuja supertietokoneilla
- Antoni Gołośin täydellinen Nextflow-esimerkkikoodi kolmella eri executorilla
- Yleiset ohjeet high-throughput computing -laskentaan CSC:n HPC-ympäristössä
- HyperQueuen virallinen dokumentaatio
- CSC:n HyperQueue-dokumentaatio