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 di Batch che vogliono utilizzare
dsub
con Batch.
dsub
è uno scheduler di job open source
per l'orchestrazione di 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 utilizzi 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.
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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:
gcloud services enable batch.googleapis.com
compute.googleapis.com logging.googleapis.com storage.googleapis.com -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:
gcloud services enable batch.googleapis.com
compute.googleapis.com logging.googleapis.com storage.googleapis.com -
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 predefinito di Compute Engine.
Per assicurarti che l'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 all'account di servizio predefinito di Compute Engine i seguenti ruoli IAM:
-
Batch Agent Reporter (
roles/batch.agentReporter
) sul progetto -
Amministratore Storage (
roles/storage.admin
) sul progetto -
(Consigliato) Consenti ai job di generare log in Cloud Logging:
Logs Writer (
roles/logging.logWriter
) sul progetto
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 all'account di servizio predefinito di Compute Engine le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Batch Agent Reporter (
-
Assicurati di disporre delle autorizzazioni richieste per questo tutorial.
Per ottenere le autorizzazioni necessarie per completare questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Batch Job Editor (
roles/batch.jobsEditor
) sul progetto -
Utente service account (
roles/iam.serviceAccountUser
) sul account di servizio del job, che per questo tutorial è il service account predefinito di Compute Engine -
Storage Object Admin (
roles/storage.objectAdmin
) sul progetto
-
Batch Job Editor (
-
Installa
dsub
e le relative dipendenze. Per saperne di più, consulta la documentazione sull'installazione didsub
.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.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
Clona il repository GitHub
dsub
utilizzandogit
e aprilo:git clone https://github.com/databiosphere/dsub.git && cd dsub
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:
BUCKET_NAME
: un nome univoco a livello globale per il bucket.PROJECT_ID
: l'ID progetto del tuo progetto Google Cloud .
L'output è simile al seguente:
Creating gs://BUCKET_NAME/...
Esegui la pipeline dsub
La pipeline di esempio dsub
indicizza un file BAM dal
progetto 1000 Genomes
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, inserisciworkDir
.
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
,
che 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 specificata nel comandodsub
.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 è quello di eliminare il progetto corrente.
Delete a Google Cloud project:
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, usa 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 directoryWORK_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 comandodsub
.PROJECT_ID
: l'ID progetto del tuo progetto Google Cloud .
Eliminare 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
- Scopri di più su
dsub
edsub
per Batch. - Scopri di più sull'utilizzo dei volumi di archiviazione con Batch.