Vertex AI Workbench: crie um modelo de classificação de imagens com o aprendizado por transferência e o executor do notebook

1. Visão geral

Neste laboratório, você vai aprender a configurar e iniciar execuções de notebooks com o Vertex AI Workbench.

Conteúdo do laboratório

Você vai aprender a:

  • Usar parâmetros em um notebook
  • Configurar e iniciar execuções de notebook na interface do Vertex AI Workbench

O custo total da execução deste laboratório no Google Cloud é de aproximadamente US$ 2.

2. Introdução à Vertex AI

Este laboratório usa a mais nova oferta de produtos de IA disponível no Google Cloud. A Vertex AI integra as ofertas de ML do Google Cloud em uma experiência de desenvolvimento intuitiva. Anteriormente, modelos treinados com o AutoML e modelos personalizados eram acessíveis por serviços separados. A nova oferta combina ambos em uma única API, com outros novos produtos. Você também pode migrar projetos existentes para a Vertex AI. Se você tiver algum feedback, consulte a página de suporte.

A Vertex AI inclui vários produtos diferentes para dar suporte a fluxos de trabalho integrais de ML. Este laboratório vai se concentrar no Vertex AI Workbench.

Com o Vertex AI Workbench, os usuários criam de modo rápido fluxos de trabalho completos com notebooks, por meio da integração entre serviços de dados (como Dataproc, Dataflow, BigQuery e Dataplex) e a Vertex AI. Com ele, cientistas de dados podem se conectar a serviços de dados do GCP, analisar conjuntos de dados, testar diferentes técnicas de modelagem, implantar modelos treinados na produção e gerenciar MLOps durante o ciclo de vida do modelo.

3. Visão geral do caso de uso

Neste laboratório, você vai usar o aprendizado por transferência para treinar um modelo de classificação de imagens no conjunto de dados do DeepWeeds, disponível nos conjuntos de dados do TensorFlow. Você vai usar o TensorFlow Hub para testar vetores de recursos extraídos de diferentes arquiteturas de modelo, como ResNet50, Inception e MobileNet, todos pré-treinados no conjunto de dados de comparação do ImageNet. Ao usar o executor de notebooks pela interface do Vertex AI Workbench, você vai iniciar jobs no Vertex AI Training que usam esses modelos pré-treinados e treinar novamente a última camada para reconhecer as classes do conjunto de dados DeepWeeds.

4. Configurar o ambiente

Para executar este codelab, você vai precisar de um projeto do Google Cloud Platform com o faturamento ativado. Para criar um projeto, siga estas instruções.

Etapa 1: ativar a API Compute Engine

Acesse o Compute Engine e selecione Ativar, caso essa opção ainda não esteja ativada.

Etapa 2: ativar a API Vertex AI

Navegue até a seção "Vertex AI" do Console do Cloud e clique em Ativar API Vertex AI.

Painel da Vertex AI

Etapa 3: criar uma instância do Vertex AI Workbench

Na seção Vertex AI do Console do Cloud, clique em "Workbench":

Menu da Vertex AI

Ative a API Notebooks, se ela ainda não tiver sido ativada.

Notebook_api

Após a ativação, clique em NOTEBOOK GERENCIADO:

Notebooks_UI

Em seguida, selecione NOVO NOTEBOOK.

new_notebook

Dê um nome ao notebook e clique em Configurações avançadas.

create_notebook

Em "Configurações avançadas", ative o encerramento inativo e defina o número de minutos como 60. Isso significa que o notebook será desligado automaticamente quando não estiver sendo usado.

idle_timeout

Você pode manter as outras configurações avançadas como estão.

Em seguida, clique em Criar.

Quando a instância tiver sido criada, selecione Abrir o JupyterLab.

open_jupyterlab

Na primeira vez que usar uma nova instância, você vai receber uma solicitação de autenticação.

autenticar

O Vertex AI Workbench tem uma camada de compatibilidade de computação que permite iniciar kernels para TensorFlow, PySpark, R etc., tudo em uma única instância de notebook. Após a autenticação, você poderá selecionar na tela de início o tipo de notebook que quer usar.

Para este laboratório, selecione o kernel do TensorFlow 2.

tf_kernel

5. Escrever o código de treinamento

O conjunto de dados DeepWeeds consiste em 17.509 imagens que capturam oito espécies diferentes de ervas daninhas nativas da Austrália. Nesta seção, você vai escrever o código para pré-processar o conjunto de dados DeepWeeds e criar e treinar um modelo de classificação de imagens usando vetores de recursos transferidos do TensorFlow Hub.

Você vai precisar copiar os snippets de código abaixo nas células do seu notebook. A execução das células é opcional.

Etapa 1: fazer o download e o pré-processamento do conjunto de dados

Primeiro instale a versão noturna dos conjuntos de dados do TensorFlow para garantir que estamos capturando a versão mais recente do conjunto de dados do DeepWeeds.

!pip install tfds-nightly

Em seguida, importe as bibliotecas necessárias:

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub

Faça o download dos dados dos Datasets do TensorFlow e extraia o número de classes e o tamanho do conjunto de dados.

data, info = tfds.load(name='deep_weeds', as_supervised=True, with_info=True)
NUM_CLASSES = info.features['label'].num_classes
DATASET_SIZE = info.splits['train'].num_examples

Defina uma função de pré-processamento para dimensionar os dados da imagem em 255.

def preprocess_data(image, label):
  image = tf.image.resize(image, (300,300))
  return tf.cast(image, tf.float32) / 255., label

O conjunto de dados do DeepWeeds não vem com divisões de treinamento/validação. Ele vem apenas com um conjunto de dados de treinamento. No código abaixo, você vai usar 80% desses dados para treinamento e os 20% restantes para validação.

