Este tutorial explica como executar um
dsub pipeline
no Batch.
Especificamente, o pipeline de exemplo dsub processa dados de sequenciação de ADN num
ficheiro de mapa de alinhamento binário (BAM)
para criar um ficheiro de índice BAM (BAI).
Este tutorial destina-se a utilizadores do Batch que querem usar o
dsub com o Batch.
O dsub é um agendador de tarefas de código aberto
para orquestrar fluxos de trabalho de processamento em lote no Google Cloud.
Para saber como usar o comando
Batch com dsub, consulte a
documentação do comando Batch.dsub
Objetivos
- Execute um pipeline
dsubno Batch que lê e escreve ficheiros em contentores do Cloud Storage. - Ver os ficheiros de saída num contentor do Cloud Storage.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Batch
- Cloud Storage
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Normalmente, os recursos criados neste tutorial custam menos de 1 €, se concluir todos os passos, incluindo a limpeza, de forma atempada.
Antes de começar
- 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.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable batch.googleapis.com
compute.googleapis.com logging.googleapis.com storage.googleapis.com -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Batch, Cloud Storage, Compute Engine, and Logging APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable batch.googleapis.com
compute.googleapis.com logging.googleapis.com storage.googleapis.com -
Certifique-se de que o seu projeto tem, pelo menos, uma conta de serviço com as autorizações necessárias para este tutorial.
Cada tarefa requer uma conta de serviço que permita ao agente do serviço Batch criar e aceder aos recursos necessários para executar a tarefa. Para este tutorial, a conta de serviço da tarefa é a conta de serviço predefinida do Compute Engine.
Para garantir que a conta de serviço predefinida do Compute Engine tem as autorizações necessárias para permitir que o agente do serviço Batch crie e aceda a recursos para tarefas do Batch, peça ao seu administrador para conceder à conta de serviço predefinida do Compute Engine as seguintes funções do IAM:
-
Batch Agent Reporter (
roles/batch.agentReporter) no projeto -
Administrador de armazenamento (
roles/storage.admin) no projeto -
(Recomendado) Permitir que os trabalhos gerem registos no Cloud Logging:
Logs Writer (
roles/logging.logWriter) no projeto
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
O administrador também pode conceder à conta de serviço predefinida do Compute Engine as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Batch Agent Reporter (
-
Certifique-se de que tem as autorizações necessárias para este tutorial.
Para receber as autorizações de que precisa para concluir este tutorial, peça ao seu administrador que lhe conceda as seguintes funções de IAM:
-
Editor de tarefas em lote (
roles/batch.jobsEditor) no projeto -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço da tarefa, que, para este tutorial, é a conta de serviço predefinida do Compute Engine -
Administrador de objetos de armazenamento (
roles/storage.objectAdmin) no projeto
-
Editor de tarefas em lote (
-
Instale o
dsube as respetivas dependências. Para mais informações, consulte adsubdocumentação de instalação.Certifique-se de que tem instaladas versões do Python e do pip que são suportadas pela versão mais recente do
dsub. Para ver as versões instaladas atualmente, execute o seguinte comando:pip --versionSe precisar de instalar ou atualizar o
pipou o Python, siga os passos para instalar o Python.Recomendado: para evitar erros de conflitos de dependências ao instalar
dsub, crie e ative um ambiente virtual do Python:python -m venv dsub_libs && source dsub_libs/bin/activateClone o repositório do
dsubGitHub através do comandogite abra-o:git clone https://github.com/databiosphere/dsub.git && cd dsubInstale o
dsube as respetivas dependências:python -m pip install .O resultado é semelhante ao seguinte:
... 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
BUCKET_NAME: um nome globalmente exclusivo para o seu contentor.PROJECT_ID: o ID do projeto do seu projeto Google Cloud .PROJECT_ID: o ID do projeto do seu projeto Google Cloud .BUCKET_NAME: o nome do contentor do Cloud Storage que criou.WORK_DIRECTORY: o nome de um novo diretório que o pipeline pode usar para armazenar registos e resultados. Por exemplo, introduzaworkDir.JOB_NAME: o nome da tarefa.USERNAME: o seu nome de utilizador Google Cloud .PROJECT_ID: o ID do projeto do seu projeto Google Cloud .BUCKET_NAME: o nome do contentor do Cloud Storage que criou.WORK_DIRECTORY: o diretório que especificou no comandodsub.PROJECT_ID: o ID do projeto do seu projeto Google Cloud .Se já não precisar do contentor que usou neste tutorial, use o comando
gcloud storage rmcom a flag--recursivepara eliminar o contentor e todo o respetivo conteúdo:gcloud storage rm gs://BUCKET_NAME \ --recursive \ --project PROJECT_IDSubstitua o seguinte:
BUCKET_NAME: o nome do contentor do Cloud Storage que criou.PROJECT_ID: o ID do projeto do seu projeto Google Cloud .
Caso contrário, se ainda precisar do contentor, use o comando
gcloud storage rmcom a flag--recursivepara eliminar apenas o diretórioWORK_DIRECTORYe todo o respetivo conteúdo:gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \ --recursive \ --project PROJECT_IDSubstitua o seguinte:
BUCKET_NAME: o nome do contentor do Cloud Storage que criou.WORK_DIRECTORY: o diretório que especificou no comandodsub.PROJECT_ID: o ID do projeto do seu projeto Google Cloud .
JOB_NAME: o nome da tarefa.PROJECT_ID: o ID do projeto do seu projeto Google Cloud .- Saiba mais acerca da
dsube dadsubpara o processamento em lote. - Saiba mais sobre a utilização de volumes de armazenamento com o Batch.
Crie um contentor do Cloud Storage
Para criar um contentor do Cloud Storage para armazenar os ficheiros de saída do pipeline de exemplo dsub com a CLI gcloud, execute o comando gcloud storage buckets create:
gcloud storage buckets create gs://BUCKET_NAME \
--project PROJECT_ID
Substitua o seguinte:
O resultado é semelhante ao seguinte:
Creating gs://BUCKET_NAME/...
Execute o pipeline dsub
O pipeline de amostra dsub indexa um ficheiro BAM do
1000 Genomes Project
e envia os resultados para um contentor do Cloud Storage.
Para executar o exemplo de pipeline dsub, execute o seguinte 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
Substitua o seguinte:
O pipeline dsub executa uma tarefa em lote que escreve o ficheiro BAI e regista-se no diretório especificado no seu contentor do Cloud Storage.
Especificamente, o repositório dsub contém uma imagem Docker pré-criada que usa o samtools para indexar o ficheiro BAM que especificou na flag --input.
O comando não termina até que o pipeline dsub termine a execução, o que pode variar consoante a data de agendamento da tarefa em lote.
Normalmente, isto demora cerca de 10 minutos: o Batch começa normalmente a executar a tarefa dentro de alguns minutos e o tempo de execução da tarefa é de cerca de 8 minutos.
Inicialmente, o comando continua a ser executado e o resultado é semelhante ao seguinte:
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.
Em seguida, após a tarefa terminar com êxito, o comando termina e o resultado é semelhante ao seguinte:
JOB_NAME: SUCCESS
JOB_NAME
Esta saída inclui os seguintes valores:
Veja os ficheiros de saída
Para ver os ficheiros de saída criados pela pipeline dsub de amostra através da CLI gcloud, execute o comando gcloud storage ls:
gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY \
--project PROJECT_ID
Substitua o seguinte:
O resultado é semelhante ao seguinte:
gs://BUCKET_NAME/WORK_DIRECTORY/HG00114.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam.bai
gs://BUCKET_NAME/WORK_DIRECTORY/logs/
Este resultado inclui o ficheiro BAI e um diretório que contém os registos da tarefa.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto atual.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimine recursos individuais
Se quiser continuar a usar o projeto atual, elimine os recursos individuais usados neste tutorial.
Elimine o contentor
Depois de a pipeline terminar a execução, cria e armazena ficheiros de saída no diretório WORK_DIRECTORY do seu contentor do Cloud Storage.
Para reduzir as cobranças do Cloud Storage na conta atual, faça uma das seguintes ações:Google Cloud
Elimine a tarefa
Para eliminar uma tarefa através da CLI gcloud, execute o comando
gcloud batch jobs delete.
gcloud batch jobs delete JOB_NAME \
--location us-central1 \
--project PROJECT_ID
Substitua o seguinte: