Orchestrare i job eseguendo le pipeline dsub su Batch

Questo tutorial spiega come eseguire una pipeline dsub su Batch. Nello specifico, la pipeline dsub di esempio elabora i dati di sequenziamento del DNA in un file Binary Alignment Map (BAM) per creare un file indice BAM (BAI).

Questo tutorial è destinato agli utenti Batch che vogliono utilizzare dsub con Batch. dsub è uno scheduler di job open source per orchestrare i workflow di elaborazione batch su Google Cloud. Per saperne di più su come utilizzare Batch con dsub, consulta la documentazione di dsub per Batch.

Obiettivi

  • Esegui una pipeline dsub su Batch che legge e scrive file nei bucket Cloud Storage.
  • Visualizza i file di output in un bucket Cloud Storage.

Costi

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

  • Batch
  • Cloud Storage

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Le risorse create in questo tutorial in genere costano meno di un dollaro, se completi tutti i passaggi, inclusa la pulizia, in modo tempestivo.

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 senza costi per l'esecuzione, il test e il deployment dei workload.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Creare un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  6. Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .

  7. Abilita le API Batch, Cloud Storage, Compute Engine e Logging:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin), che include l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  8. Installa Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Creare un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  12. Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .

  13. Abilita le API Batch, Cloud Storage, Compute Engine e Logging:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin), che include l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  14. Assicurati che il tuo progetto abbia almeno un service account con le autorizzazioni richieste per questo tutorial.

    Ogni job richiede un account di servizio che consenta all'agente di servizio Batch di creare e accedere alle risorse necessarie per eseguire il job. Per questo tutorial, il account di servizio del job è il service account Compute Engine predefinito.

    Per assicurarti che il account di servizio predefinito di Compute Engine disponga delle autorizzazioni necessarie per consentire all'agente di servizio Batch di creare e accedere alle risorse per i job Batch, chiedi all'amministratore di concedere i seguenti ruoli IAM al account di servizio predefinito di Compute Engine:

    Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

    L'amministratore potrebbe anche essere in grado di concedere al account di servizio predefinito di Compute Engine le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.

  15. Assicurati di disporre delle autorizzazioni necessarie per questo tutorial.

    Per ottenere le autorizzazioni necessarie per completare questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  16. Installa dsub e le relative dipendenze. Per saperne di più, consulta la documentazione sull'installazione di dsub.

    1. Assicurati di aver installato versioni di Python e pip supportate dall'ultima versione di dsub. Per visualizzare le versioni attualmente installate, esegui questo comando:

      pip --version
      

      Se devi installare o aggiornare pip o Python, segui i passaggi per l'installazione di Python.

    2. Consigliato: per evitare errori di conflitto di dipendenze durante l'installazione di dsub, crea e attiva un ambiente virtuale Python:

      python -m venv dsub_libs && source dsub_libs/bin/activate
      
    3. Clona il repository GitHub dsub utilizzando git e aprilo:

      git clone https://github.com/databiosphere/dsub.git && cd dsub
      
    4. Installa dsub e le relative dipendenze:

      python -m pip install .
      

      L'output è simile al seguente:

      ...
      Successfully installed cachetools-5.3.1 certifi-2023.7.22 charset-normalizer-3.3.1 dsub-0.4.9 funcsigs-1.0.2 google-api-core-2.11.0 google-api-python-client-2.85.0 google-auth-2.17.3 google-auth-httplib2-0.1.0 google-cloud-batch-0.10.0 googleapis-common-protos-1.61.0 grpcio-1.59.0 grpcio-status-1.59.0 httplib2-0.22.0 idna-3.4 mock-4.0.3 parameterized-0.8.1 proto-plus-1.22.3 protobuf-4.24.4 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-3.1.1 python-dateutil-2.8.2 pytz-2023.3 pyyaml-6.0 requests-2.31.0 rsa-4.9 six-1.16.0 tabulate-0.9.0 tenacity-8.2.2 uritemplate-4.1.1 urllib3-2.0.7
      

Crea un bucket Cloud Storage

Per creare un bucket Cloud Storage per archiviare i file di output della pipeline dsub di esempio utilizzando gcloud CLI, esegui il comando gcloud storage buckets create:

gcloud storage buckets create gs://BUCKET_NAME \
    --project PROJECT_ID

Sostituisci quanto segue:

L'output è simile al seguente:

Creating gs://BUCKET_NAME/...

Esegui la pipeline dsub

La pipeline di esempio dsub indicizza un file BAM dal 1000 Genomes Project e restituisce i risultati in un bucket Cloud Storage.

Per eseguire la pipeline di esempio dsub, esegui questo comando dsub:

