Esegui Nextflow


Questa pagina spiega come eseguire una pipeline Nextflow su Google Cloud.

La pipeline utilizzata in questo tutorial è una proof of concept di una pipeline RNA-Seq destinata a mostrare l'utilizzo di Nextflow su Google Cloud.

Obiettivi

Una volta completato il tutorial, saprai come procedere:

  • Installa Nextflow in Cloud Shell.
  • Configurare una pipeline Nextflow.
  • Esegui una pipeline utilizzando Nextflow su Google Cloud.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud Storage

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Cloud Life Sciences, Compute Engine, and Cloud Storage.

    Abilita le API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API Cloud Life Sciences, Compute Engine, and Cloud Storage.

    Abilita le API

Crea un bucket Cloud Storage

Crea un bucket denominato in modo univoco seguendo le indicazioni delle linee guida per la denominazione dei bucket. Il bucket archivia i file di lavoro e di output temporanei in questo tutorial. Per la compatibilità DNS, questo tutorial non funziona con i nomi dei bucket contenenti un trattino basso (_).

Console

  1. Nella console Google Cloud, vai alla pagina Browser di Cloud Storage:

    Vai al browser

  2. Fai clic su Crea bucket.

  3. Nella pagina Crea un bucket, inserisci le informazioni del bucket.

  4. Fai clic su Crea.

gsutil

  1. Apri Cloud Shell:

    Vai a Cloud Shell

  2. Utilizza il comando gsutil mb:

    gsutil mb gs://BUCKET_NAME
    

    Sostituisci BUCKET_NAME con il nome che vuoi assegnare al tuo bucket, soggetto ai requisiti di denominazione. Ad esempio: my-bucket.

    Se la richiesta riesce, il comando restituisce il seguente messaggio:

    Creating gs://BUCKET_NAME/...
    

Crea un account di servizio e aggiungi ruoli

Completa i seguenti passaggi per creare un account di servizio e aggiungere i seguenti ruoli di Identity and Access Management:

  • Esecutore flussi di lavoro Cloud Life Sciences
  • Utente account di servizio
  • Consumer utilizzo dei servizi
  • Amministratore oggetti Storage

Console

Crea un account di servizio utilizzando la console Google Cloud:

  1. Nella console Google Cloud, vai alla pagina Account di servizio.

    Vai alla pagina Account di servizio

  2. Fai clic su Crea account di servizio.

  3. Nel campo Nome account di servizio, inserisci nextflow-service-account e fai clic su Crea.

  4. Nella sezione Concedi a questo account di servizio l'accesso al progetto, aggiungi i seguenti ruoli dall'elenco a discesa Seleziona un ruolo:

    • Esecutore flussi di lavoro Cloud Life Sciences
    • Utente account di servizio
    • Consumer utilizzo dei servizi
    • Amministratore oggetti Storage
  5. Fai clic su Continua e poi su Fine.

  6. Nella pagina Account di servizio, individua l'account di servizio che hai creato. Nella riga dell'account di servizio, fai clic sul pulsante e poi su Gestisci chiavi.

  7. Nella pagina Chiavi, fai clic su Aggiungi chiave, quindi fai clic su Crea nuova chiave.

  8. Seleziona JSON come Tipo di chiave e fai clic su Crea.

    Un file JSON contenente la chiave che viene scaricata sul computer.

gcloud

Completa i seguenti passaggi utilizzando Cloud Shell:

  1. Apri Cloud Shell.

    Vai a Cloud Shell

  2. Imposta le variabili da utilizzare per creare l'account di servizio, sostituendo PROJECT_ID con l'ID progetto.

    export PROJECT=PROJECT_ID
    export SERVICE_ACCOUNT_NAME=nextflow-service-account
    export SERVICE_ACCOUNT_ADDRESS=${SERVICE_ACCOUNT_NAME}@${PROJECT}.iam.gserviceaccount.com
    
  3. Creare l'account di servizio:

    gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
    
  4. L'account di servizio richiede i seguenti ruoli IAM:

    • roles/lifesciences.workflowsRunner
    • roles/iam.serviceAccountUser
    • roles/serviceusage.serviceUsageConsumer
    • roles/storage.objectAdmin

    Concedi questi ruoli eseguendo i comandi seguenti in Cloud Shell:

    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/lifesciences.workflowsRunner
    
    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/iam.serviceAccountUser
    
    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/serviceusage.serviceUsageConsumer
    
    gcloud projects add-iam-policy-binding ${PROJECT} \
        --member serviceAccount:${SERVICE_ACCOUNT_ADDRESS} \
        --role roles/storage.objectAdmin
    

Fornisci le credenziali alla tua applicazione

Puoi fornire credenziali di autenticazione al codice o ai comandi dell'applicazione impostando la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso del file JSON contenente la chiave dell'account di servizio.

