Neste tutorial, mostramos como usar GPUs no Dataflow para processar imagens de satélite do Landsat 8 e renderizá-las como arquivos JPEG. O tutorial é baseado no exemplo Como processar imagens de satélite da Landsat com GPUs (em inglês).
Objetivos
- Criar uma imagem do Docker para o Dataflow que tenha compatibilidade do TensorFlow com GPU.
- Executar um job do Dataflow com GPUs
Custos
Neste tutorial, há componentes faturáveis do Google Cloud Platform, entre eles:
- Cloud Storage
- Dataflow
- Artifact Registry
Use a calculadora de preços para gerar uma estimativa de custos baseada na projeção de uso.
Antes de começar
- Sign in to your Google Cloud Platform 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.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, 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 Dataflow, Cloud Build, and Artifact Registry 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 dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
-
Install the Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, 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 Dataflow, Cloud Build, and Artifact Registry 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 dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
Conceda papéis à conta de serviço padrão do Compute Engine. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/dataflow.admin,roles/dataflow.worker,roles/bigquery.dataEditor,roles/pubsub.editor,roles/storage.objectAdmineroles/artifactregistry.reader.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
- Substitua
PROJECT_IDpela ID do seu projeto. - Substitua
PROJECT_NUMBERpelo número do projeto. Para encontrar o número do projeto, consulte Identificar projetos. - Substitua
SERVICE_ACCOUNT_ROLEpor cada papel individual.
- Substitua
- Para armazenar os arquivos de imagem JPEG de saída deste tutorial, crie um
bucket do Cloud Storage:
-
Create a Cloud Storage bucket and configure it as follows:
-
Set the storage class to
S(Standard). -
Defina o local de armazenamento como o seguinte:
US(Estados Unidos). -
Substitua
BUCKET_NAMEpor um nome de bucket exclusivo. Não inclua informações sensíveis no nome do bucket já que o namespace dele é global e visível para o público.
gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US
-
Set the storage class to
-
Create a Cloud Storage bucket and configure it as follows:
Prepare o ambiente de trabalho
Faça o download dos arquivos iniciais e crie o repositório do Artifact Registry.
Fazer o download dos arquivos iniciais
Faça o download dos arquivos iniciais e altere os diretórios.
Clone o repositório
python-docs-samples.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitNavegue até o diretório do código de amostra.
cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
Configurar o Artifact Registry
Crie um repositório do Artifact Registry para fazer upload de artefatos. Cada repositório pode conter artefatos para um único formato compatível.
Todo o conteúdo do repositório é criptografado usando chaves de criptografia Google-owned and Google-managed encryption keys ou gerenciadas pelo cliente. O Artifact Registry usa Google-owned and Google-managed encryption keys por padrão. Nenhuma configuração é necessária para essa opção.
É preciso ter pelo menos o acesso "Gravador do Artifact Registry" no repositório.
Execute o comando abaixo para criar um novo repositório. O comando usa a sinalização --async e retorna imediatamente, sem aguardar a conclusão da operação.
gcloud artifacts repositories create REPOSITORY \
--repository-format=docker \
--location=LOCATION \
--async
Substitua REPOSITORY por um nome para o repositório. Para cada local de repositório em um projeto, os nomes dos repositórios precisam ser exclusivos.
Antes de enviar ou extrair imagens, configure o Docker para autenticar solicitações para o Artifact Registry. Para configurar a autenticação nos repositórios do Docker, execute o seguinte comando:
gcloud auth configure-docker LOCATION-docker.pkg.dev
O comando atualiza a configuração do Docker. Agora é possível se conectar ao Artifact Registry no seu projeto Google Cloud para enviar imagens.
Compile a imagem Docker.
O Cloud Build permite criar uma imagem do Docker usando um Dockerfile e salvá-la no Artifact Registry, em que a imagem é acessível a outros produtos doGoogle Cloud .
Crie a imagem do contêiner usando o arquivo de configuração build.yaml.
gcloud builds submit --config build.yaml
Executar o job do Dataflow com GPUs
O bloco de código a seguir demonstra como iniciar esse pipeline do Dataflow com GPUs.
Executamos o pipeline do Dataflow usando o
arquivo de configuração
run.yaml.
export PROJECT=PROJECT_NAME
export BUCKET=BUCKET_NAME
export JOB_NAME="satellite-images-$(date +%Y%m%d-%H%M%S)"
export OUTPUT_PATH="gs://$BUCKET/samples/dataflow/landsat/output-images/"
export REGION="us-central1"
export GPU_TYPE="nvidia-tesla-t4"
gcloud builds submit \
--config run.yaml \
--substitutions _JOB_NAME=$JOB_NAME,_OUTPUT_PATH=$OUTPUT_PATH,_REGION=$REGION,_GPU_TYPE=$GPU_TYPE \
--no-source
Substitua:
- PROJECT_NAME: o Google Cloud nome do projeto
- BUCKET_NAME: o nome do bucket do Cloud Storage (sem o prefixo
gs://)
Depois de executar o pipeline, aguarde a conclusão do comando. Se você sair do shell, perderá as variáveis de ambiente que definiu.
Para evitar o compartilhamento da GPU entre vários processos de worker, esta amostra usa um tipo de máquina com uma vCPU. Os requisitos de memória do pipeline são tratados usando 13 GB de memória estendida. Para mais informações, leia GPUs e paralelismo de worker.
Ver os resultados
O pipeline em
tensorflow-landsat/main.py
processa imagens do satélite Landsat 8 e as
renderiza como arquivos JPEG. Siga estas etapas para ver esses arquivos.
Liste os arquivos JPEG de saída com detalhes usando a CLI do Google Cloud.
gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizesCopie os arquivos para o diretório local.
mkdir outputs gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/Abra esses arquivos de imagem com o visualizador de imagens que você preferir.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Veja um exemplo do TensorFlow com um mínimo de GPU.
- Veja um exemplo do PyTorch com um mínimo de GPU.
- Saiba mais sobre o suporte a GPUs no Dataflow.
- Vejas mais exemplos de Como usar GPUs.
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.