dsub \
    --provider google-batch \
    --project PROJECT_ID \
    --logging gs://BUCKET_NAME/WORK_DIRECTORY/logs \
    --input BAM=gs://genomics-public-data/1000-genomes/bam/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam \
    --output BAI=gs://BUCKET_NAME/WORK_DIRECTORY/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam.bai \
    --image quay.io/cancercollaboratory/dockstore-tool-samtools-index \
    --command 'samtools index ${BAM} ${BAI}' \
    --wait

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del tuo progetto Google Cloud .

  • BUCKET_NAME: il nome del bucket Cloud Storage che hai creato.

  • WORK_DIRECTORY: il nome di una nuova directory che la pipeline può utilizzare per archiviare log e output. Ad esempio, inserisci workDir.

La pipeline dsub esegue un job batch che scrive il file BAI e i log nella directory specificata nel bucket Cloud Storage. Nello specifico, il repository dsub contiene un'immagine Docker predefinita che utilizza samtools per indicizzare il file BAM specificato nel flag --input.

Il comando non viene completato finché non viene eseguita la pipeline dsub, il cui completamento può variare in base alla pianificazione del job Batch. In genere, questa operazione richiede circa 10 minuti: Batch di solito inizia a eseguire il job entro pochi minuti e la durata del job è di circa 8 minuti.

All'inizio, il comando è ancora in esecuzione e l'output è simile al seguente:

Job properties:
  job-id: JOB_NAME
  job-name: samtools
  user-id: USERNAME
Provider internal-id (operation): projects/PROJECT_ID/locations/us-central1/jobs/JOB_NAME
Launched job-id: JOB_NAME
To check the status, run:
  dstat --provider google-batch --project PROJECT_ID --location us-central1 --jobs 'JOB_NAME' --users 'USERNAME' --status '*'
To cancel the job, run:
  ddel --provider google-batch --project PROJECT_ID --location us-central1 --jobs 'JOB_NAME' --users 'USERNAME'
Waiting for job to complete...
Waiting for: JOB_NAME.

Al termine del job, il comando termina e l'output è simile al seguente:

  JOB_NAME: SUCCESS
JOB_NAME

Questo output include i seguenti valori:

  • JOB_NAME: il nome del job.

  • USERNAME: il tuo nome utente Google Cloud .

  • PROJECT_ID: l'ID progetto del tuo progetto Google Cloud .

Visualizzare i file di output

Per visualizzare i file di output creati dalla pipeline di esempio dsub utilizzando gcloud CLI, esegui il comando gcloud storage ls:

gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY \
    --project PROJECT_ID

Sostituisci quanto segue:

  • BUCKET_NAME: il nome del bucket Cloud Storage che hai creato.

  • WORK_DIRECTORY: la directory che hai specificato nel comando dsub.

  • PROJECT_ID: l'ID progetto del tuo progetto Google Cloud .

L'output è simile al seguente:

gs://BUCKET_NAME/WORK_DIRECTORY/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam.bai
gs://BUCKET_NAME/WORK_DIRECTORY/logs/

Questo output include il file BAI e una directory contenente i log del job.

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.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto corrente.

    Elimina un progetto Google Cloud :

    gcloud projects delete PROJECT_ID

Elimina singole risorse

Se vuoi continuare a utilizzare il progetto attuale, elimina le singole risorse utilizzate in questo tutorial.

Elimina il bucket

Al termine dell'esecuzione, la pipeline crea e archivia i file di output nella directory WORK_DIRECTORY del bucket Cloud Storage.

Per ridurre gli addebiti di Cloud Storage all'account Google Cloud attuale, esegui una delle seguenti operazioni:

  • Se non hai più bisogno del bucket che hai utilizzato in questo tutorial, utilizza il comando gcloud storage rm con il flag --recursive per eliminare il bucket e tutti i relativi contenuti:

    gcloud storage rm gs://BUCKET_NAME \
        --recursive \
        --project PROJECT_ID
    

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage che hai creato.

    • PROJECT_ID: l'ID progetto del tuo progetto Google Cloud .

  • Altrimenti, se hai ancora bisogno del bucket, utilizza il comando gcloud storage rm con il flag --recursive per eliminare solo la directory WORK_DIRECTORY e tutti i relativi contenuti:

    gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \
        --recursive \
        --project PROJECT_ID
    

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage che hai creato.

    • WORK_DIRECTORY: la directory che hai specificato nel comando dsub.

    • PROJECT_ID: l'ID progetto del tuo progetto Google Cloud .

Elimina il job

Per eliminare un job utilizzando gcloud CLI, esegui il comando gcloud batch jobs delete.

gcloud batch jobs delete JOB_NAME \
    --location us-central1 \
    --project PROJECT_ID

Sostituisci quanto segue:

  • JOB_NAME: il nome del job.
  • PROJECT_ID: l'ID progetto del tuo progetto Google Cloud .

Passaggi successivi