# Create train/validation splits

# Shuffle dataset
dataset = data['train'].shuffle(1000)

train_split = 0.8
val_split = 0.2
train_size = int(train_split * DATASET_SIZE)
val_size = int(val_split * DATASET_SIZE)

train_data = dataset.take(train_size)
train_data  = train_data.map(preprocess_data)
train_data  = train_data.batch(64)

validation_data = dataset.skip(train_size)
validation_data  = validation_data.map(preprocess_data)
validation_data  = validation_data.batch(64)

Etapa 2: criar modelo

Agora que você criou conjuntos de dados de treinamento e validação, está tudo pronto para criar o modelo. O TensorFlow Hub fornece vetores de recursos, que são modelos pré-treinados sem a camada de classificação superior. Você vai criar um extrator de recursos envolvendo o modelo pré-treinado com hub.KerasLayer, que envolve um TensorFlow SavedModel como uma camada Keras. Depois você vai adicionar uma camada de classificação e criar um modelo com a API Keras Sequential.

Primeiro, defina o parâmetro feature_extractor_model, que é o nome do vetor de recurso do TensorFlow Hub que você vai usar como base para o modelo.

feature_extractor_model = "inception_v3"

Em seguida, você vai transformar essa célula em uma célula de parâmetro, o que vai permitir transmitir um valor para feature_extractor_model no momento da execução.

Primeiro, selecione a célula e clique no inspetor de propriedades no painel à direita.

property_inspector

As tags são uma forma simples de adicionar metadados ao seu notebook. Digite "parâmetros" na caixa "Adicionar tag" e pressione Enter. Mais tarde, ao configurar a execução, você vai transmitir os diferentes valores, neste caso o modelo do TensorFlow Hub, que você quer testar. Você deve digitar a palavra "parâmetros" (e nenhuma outra palavra), porque é assim que o executor do notebook sabe quais células parametrizar.

add_tag

Para fechar o Inspetor de propriedades, clique novamente no ícone de engrenagem dupla.

Crie uma célula nova e defina tf_hub_uri, em que você vai usar a interpolação de strings para substituir o nome do modelo pré-treinado que você quer usar como o modelo base para uma execução específica do seu notebook. Por padrão, você definiu feature_extractor_model como "inception_v3", mas outros valores válidos são "resnet_v2_50" ou "mobilenet_v1_100_224". Confira outras opções no catálogo do TensorFlow Hub.

tf_hub_uri = f"https://tfhub.dev/google/imagenet/{feature_extractor_model}/feature_vector/5"

Em seguida, crie o extrator de recursos usando hub.KerasLayer e transmitindo o tf_hub_uri definido acima. Defina o argumento trainable=False para congelar as variáveis para que o treinamento modifique apenas a nova camada do classificador que você vai adicionar.

feature_extractor_layer = hub.KerasLayer(
    tf_hub_uri,
    trainable=False)

Para concluir o modelo, envolva a camada de extrator de recursos em um modelo tf.keras.Sequential e adicione uma camada totalmente conectada para classificação. O número de unidades nessa cabeçalho de classificação precisa ser igual ao número de classes no conjunto de dados:

model = tf.keras.Sequential([
  feature_extractor_layer,
  tf.keras.layers.Dense(units=NUM_CLASSES)
])

Por fim, compile e ajuste o modelo.

model.compile(
  optimizer=tf.keras.optimizers.Adam(),
  loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  metrics=['acc'])

model.fit(train_data, validation_data=validation_data, epochs=3)

6. Executar notebook

Clique no ícone Executor na parte de cima do notebook.

executor

Etapa 1: configurar job de treinamento

Dê um nome à execução e forneça um bucket de armazenamento no projeto.

executor_config

Defina o tipo de máquina como 4 CPUs, 15 GB de RAM.

E adicione 1 GPU NVIDIA.

Defina o ambiente como TensorFlow Enterprise 2.6 (GPU).

Escolha "Execução única".

Etapa 2: configurar parâmetros

Clique no menu suspenso OPÇÕES AVANÇADAS para definir o parâmetro. Na caixa, digite feature_extractor_model=resnet_v2_50. Isso vai substituir inception_v3, o valor padrão definido para esse parâmetro no notebook, por resnet_v2_50.

advanced_options

Deixe a caixa Usar conta de serviço padrão marcada.

Em seguida, clique em ENVIAR.

Etapa 3: analisar os resultados

Na guia "Executions" na interface do console, você vai poder conferir o status da execução do notebook.

executions_UI

Se você clicar no nome da execução, vai acessar o job do Vertex AI Training em que seu notebook está em execução.

vertex_training

Quando o job for concluído, você poderá acessar o notebook de saída clicando em VIEW RESULT.

view_result

No notebook de saída, você vai ver que o valor de feature_extractor_model foi substituído pelo valor transmitido no momento da execução.

param_cells

Parabéns! 🎉

Você aprendeu a usar o Vertex AI Workbench para:

  • Usar parâmetros em um notebook
  • Configurar e iniciar execuções de notebooks na interface do Vertex AI Workbench

Para saber mais sobre partes diferentes da Vertex AI, acesse a documentação.

7. Limpeza

Por padrão, os notebooks gerenciados são encerrados automaticamente após 180 minutos de inatividade. Para encerrar a instância manualmente, clique no botão "Parar" na seção "Vertex AI Workbench" do console. Se quiser excluir o notebook completamente, clique no botão "Excluir".

excluir

Para excluir o bucket do Storage, use o menu de navegação do console do Cloud, acesse o Storage, selecione o bucket e clique em "Excluir":

Excluir armazenamento