I seguenti passaggi mostrano come impostare la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS:

Console

  1. Apri Cloud Shell.

    Vai a Cloud Shell

  2. Nel menu Altro di Cloud Shell, seleziona Carica file e seleziona il file della chiave JSON che hai creato. Il file viene caricato nella home directory dell'istanza di Cloud Shell.

  3. Verifica che il file caricato si trovi nella directory attuale e conferma il nome del file eseguendo questo comando:

    ls
    

  4. Imposta le credenziali sostituendo KEY_FILENAME.json con il nome del file della chiave.

    export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/KEY_FILENAME.json
    

gcloud

Completa i seguenti passaggi utilizzando Cloud Shell:

  1. Apri Cloud Shell.

    Vai a Cloud Shell

  2. Nel menu Altro di Cloud Shell, seleziona Carica file e seleziona il file della chiave JSON che hai creato. Il file viene caricato nella home directory dell'istanza di Cloud Shell.

  3. Verifica che il file caricato si trovi nella directory attuale e conferma il nome del file eseguendo questo comando:

    ls
    

  4. Imposta il file della chiave privata sulla variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS:

    export SERVICE_ACCOUNT_KEY=${SERVICE_ACCOUNT_NAME}-private-key.json
    gcloud iam service-accounts keys create \
      --iam-account=${SERVICE_ACCOUNT_ADDRESS} \
      --key-file-type=json ${SERVICE_ACCOUNT_KEY}
    export SERVICE_ACCOUNT_KEY_FILE=${PWD}/${SERVICE_ACCOUNT_KEY}
    export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${SERVICE_ACCOUNT_KEY}
    

Installa e configura Nextflow in Cloud Shell

Per evitare di installare software sulla macchina, continua a eseguire tutti i comandi dei terminali in questo tutorial da Cloud Shell.

  1. Se non è già aperto, apri Cloud Shell.

    Vai a Cloud Shell

  2. Installa Nextflow eseguendo questi comandi:

    export NXF_VER=21.10.0
    export NXF_MODE=google
    curl https://get.nextflow.io | bash
    

    Se l'installazione viene completata correttamente, viene visualizzato il messaggio seguente:

        N E X T F L O W
    version 21.10.0 build 5430
    created 01-11-2020 15:14 UTC (10:14 EDT)
    cite doi:10.1038/nbt.3820
    http://nextflow.io
    
    Nextflow installation completed. Please note:
    ‐ the executable file `nextflow` has been created in the folder: DIRECTORY
    ‐ you may complete the installation by moving it to a directory in your $PATH
    
  3. Esegui il comando che segue per clonare il repository della pipeline di esempio. Il repository include la pipeline da eseguire e i dati di esempio utilizzati dalla pipeline.

    git clone https://github.com/nextflow-io/rnaseq-nf.git
    
  4. Completa i seguenti passaggi per configurare Nextflow:

    1. Passa alla cartella rnaseq-nf.

      cd rnaseq-nf
      git checkout v2.0
      

    2. Utilizzando un editor di testo a tua scelta, modifica il file denominato nextflow.config e apporta i seguenti aggiornamenti alla sezione denominata gls:

      • Aggiungi la riga google.project se non è presente.
      • Sostituisci PROJECT_ID con l'ID progetto.
      • Se vuoi, modifica il valore di google.location. Deve essere una delle località dell'API Cloud Life Sciences attualmente disponibili.
      • Se vuoi, modifica il valore di google.region che specifica l'area geografica in cui vengono avviate le VM di Compute Engine. Vedi Aree geografiche e zone di Compute Engine disponibili.
      • Sostituisci BUCKET con il nome del bucket creato in precedenza.
      • Sostituisci WORK_DIR con il nome di una cartella da utilizzare per il logging e l'output. Utilizza un nuovo nome di directory che non esiste ancora nel tuo bucket.
      gls {
         params.transcriptome = 'gs://rnaseq-nf/data/ggal/transcript.fa'
         params.reads = 'gs://rnaseq-nf/data/ggal/gut_{1,2}.fq'
         params.multiqc = 'gs://rnaseq-nf/multiqc'
         process.executor = 'google-lifesciences'
         process.container = 'nextflow/rnaseq-nf:latest'
         workDir = 'gs://BUCKET/WORK_DIR'
         google.location = 'europe-west2'
         google.region  = 'europe-west1'
         google.project = 'PROJECT_ID'
      }
      
    3. Torna alla cartella precedente

      cd ..
      

Esegui la pipeline con Nextflow

Esegui la pipeline con Nextflow. Una volta avviata, la pipeline continua a essere eseguita in background fino al completamento. Il completamento della pipeline potrebbe richiedere fino a 10 minuti.

./nextflow run rnaseq-nf/main.nf -profile gls

