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, usamos componentes faturáveis do Google Cloud, incluindo:
- 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
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
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 -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Dataflow, Cloud Build e Artifact Registry:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Não é necessário fazer isso se você estiver usando o Cloud Shell.
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Atribua papéis à sua conta de usuário. Execute o seguinte comando uma vez para cada um dos seguintes papéis do IAM:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM concedido à sua conta de usuário.
-
Instale a CLI do Google Cloud.
-
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 -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Dataflow, Cloud Build e Artifact Registry:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Não é necessário fazer isso se você estiver usando o Cloud Shell.
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Atribua papéis à sua conta de usuário. Execute o seguinte comando uma vez para cada um dos seguintes papéis do IAM:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM concedido à sua conta de usuário.
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:
- No console do Google Cloud , acesse a página Buckets do Cloud Storage.
- Clique em Criar.
- Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima
etapa, clique em Continuar.
- Em Nomear o bucket, insira um nome exclusivo. Não inclua informações confidenciais no nome do bucket já que o namespace dele é global e visível para o público.
-
Na seção Escolha onde armazenar seus dados, faça o seguinte:
- Selecione um tipo de local.
- Escolha um local onde os dados do bucket são armazenados permanentemente no menu suspenso Tipo de local.
- Se você selecionar o tipo de local birregional, também poderá ativar a replicação turbo usando a caixa de seleção relevante.
- Para configurar a replicação entre buckets, selecione
Adicionar replicação entre buckets usando o Serviço de transferência do Cloud Storage e
siga estas etapas:
Configurar a replicação entre buckets
- No menu Bucket, selecione um bucket.
Na seção Configurações de replicação, clique em Configurar para definir as configurações do job de replicação.
O painel Configurar a replicação entre buckets aparece.
- Para filtrar objetos a serem replicados por prefixo de nome de objeto, insira um prefixo com que você quer incluir ou excluir objetos e clique em Adicionar um prefixo.
- Para definir uma classe de armazenamento para os objetos replicados, selecione uma classe de armazenamento no menu Classe de armazenamento. Se você pular esta etapa, os objetos replicados vão usar a classe de armazenamento do bucket de destino por padrão.
- Clique em Concluído.
-
Na seção Escolha como armazenar seus dados, faça o seguinte:
- Na seção Definir uma classe padrão, selecione o seguinte: Padrão.
- Para ativar o namespace hierárquico, na seção Otimizar o armazenamento para cargas de trabalho com uso intensivo de dados, selecione Ativar namespace hierárquico neste bucket.
- Na seção Escolha como controlar o acesso a objetos, selecione se o bucket aplica ou não a prevenção de acesso público e selecione um método de controle de acesso para os objetos do bucket.
-
Na seção Escolha como proteger os dados do objeto, faça o
seguinte:
- Selecione qualquer uma das opções em Proteção de dados que
você quer definir para o bucket.
- Para ativar a exclusão reversível, clique na caixa de seleção Política de exclusão reversível (para recuperação de dados) e especifique o número de dias que você quer reter os objetos após a exclusão.
- Para definir o controle de versões de objetos, clique na caixa de seleção Controle de versões de objetos (para controle de versões) e especifique o número máximo de versões por objeto e o número de dias após os quais as versões não atuais expiram.
- Para ativar a política de retenção em objetos e buckets, clique na caixa de seleção Retenção (para compliance) e faça o seguinte:
- Para ativar o bloqueio de retenção de objetos, clique na caixa de seleção Ativar retenção de objetos.
- Para ativar o Bloqueio de buckets, clique na caixa de seleção Definir política de retenção de buckets e escolha uma unidade e um período de armazenamento para a retenção.
- Para escolher como os dados do objeto serão criptografados, expanda a seção Criptografia de dados () e selecione um método de Criptografia de dados.
- Selecione qualquer uma das opções em Proteção de dados que
você quer definir para o bucket.
- Clique em Criar.
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 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:
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
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.