Vertex AI: exportar e implantar um modelo de machine learning do BigQuery para previsão

1. Visão geral

Neste laboratório, você vai treinar um modelo com o BigQuery Machine Learning e depois exportar e implantar esse modelo na Vertex AI. Essa é a mais nova oferta de produtos de IA no Google Cloud.

Conteúdo do laboratório

Você vai aprender a:

  • Treinar um modelo com o BigQuery Machine Learning (BQML)
  • Exportar o modelo da BQML para o Cloud Storage
  • Implantar o BQML treinado na Vertex AI
  • receba previsões em seu modelo implantado

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 se concentra nestes produtos em destaque: Vertex Prediction e Notebooks.

Visão geral do produto Vertex

3. 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. Você vai precisar disso para criar sua instância de notebook.

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 de Notebooks

Vamos usar os Notebooks para receber previsões depois de implantar o modelo. Na seção Vertex AI do console do Cloud, clique em "Notebooks":

Menu da Vertex AI

Em seguida, selecione Nova instância. Em seguida, selecione o tipo de instância TensorFlow Enterprise 2.3 sem GPUs:

Instância do TFE

Use as opções padrão e clique em Criar. Quando a instância tiver sido criada, selecione Abrir o JupyterLab:

Abrir notebook do CAIP

4. Treinar um modelo do BigQuery ML

Com o BigQuery ML, é possível treinar modelos personalizados de machine learning usando dados armazenados no BigQuery. É possível treinar e receber previsões de modelos em SQL. Neste laboratório, vamos usar um conjunto de dados disponível publicamente no BigQuery para prever a probabilidade de inadimplência no pagamento de um cartão de crédito.

Etapa 1: crie um conjunto de dados do BigQuery no projeto

Para treinar um modelo no BigQuery ML, você precisa criar um conjunto de dados no projeto para armazenar esse modelo. Clique no projeto na barra de menu à esquerda e selecione Criar conjunto de dados:

Criar conjunto de dados do BigQuery

No campo ID do conjunto de dados, digite cc_default. Deixe os demais campos como estão e clique em Criar conjunto de dados.

Etapa 2: executar uma consulta CREATE MODEL

No Editor de consultas do BigQuery, execute a seguinte consulta CREATE MODEL para criar e treinar um modelo do BigQuery ML no conjunto de dados público que vamos usar. Substitua your-project pelo nome do seu projeto na nuvem:

CREATE OR REPLACE MODEL
  `your-project.cc_default.logistic_model` OPTIONS(model_type='LOGISTIC_REG',
    input_label_cols=['default_payment_next_month']) AS
SELECT
  limit_balance,
  sex,
  education_level,
  marital_status,
  age,
  pay_0,
  pay_2,
  pay_3,
  pay_4,
  pay_5,
  pay_6,
  bill_amt_1,
  bill_amt_2,
  bill_amt_3,
  bill_amt_4,
  bill_amt_5,
  bill_amt_6,
  pay_amt_1,
  pay_amt_2,
  pay_amt_3,
  pay_amt_4,
  pay_amt_5,
  pay_amt_6,
  default_payment_next_month
FROM
  `bigquery-public-data.ml_datasets.credit_card_default`

Isso vai criar um modelo de regressão logística que gera um valor numérico entre 0 e 1, indicando que leva cerca de um minuto para ser executado. Quando a operação for concluída, o modelo vai aparecer no conjunto de dados:

Detalhes do modelo do BQML

Clique no modelo para conferir as métricas de treinamento e avaliação.

5. Exportar o modelo do BigQuery ML

Com um modelo treinado do BQML, podemos usar a sintaxe SQL do BQML para receber previsões ou exportar o modelo para implantá-lo em outro lugar. Aqui, vamos exportar nosso modelo para que possamos implantá-lo na Vertex AI e disponibilizá-lo em grande escala para receber previsões.

Etapa 1: criar um bucket do Cloud Storage para o modelo

Nos detalhes do modelo, clique em Exportar modelo:

Exportar modelo do BQML

Isso vai pedir que você insira o local do Google Cloud Storage (GCS) em que quer exportar os recursos do modelo. Se você ainda não tiver um bucket do GCS, não se preocupe. Vamos criar um. Primeiro, clique em Procurar:

Procurar buckets do GCS

Em seguida, clique no ícone + para criar um bucket:

Novo bucket do GCS

Dê um nome exclusivo a ele. Os nomes de buckets do Storage precisam ser exclusivos globalmente. Clique em Continuar. Na próxima etapa, em Tipo de local, selecione Região e escolha uma das regiões no menu suspenso:

Local do bucket

Use a classe de armazenamento padrão e, em controle de acesso, verifique se a opção Uniforme está selecionada:

Controle de acesso uniforme

Clique em "Continuar" e use os valores padrão para as outras opções. Em seguida, clique em Criar.

Etapa 2: exportar o modelo do BQML

Com o novo bucket criado, insira model-assets (ou qualquer coisa que você queira) no campo Nome e clique em Selecionar:

Caminho de exportação do modelo

Em seguida, clique em Exportar. Isso vai criar um job no BigQuery para exportar seu modelo no formato SavedModel do TensorFlow para o bucket do GCS recém-criado que você especificou. Isso vai levar cerca de um minuto.

Enquanto o modelo é exportado, acesse a seção "Storage" do console do Cloud. Quando o job for concluído, os ativos do modelo serão exportados para o bucket que você acabou de criar em um subdiretório model-assets:

Recursos de modelo exportados

6. Importar o modelo para a Vertex AI

Nesta etapa, vamos referenciar o local de armazenamento do GCS em que acabamos de exportar os recursos do modelo para criar e importar o modelo para a Vertex AI.

