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

1. Visão geral

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

Conteúdo do laboratório

Você aprenderá como realizar as seguintes tarefas:

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

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

2. Introdução ao 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 os dois tipos em uma única API, junto com outros produtos novos. 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 se concentrará no Vertex AI Workbench.

A Vertex AI Workbench ajuda os usuários a criar rapidamente fluxos de trabalho completos baseados em notebooks com uma integração total com serviços de dados (como Dataproc, Dataflow, BigQuery e Dataplex) e Vertex AI. Ele permite que os cientistas de dados se conectem a serviços de dados do GCP, analisem conjuntos de dados, façam experimentos com diferentes técnicas de modelagem, implantem modelos treinados em produção e gerenciem MLOps durante o ciclo de vida dos modelos.

3. Visão geral do caso de uso

Neste laboratório, você usará o aprendizado por transferência para treinar um modelo de classificação de imagens no conjunto de dados do DeepWeeds em Conjuntos de dados do TensorFlow. Você usaráTensorFlow Hub para testar vetores de recursos extraídos de diferentes arquiteturas de modelo, comoResNet50 ,Ceptação eRede móvel , todos pré-treinados naConjunto de dados de referência do ImageNet de dados. Ao usar o executor de notebook pela IU do Workbench da Vertex AI, você iniciará jobs no treinamento da Vertex AI que usam esses modelos pré-treinados e treinará novamente a última camada para reconhecer as classes do conjunto de dados do DeepWeeds.

4. configure o ambiente

Para executar este codelab, você 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:

IU do Notebooks

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.

Após a criação da instância, selecione Abrir o JupyterLab.

open_jupyterlab.

Na primeira vez que usar uma nova instância, você receberá uma solicitação para autenticar.

autenticar

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

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

tf_kernel

5. Escrever o código de treinamento

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

Você precisa copiar os seguintes snippets de código para as 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, 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 conjuntos de dados do TensorFlow e extraia o número das classes e do 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

Definir uma função de pré-processamento para dimensionar os dados de 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 tem divisões de treinamento/validação. Ele vem apenas com um conjunto de dados de treinamento. No código abaixo, você 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á pronto para criar o modelo. O TensorFlow Hub oferece vetores de recursos, que são modelos pré-treinados sem a camada de classificação superior. Para criar um extrator de recursos, una o modelo pré-treinado com hub.KerasLayer, que envolve um SavedModel do TensorFlow como uma camada da Keras. Em seguida, você 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ê usará como base para o modelo.

feature_extractor_model = "inception_v3"

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

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

inspetor_de_propriedade

As tags são uma forma simples de adicionar metadados ao seu notebook. Digite "parâmetros" na caixa "Adicionar tag" e pressione Enter. Posteriormente, ao configurar a execução, você transmitirá os diferentes valores. Neste caso, o modelo do TensorFlow Hub que você quer testar. É necessário digitar a palavra "parâmetros" (e não nenhuma outra palavra) porque o executor de notebooks sabe quais células serão parametrizadas.

tag de adição

Para fechar o inspetor de propriedade, clique no ícone de engrenagem duplo novamente.

Crie uma nova célula e defina o tf_hub_uri. Você usará a interpolação de strings para substituir o nome do modelo pré-treinado que será usado como o modelo base para uma execução específica do 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". Veja mais 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 de modo que o treinamento modifique apenas a nova camada do classificador que será adicionada por cima.

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

Para concluir o modelo, envolva a camada do extrator de recursos em um modelo tf.keras.Sequential e adicione uma camada totalmente conectada para classificação. O número de unidades neste cabeçalho de classificação deve 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=20)

6. Executar notebook

Clique no ícone Executor na parte superior do notebook.

executor

Etapa 1: configurar o job de treinamento

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

executor_configuração

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 a execução única.

Etapa 2: configurar os 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 substituirá inception_v3, o valor padrão que você definiu para este parâmetro no notebook, com resnet_v2_50.

opções_avançadas

Você pode deixar a caixa Usar conta de serviço padrão marcada.

Em seguida, clique em ENVIAR.

Etapa 3: examinar os resultados

Na guia "Execuções" na IU do Console, é possível ver o status da execução do notebook.

IUs de execução

Ao clicar no nome da execução, você será direcionado para o job de treinamento do Vertex AI em que o notebook está em execução.

treinamento_do_vex

Quando o job for concluído, clique em Ver resultado para ver o notebook de saída.

ver_resultado

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

Células_param

Parabéns! 🎉

Você aprendeu a usar o Vertex AI Workbench para:

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

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

7. Limpeza

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

delete

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