Workflows de Workflows¶
Traducció assistida per IA - més informació i suggeriments
Quan esteu desenvolupant un pipeline, sovint us trobeu creant seqüències similars de processos per a diferents tipus de dades o passos d'anàlisi. Podríeu acabar copiant i enganxant aquestes seqüències de processos, cosa que porta a codi duplicat difícil de mantenir; o podríeu crear un workflow massiu que sigui difícil d'entendre i modificar.
Una de les característiques més potents de Nextflow és la seva capacitat per compondre pipelines complexos a partir de mòduls de workflow més petits i reutilitzables. Aquest enfocament modular fa que els pipelines siguin més fàcils de desenvolupar, provar i mantenir.
Objectius d'aprenentatge¶
En aquesta missió secundària, explorarem com desenvolupar mòduls de workflow que es puguin provar i utilitzar per separat, compondre aquests mòduls en un pipeline més gran i gestionar el flux de dades entre mòduls.
Al final d'aquesta missió secundària, sereu capaços de:
- Descompondre pipelines complexos en unitats lògiques i reutilitzables
- Provar cada mòdul de workflow de manera independent
- Combinar workflows per crear nous pipelines
- Compartir mòduls de workflow comuns entre diferents pipelines
- Fer el vostre codi més mantenible i fàcil d'entendre
Aquestes habilitats us ajudaran a construir pipelines complexos mantenint una estructura de codi neta i mantenible.
Prerequisits¶
Abans d'abordar aquesta missió secundària hauríeu de:
- Haver completat el tutorial Hello Nextflow o un curs equivalent per a principiants.
- Estar còmodes utilitzant conceptes i mecanismes bàsics de Nextflow (processos, canals, operadors, mòduls)
0. Primers passos¶
Obriu el codespace de formació¶
Si encara no ho heu fet, assegureu-vos d'obrir l'entorn de formació tal com es descriu a la Configuració de l'entorn.
Moveu-vos al directori del projecte¶
Moveu-vos al directori on es troben els fitxers d'aquest tutorial.
Podeu configurar VSCode perquè es centri en aquest directori:
L'editor s'obre amb el directori del projecte en primer pla.
Reviseu els materials¶
Trobareu un directori modules amb definicions de processos, un directori workflows amb dos scripts de workflow escrits prèviament, i un fitxer main.nf que anireu actualitzant progressivament:
├── main.nf
├── workflows/
│ ├── greeting.nf # Standalone greeting workflow (to be made composable)
│ └── transform.nf # Standalone transform workflow (to be made composable)
└── modules/
├── say_hello.nf # Creates a greeting (from Hello Nextflow)
├── say_hello_upper.nf # Converts to uppercase (from Hello Nextflow)
├── timestamp_greeting.nf # Adds timestamps to greetings
├── validate_name.nf # Validates input names
└── reverse_text.nf # Reverses text content
El directori modules/ conté les definicions individuals de processos, i el directori workflows/ conté els dos scripts de workflow escrits prèviament amb els quals treballareu en aquesta missió secundària.
Reviseu l'assignació¶
El vostre repte és assemblar aquests mòduls en dos workflows separats que després composarem en un workflow principal:
- Un
GREETING_WORKFLOWque valida noms, crea salutacions i afegeix marques de temps - Un
TRANSFORM_WORKFLOWque converteix text a majúscules i l'inverteix
El pipeline acabat encadena els dos workflows en un únic flux de dades:
- Validar: comprovar que cada nom té el format correcte
- Saludar: generar una salutació per a cada nom vàlid
- Marca de temps: registrar quan s'ha creat cada salutació
- Majúscules: convertir la salutació amb marca de temps a majúscules
- Invertir: invertir el text en majúscules
Els tres primers passos pertanyen a GREETING_WORKFLOW, i els dos últims pertanyen a TRANSFORM_WORKFLOW.
Construir-los com a workflows separats i composables us permet desenvolupar i provar cada etapa de manera independent abans de connectar-los.
Llista de verificació de preparació¶
Creieu que esteu preparats per submergir-vos?
- Entenc l'objectiu d'aquest curs i els seus prerequisits
- El meu codespace està en funcionament
- He configurat el meu directori de treball adequadament
- Entenc l'assignació
Si podeu marcar totes les caselles, esteu a punt per començar.
1. Afegiu el greeting workflow al pipeline¶
El greeting workflow valida noms i genera salutacions amb marca de temps.
1.1. Reviseu i executeu el greeting workflow¶
Obriu workflows/greeting.nf i examineu el codi:
Aquest és un workflow complet i autònom amb la mateixa estructura que vau veure al tutorial 'Hello Nextflow'. Té els noms d'entrada codificats, encadena tres processos i publica dues sortides.
Executeu-lo per verificar que tot funciona:
Sortida de la comanda
N E X T F L O W ~ version 26.04.4
Launching `workflows/greeting.nf` [sharp_kirch] revision: 04c0a33f79
executor > local (9)
[c5/9df3c8] VAL…TE_NAME (validating Alice) | 3 of 3 ✔
[e0/243874] SAY_HELLO (greeting Alice) | 3 of 3 ✔
[c5/e40c8d] TIM…ing timestamp to greeting) | 3 of 3 ✔
Outputs:
/workspaces/training/side-quests/workflows_of_workflows/results
greetings:
- Charlie-output.txt
- Bob-output.txt
- Alice-output.txt
timestamped:
- timestamped_Bob-output.txt
- timestamped_Charlie-output.txt
- timestamped_Alice-output.txt
Per fer-lo composable amb altres workflows, cal canviar algunes coses.
1.2. Feu el workflow composable¶
Per fer un workflow composable, cal canviar tres coses:
el workflow rep un nom, les entrades es mouen a un bloc take: i les sortides es mouen a un bloc emit:
(substituint els blocs autònoms publish:/output {}, que pertanyen al entry workflow).
Les seccions següents cobreixen aquests canvis un per un.
1.2.1. Doneu nom al workflow¶
Doneu un nom al workflow perquè es pugui importar des d'un workflow pare.
Amb un nom, el workflow es pot importar en altres scripts.
1.2.2. Declareu les entrades amb take:¶
Substituïu la declaració del canal codificada per un bloc take: que declari quines entrades espera el workflow.
El bloc take: va abans de main:, i s'elimina la línia names_ch = channel.of(...).
| workflows/greeting.nf | |
|---|---|
| workflows/greeting.nf | |
|---|---|
El bloc take: declara el canal només pel nom. El workflow pare defineix el que hi entra.
1.2.3. Declareu les sortides amb emit:¶
Substituïu la secció publish: i elimineu el bloc output {}, reemplaçant-los per un bloc emit: que nomeni les sortides.
El bloc emit: exposa sortides amb nom a les quals els workflows pare poden accedir mitjançant GREETING_WORKFLOW.out.greetings i GREETING_WORKFLOW.out.timestamped.
1.2.4. Verifiqueu el resultat i proveu-lo¶
Després dels tres canvis, el fitxer complet hauria de tenir aquest aspecte:
Ara proveu d'executar-lo directament:
Sortida de la comanda
Això introdueix un concepte clau: el entry workflow.
Nextflow utilitza un bloc workflow {} sense nom com a punt d'entrada quan executeu un script directament.
GREETING_WORKFLOW té nom, de manera que Nextflow no sap com executar-lo per si sol.
Això és intencionat. Els workflows composables estan dissenyats per ser cridats des d'un entry workflow, no per executar-se directament.
La solució és un entry workflow a main.nf que importi i cridi GREETING_WORKFLOW.
1.3. Actualitzeu i proveu el workflow principal¶
Ara actualitzeu el workflow principal per cridar el greeting workflow.
1.3.1. Incloeu el greeting workflow i crideu-lo¶
Afegiu la sentència include, actualitzeu el cos del workflow per cridar GREETING_WORKFLOW i substituïu el marcador de posició channel.empty() a publish::
El entry workflow es manté sense nom perquè Nextflow l'utilitzi com a punt d'entrada del pipeline.
1.3.2. Actualitzeu el bloc de sortida¶
Afegiu una directiva path per dirigir les salutacions publicades a un subdirectori greetings/:
1.3.3. Executeu el workflow¶
Executeu el workflow per comprovar que funciona:
Sortida de la comanda
N E X T F L O W ~ version 26.04.4
Launching `main.nf` [agitated_jones] revision: 6b0e98dd05
executor > local (9)
[00/5ac4ce] GRE…DATE_NAME (validating Bob) | 3 of 3 ✔
[7d/dde45c] GRE…SAY_HELLO (greeting Alice) | 3 of 3 ✔
[fd/a044cc] GRE…ing timestamp to greeting) | 3 of 3 ✔
Outputs:
/workspaces/training/side-quests/workflows_of_workflows/results
greetings:
- greetings/Bob-output.txt
- greetings/Charlie-output.txt
- greetings/Alice-output.txt
Nou contingut afegit a results/
Els sis fitxers de l'execució autònoma de la secció 1.1 (Alice-output.txt, timestamped_Alice-output.txt, etc.) encara es troben a results/ al costat d'aquest nou subdirectori greetings/.
Això és esperat: res en aquesta lliçó els elimina, i la secció 2.1 els llegeix directament com a entrada.
Els fitxers de salutació es publiquen a results/greetings/.
El workflow principal crida GREETING_WORKFLOW i connecta la seva sortida directament a la secció publish:.
GREETING_WORKFLOW.out.timestamped no està connectat a publish: aquí.
A partir de la secció 2, aquest canal es converteix en l'entrada de TRANSFORM_WORKFLOW en lloc d'una sortida publicada per si mateixa.
Compareu-ho amb l'execució autònoma de la secció 1.1, on timestamped no tenia res més on alimentar-se, de manera que es publicava directament.
Conclusió¶
En aquesta secció, heu après diversos conceptes importants:
- Workflows amb nom: Crear un workflow amb nom (
GREETING_WORKFLOW) que es pot importar i reutilitzar - Interfícies de workflow: Definir entrades clares amb
take:i sortides ambemit:per crear un workflow composable - Punts d'entrada: Entendre que Nextflow necessita un entry workflow sense nom per executar un script
- Composició de workflows: Importar i utilitzar un workflow amb nom dins d'un altre workflow
- Espais de noms de workflow: Accedir a les sortides del workflow utilitzant l'espai de noms
.out(GREETING_WORKFLOW.out.greetings)
Ara teniu un greeting workflow funcional que:
- Rep un canal de noms com a entrada
- Valida cada nom
- Crea una salutació per a cada nom vàlid
- Afegeix marques de temps a les salutacions
- Emet tant les salutacions originals com les salutacions amb marca de temps, tot i que en aquesta etapa només les salutacions originals es publiquen a
results/
Aquest enfocament modular us permet provar el greeting workflow de manera independent o utilitzar-lo com a component en pipelines més grans.
2. Afegiu el transform workflow al pipeline¶
El transform workflow aplica transformacions de text a les salutacions amb marca de temps.
2.1. Reviseu i executeu el workflow¶
Obriu workflows/transform.nf i examineu el codi:
Aquest workflow autònom llegeix els fitxers de salutació amb marca de temps del directori results/ produït per greeting.nf, els converteix a majúscules i després inverteix el text.
Executeu-lo per verificar que funciona amb els resultats del greeting de la secció 1.1:
Sortida de la comanda
N E X T F L O W ~ version 26.04.4
Launching `workflows/transform.nf` [evil_meninsky] revision: 4e35790d32
executor > local (6)
[7d/4ed7de] SAY…estamped_Alice-output.txt) | 3 of 3 ✔
[70/ddaafa] REV…imestamped_Bob-output.txt) | 3 of 3 ✔
Outputs:
/workspaces/training/side-quests/workflows_of_workflows/results
upper:
- UPPER-timestamped_Bob-output.txt
- UPPER-timestamped_Charlie-output.txt
- UPPER-timestamped_Alice-output.txt
reversed:
- REVERSED-UPPER-timestamped_Charlie-output.txt
- REVERSED-UPPER-timestamped_Alice-output.txt
- REVERSED-UPPER-timestamped_Bob-output.txt
Per fer-lo composable amb GREETING_WORKFLOW, cal aplicar els mateixos tres canvis de la secció 1.2.
2.2. Feu-lo composable¶
Apliqueu els mateixos tres canvis que a la secció 1.2: doneu nom al workflow, substituïu l'entrada codificada per take:, i substituïu publish:/output {} per emit:.
El fitxer acabat hauria de tenir aquest aspecte:
El transform workflow ara és composable i està llest per ser importat al workflow principal.
2.3. Actualitzeu i proveu el workflow principal¶
Ara actualitzeu el workflow principal per cridar el transform workflow.
2.3.1. Incloeu el transform workflow i crideu-lo¶
Afegiu la sentència include, una crida a TRANSFORM_WORKFLOW encadenada a les salutacions amb marca de temps, i les dues noves entrades a publish::
Això executarà el transform workflow sobre les salutacions amb marca de temps.
2.3.2. Actualitzeu el bloc de sortida¶
Afegiu les entrades upper i reversed al bloc output {}, cadascuna amb una directiva path per al seu subdirectori:
Això publicarà les sortides finals als directoris corresponents.
2.3.3. Executeu el pipeline complet¶
Executeu el pipeline per comprovar que tot funciona:
Sortida de la comanda
N E X T F L O W ~ version 26.04.4
Launching `main.nf` [special_magritte] revision: 2a0e54fecd
executor > local (15)
[e7/e051a5] GRE…TE_NAME (validating Alice) | 3 of 3 ✔
[ca/cf1b18] GRE…SAY_HELLO (greeting Alice) | 3 of 3 ✔
[e5/aa6be2] GRE…ing timestamp to greeting) | 3 of 3 ✔
[d2/7afc88] TRA…imestamped_Bob-output.txt) | 3 of 3 ✔
[5b/70f190] TRA…estamped_Alice-output.txt) | 3 of 3 ✔
Outputs:
/workspaces/training/side-quests/workflows_of_workflows/results
greetings:
- greetings/Bob-output.txt
- greetings/Charlie-output.txt
- greetings/Alice-output.txt
upper:
- upper/UPPER-timestamped_Charlie-output.txt
- upper/UPPER-timestamped_Bob-output.txt
- upper/UPPER-timestamped_Alice-output.txt
reversed:
- reversed/REVERSED-UPPER-timestamped_Charlie-output.txt
- reversed/REVERSED-UPPER-timestamped_Bob-output.txt
- reversed/REVERSED-UPPER-timestamped_Alice-output.txt
Nou contingut afegit a results/
results/
├── greetings
│ ├── Alice-output.txt
│ ├── Bob-output.txt
│ └── Charlie-output.txt
├── reversed
│ ├── REVERSED-UPPER-timestamped_Alice-output.txt
│ ├── REVERSED-UPPER-timestamped_Bob-output.txt
│ └── REVERSED-UPPER-timestamped_Charlie-output.txt
└── upper
├── UPPER-timestamped_Alice-output.txt
├── UPPER-timestamped_Bob-output.txt
└── UPPER-timestamped_Charlie-output.txt
L'arrel de results/ també conté els fitxers restants de les execucions autònomes de les seccions 1.1 i 2.1 (Alice-output.txt, timestamped_Alice-output.txt, UPPER-timestamped_Alice-output.txt, etc.).
Això és esperat: aquesta lliçó mai no us indica que els elimineu.
Contingut del fitxer
El pipeline funciona de principi a fi: la salutació s'ha convertit a majúscules i s'ha invertit.
Conclusió¶
Ara hauríeu de tenir un pipeline complet que:
- Processa noms a través del greeting workflow
- Alimenta les salutacions amb marca de temps al transform workflow
- Produeix versions en majúscules i invertides de les salutacions
Resum¶
En aquesta missió secundària, hem explorat el potent concepte de composició de workflows a Nextflow, que ens permet construir pipelines complexos a partir de components més petits i reutilitzables.
Aquest enfocament modular ofereix diversos avantatges respecte als pipelines monolítics:
- Cada workflow es pot desenvolupar, provar i depurar de manera independent
- Els workflows es poden reutilitzar en diferents pipelines
- L'estructura general del pipeline es torna més llegible i mantenible
- Els canvis en un workflow no afecten necessàriament els altres si les interfícies es mantenen consistents
- Els punts d'entrada es poden configurar per executar diferents parts del vostre pipeline segons sigui necessari
Cridar un workflow és similar a cridar un procés, però no és el mateix. No podeu executar un workflow N vegades passant-li un canal de mida N: passeu el canal una vegada i el workflow itera sobre ell internament.
Aplicar aquestes tècniques en el vostre propi treball us permetrà construir pipelines de Nextflow més sofisticats que puguin gestionar tasques complexes de processament de dades mantenint-se mantenibles i escalables.
Patrons clau¶
-
Estructura del workflow: Hem definit entrades i sortides clares per a cada workflow utilitzant la sintaxi
take:iemit:, creant interfícies ben definides entre components, i hem embolcallat la lògica del workflow dins del blocmain:. -
Importacions de workflow: Hem construït dos mòduls de workflow independents i els hem importat en un pipeline principal amb sentències
include.- Incloure un sol workflow
- Incloure múltiples workflows
- Incloure amb àlies per evitar conflictes de noms
-
Punts d'entrada: Nextflow requereix un entry workflow sense nom per saber on iniciar l'execució. Aquest entry workflow crida els vostres workflows amb nom.
- Workflow sense nom (punt d'entrada)
- Workflow amb nom (cridat des de l'entry workflow)
-
Gestió del flux de dades: Hem après com accedir a les sortides del workflow utilitzant la notació d'espai de noms (
WORKFLOW_NAME.out.channel_name) i passar-les a altres workflows.
Recursos addicionals¶
- Documentació de Workflow de Nextflow
- Referència d'operadors de canal
- Documentació d'estratègia d'errors
Què segueix?¶
Torneu al menú de missions secundàries o feu clic al botó a la part inferior dreta de la pàgina per continuar amb el tema següent de la llista.