Etapa 1: importar o modelo

No console do Cloud, navegue até a seção Modelos da Vertex AI. Em seguida, selecione Importar:

Importação do modelo

Na primeira etapa, dê ao modelo o nome predict_default. Selecione a mesma região em que você criou o bucket (us-central1, europe-west4 ou asia-east1). Depois clique em Continuar. Em Configurações do modelo, mantenha a opção "Importar artefatos de modelo em um novo contêiner predefinido" selecionada.

No menu suspenso Framework do modelo, selecione TensorFlow. Em seguida, selecione 2.3 como a versão do framework.

No campo "Local do artefato do modelo", clique em Procurar, clique no bucket do GCS que você acabou de criar e clique no diretório model-assets:

Caminho dos recursos do modelo

Em seguida, clique em Importar. A importação do modelo leva alguns minutos. Depois de criado, ele vai aparecer na seção de modelos do console do Cloud:

Seção "Modelos"

7. implante o modelo em um endpoint

Agora que fizemos upload do modelo, a próxima etapa é criar um endpoint na Vertex. Um recurso de modelo na Vertex pode ter vários endpoints associados a ele, e você pode dividir o tráfego entre os endpoints.

Etapa 1: criar um endpoint

Na página do modelo, navegue até a guia Implantar e testar e clique em Implantar no endpoint:

Implantar e testar

Dê um nome ao endpoint, como default_pred_v1, deixe as configurações de divisão de tráfego como estão e selecione um tipo de máquina para a implantação do modelo. Usamos um n1-highcpu-2 aqui, mas você pode escolher o tipo de máquina que quiser.

Em seguida, selecione "Concluído" e clique em Continuar. Deixe as configurações de localização selecionadas como estão e clique em Implantar. Seu endpoint vai levar alguns minutos para ser implantado. Quando estiver concluído, uma marca de seleção verde vai aparecer ao lado dele:

Endpoint implantado

Você está chegando perto! Agora você está pronto para receber previsões em seu modelo implantado.

8. Receba previsões no modelo implantado

Há algumas opções para coletar previsões de modelo:

  • IU da Vertex AI
  • API Vertex AI

Aqui, vamos mostrar como receber previsões pela API.

Etapa 1: receber previsões de modelo com a API Vertex AI

Para mostrar como receber previsões de modelo, vamos usar a instância de Notebook do Vertex que você criou no início deste laboratório.

Em seguida, abra a instância de notebook que você criou e abra um notebook Python 3 no Menu inicial:

Abrir notebook

No notebook, execute o seguinte em uma célula para gravar um exemplo de teste em um arquivo JSON chamado default-pred.json. Vamos enviar este exemplo ao nosso modelo para uma previsão:

%%writefile default-pred.json
{
  "instances": [
    {"age": 39,
    "bill_amt_1": 47174,
    "bill_amt_2": 47974,
    "bill_amt_3": 48630,
    "bill_amt_4": 50803,
    "bill_amt_5": 30789,
    "bill_amt_6": 15874,
    "education_level": "1",
    "limit_balance": 50000,
    "marital_status": "2",
    "pay_0": 0,
    "pay_2":0,
    "pay_3": 0,
    "pay_4": 0,
    "pay_5": "0",
    "pay_6": "0",
    "pay_amt_1": 1800,
    "pay_amt_2": 2000,
    "pay_amt_3": 3000,
    "pay_amt_4": 2000,
    "pay_amt_5": 2000,
    "pay_amt_6": 2000,
    "sex": "1"}
  ]
}

Em seguida, na interface da Vertex, clique em Exemplo de solicitação para o endpoint que você acabou de implantar:

Exemplo de solicitação

Copie o código da Etapa 4 na guia REST para o notebook e execute a célula:

Variáveis de solicitação

Em seguida, adicione uma variável para a região em que você criou o bucket e o modelo. Substitua your-region na string abaixo:

REGION="your-region" # either us-central1, europe-west4, or asia-east1

Por fim, faça uma solicitação de previsão para seu endpoint com curl copiando o seguinte código no notebook:

!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-prediction-aiplatform.googleapis.com/v1alpha1/projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID:predict \
-d "@default-pred.json"

Você vai ver algo parecido com isto (os valores exatos de previsão vão variar um pouco):

{
  "predictions": [
    {
      "default_payment_next_month_values": [
        "1",
        "0"
      ],
      "default_payment_next_month_probs": [
        0.180815295299778,
        0.819184704700222
      ],
      "predicted_default_payment_next_month": [
        "0"
      ]
    }
  ],
  "deployedModelId": "your-model-id"
}

Os valores em default_payment_next_month_probs mostram a probabilidade de cada classe. Para este exemplo, nosso modelo prevê que há uma chance de 81% de que essa pessoa não deixe de pagar a próxima parcela. O valor .819 corresponde à classe 0 (não padrão).

Parabéns! 🎉

Você aprendeu a:

  • Treinar um modelo no BQML
  • Exportar o modelo da BQML para o Cloud Storage
  • Importar o modelo do BQML para a Vertex AI para previsão
  • Criar um modelo da Vertex AI e implantar em um endpoint
  • Receber previsões no endpoint implantado usando notebooks da Vertex e curl

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

9. Limpeza

Se você quiser continuar usando o notebook que criou neste laboratório, é recomendado que você o desligue quando não estiver usando. Na interface de Notebooks no console do Cloud, selecione o notebook e clique em Parar:

Interromper instância

Se quiser excluir um notebook totalmente, clique no botão "Excluir" no canto superior direito.

Para excluir o endpoint implantado, acesse a seção Endpoints do console da Vertex AI e clique no ícone de exclusão:

Excluir endpoint

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