Al termine della pipeline, viene visualizzato il seguente messaggio:

N E X T F L O W  ~  version 21.10.0
Launching `rnaseq-nf/main.nf` [suspicious_mestorf] - revision: ef908c0bfd
R N A S E Q - N F   P I P E L I N E
 ===================================
 transcriptome: gs://rnaseq-nf/data/ggal/transcript.fa
 reads        : gs://rnaseq-nf/data/ggal/gut_{1,2}.fq
 outdir       : results
executor >  google-lifesciences (4)
[db/2af640] process > RNASEQ:INDEX (transcript)     [100%] 1 of 1 ✔
[a6/927725] process > RNASEQ:FASTQC (FASTQC on gut) [100%] 1 of 1 ✔
[59/438177] process > RNASEQ:QUANT (gut)            [100%] 1 of 1 ✔
[9a/9743b9] process > MULTIQC                       [100%] 1 of 1 ✔
Done! Open the following report in your browser --> results/multiqc_report.html
Completed at: DATE TIME
Duration    : 10m
CPU hours   : 0.2
Succeeded   : 4

Visualizzazione dell'output della pipeline Nextflow

Al termine della pipeline, puoi controllare l'output, nonché eventuali log, errori, comandi in esecuzione e file temporanei.

La pipeline salva il file di output finale, results/qc_report.html, nel bucket Cloud Storage specificato nel file nextflow.config.

Per verificare i singoli file di output da ciascuna attività e i file intermedi, procedi nel seguente modo:

Console

  1. Nella console di Cloud Storage, apri la pagina Browser Storage:

    Vai al browser Cloud Storage

  2. Vai al BUCKET e vai al WORK_DIR specificato nel file nextflow.config.

  3. È presente una cartella per ciascuna delle attività separate eseguite nella pipeline.

  4. La cartella contiene i comandi che sono stati eseguiti, i file di output e i file temporanei utilizzati durante il flusso di lavoro.

gcloud

  1. Per visualizzare i file di output in Cloud Shell, innanzitutto apri Cloud Shell:

    Vai a Cloud Shell

  2. Esegui il comando seguente per elencare gli output nel bucket Cloud Storage. Aggiorna BUCKET e WORK_DIR alle variabili specificate nel file nextflow.config.

    gsutil ls gs://BUCKET/WORK_DIR
    
  3. L'output mostra una cartella per ciascuna delle attività eseguite. Continua a elencare i contenuti delle sottodirectory successive per visualizzare tutti i file creati dalla pipeline. Aggiorna TASK_FOLDER una delle cartelle di attività elencate dal comando precedente.

    gsutil ls gs://BUCKET/WORK_DIR/FOLDER/TASK_FOLDER
    

Puoi visualizzare i file intermedi creati dalla pipeline e scegliere quali mantenere, oppure rimuoverli per ridurre i costi associati a Cloud Storage. Per rimuovere i file, vedi Eliminazione dei file intermedi nel bucket Cloud Storage.

Risolvere i problemi

  • Se riscontri problemi durante l'esecuzione della pipeline, consulta la sezione Risoluzione dei problemi dell'API Cloud Life Sciences.

  • In caso di errore della pipeline, puoi controllare i log per ogni attività esaminando i file di log in ogni cartella in Cloud Storage, ad esempio .command.err, .command.log, .command.out e così via.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Al termine del tutorial, puoi eseguire la pulizia delle risorse che hai creato in modo che smettano di utilizzare la quota e vengano addebitati costi. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.

Elimina i file intermedi nel tuo bucket Cloud Storage

Quando esegui la pipeline, i file intermedi vengono archiviati in gs://BUCKET/WORK_DIR. Puoi rimuovere i file al termine del flusso di lavoro per ridurre gli addebiti di Cloud Storage.

Per visualizzare la quantità di spazio utilizzata nella directory, esegui il comando seguente:

gsutil du -sh gs://BUCKET/WORK_DIR

Per rimuovere file da WORK_DIR, completa i seguenti passaggi:

Console

  1. Nella console di Cloud Storage, apri la pagina Browser Storage:

    Vai al browser Cloud Storage

  2. Vai al BUCKET e vai al WORK_DIR specificato nel file nextflow.config.

  3. Sfoglia le sottocartelle ed elimina eventuali directory o file indesiderati. Per eliminare tutti i file, elimina intero WORK_DIR.

gcloud

  1. Apri Cloud Shell ed esegui il comando seguente:

    Vai a Cloud Shell

  2. Per rimuovere i file intermedi nella directory WORK_DIR, esegui questo comando:

    gsutil -m rm gs://BUCKET/WORK_DIR/**
    

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

Per eliminare il progetto:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi

Le seguenti pagine forniscono ulteriori informazioni di base, documentazione e supporto per l'utilizzo di Nextflow: