Fazer previsões com modelos remotos na Vertex AI

É possível registrar um endpoint da Vertex AI como um modelo remoto e chamá-lo diretamente do BigQuery com ML.PREDICT.

Isso pode ser útil quando um modelo é muito grande para ser importado para o BigQuery ou quando você quer usar um único ponto de inferência para casos de uso on-line, em lote e de microlote.

Neste tutorial, usamos um modelo personalizado de análise de sentimento ao ajustar um modelo BERT com avaliações de filmes do IMDB em texto simples. O modelo resultante usa entrada de texto (avaliações de filmes) e retorna pontuações de sentimento entre (0, 1). O modelo é registrado no Vertex AI Model Registry e disponibilizado em um endpoint da Vertex AI. A partir daí, o modelo é adicionado ao BigQuery como um modelo remoto. É possível usar o modelo remoto no BigQuery para receber previsões de sentimento de uma coluna de texto (avaliações de filmes da tabela de 100 mil linhas bigquery-public-data.imdb.reviews).

Consulte o Tutorial de modelo remoto do BQML para um tutorial do GitHub de versão do Python.

Visão geral do fluxo de trabalho

Configuração do tutorial

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud: Cloud Storage, Vertex AI e BigQuery. Ao final do tutorial, você removerá os componentes faturáveis.

  1. Clique aqui para ativar APIs para a Vertex AI, o Cloud Storage e conexões de recursos do Cloud do BigQuery.
  2. Cloud Storage: para criar um bucket na multirregião US padrão, seguindo estas instruções.

criar um modelo de ML

Crie um modelo usando o Tutorial remoto de modelo do BQML, que inclui um modelo de previsão de análise de sentimento criado pelo ajuste fino de um modelo BERT ao adicionar uma camada de classificação.

Já treinamos e fizemos upload de um modelo de amostra para gs://cloud-samples-data/bigquery/ml/remote_model_tutorial/ para você usá-lo diretamente.

Implantar modelo na Vertex AI

Siga as instruções para registrar o modelo no Vertex AI Model Registry.

Siga as instruções para implantar o modelo do Vertex AI Model Registry em um endpoint da Vertex AI.

Recomendamos definir o número máximo de nós de computação. Isso ativa o recurso de escalonamento automático no lado da Vertex AI e ajuda o endpoint a processar mais solicitações quando sua tabela de dados do BigQuery tem uma grande quantidade de linhas.

Modelo remoto do BigQuery ML

A criação de um modelo remoto do BigQuery ML tem dois componentes: uma conexão de recursos do Cloud do BigQuery e um modelo remoto do BigQuery que usa a conexão.

Criar uma conexão de recursos do Cloud do BigQuery

Você precisa ter uma conexão de recursos do Cloud para se conectar à Vertex AI.

Selecione uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. Para criar uma conexão, clique em Adicionar e em Conexões com fontes de dados externas.

  3. Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (Cloud Resource).

  4. No campo ID da conexão, insira um nome para a conexão.

  5. Clique em Criar conexão.

  6. Clique em Ir para conexão.

  7. No painel Informações da conexão, copie o ID da conta de serviço para uso em uma etapa posterior.

bq

  1. Em um ambiente de linha de comando, crie uma conexão:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    O parâmetro --project_id substitui o projeto padrão.

    Substitua:

    • REGION: sua região de conexão
    • PROJECT_ID: o ID do projeto do Google Cloud
    • CONNECTION_ID: um ID para sua conexão

    Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.

    Solução de problemas: se você receber o seguinte erro de conexão, atualize o SDK Google Cloud:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupere e copie o ID da conta de serviço para uso em uma etapa posterior:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    O resultado será assim:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Anexe a seguinte seção ao seu arquivo main.tf.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Substitua:

  • CONNECTION_ID: um ID para sua conexão
  • PROJECT_ID: o ID do projeto do Google Cloud
  • REGION: sua região de conexão

Configurar o acesso

Conceda a função do usuário da Vertex AI à conta de serviço da conexão. É preciso conceder esse papel no mesmo projeto que você planeja especificar no URL do endpoint do modelo remoto (ou no projeto modelo, se estiver usando o endpoint de versão curta) na seção Criar um modelo remoto do BigQuery ML. Conceder o papel em um projeto diferente resulta no erro bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Para conceder o papel, siga estas etapas:

  1. Acessar a página AM e administrador

    Acessar IAM e administrador

  2. Clique em Conceder acesso.

  3. No campo Novos principais, digite o ID da conta de serviço que você copiou anteriormente.

  4. No campo Selecionar um papel, escolha Vertex AI e, em seguida, selecione o papel Usuário da Vertex AI.

  5. Clique em Salvar.

Criar seu conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > Criar conjunto de dados.

    Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Para o código do conjunto de dados, insira bqml_tutorial.

    • Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).

      Os conjuntos de dados públicos são armazenados na multirregião US. Para simplificar, armazene seus conjuntos de dados no mesmo local.

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

      Página Criar conjunto de dados.

Criar um modelo remoto do BigQuery ML

Para ver o esquema de entrada e saída do modelo do TensorFlow, envie uma solicitação ao endpoint:

Exemplo de solicitação:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:predict -d "{'instances': [{ 'text': 'This is an amazing movie'}, { 'text': 'The movie was terrible'}]}"

Um exemplo de resposta:

{
  "predictions": [
    [
      [ 0.999410391 ]
    ],
    [
      [ 0.000628352049 ]
    ]
  ]
}

Ao criar um modelo remoto, os nomes e tipos de campo de entrada e saída precisam ser exatamente iguais aos de entrada e saída da Vertex AI.

Para o modelo com saída única, a Vertex AI não retornará o nome do campo. Em CREATE MODEL, é possível especificar qualquer nome de campo.

O exemplo a seguir mostra como criar um modelo remoto usando uma conexão:

CREATE OR REPLACE MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`
    INPUT (text STRING)
    OUTPUT(scores ARRAY<FLOAT64>)
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS(endpoint = 'ENDPOINT_URL')

Receber previsões com ML.PREDICT

Receba previsões do modelo remoto no BigQuery usando a função ML.PREDICT. Aqui, 10.000 registros são selecionados e enviados para previsão. O modelo remoto tem como padrão um tamanho de lote de 128 instâncias para as solicitações.

SELECT *
FROM ML.PREDICT (
    MODEL `PROJECT_ID.bqml_tutorial.bert_sentiment`,
    (
        SELECT review as text
        FROM `bigquery-public-data.imdb.reviews`
        LIMIT 10000
    )
)

Regiões aceitas

Há dois tipos de local no BigQuery:

  • Uma região é um lugar geográfico específico, como Londres.
  • Um local multirregional é uma área geográfica grande, como Estados Unidos, que contém dois ou mais lugares geográficos.

Região única

Em um conjunto de dados de região única do BigQuery, só é possível criar um modelo remoto que usa um endpoint da Vertex AI implantado na mesma região. Um modelo remoto na região única us-central1 do BigQuery só pode usar uma Vertex AI em us-central1. Portanto, para regiões únicas, os modelos remotos são aceitos apenas em regiões compatíveis com a Vertex AI e o BigQuery.

Locais multirregionais

Em um banco de dados multirregional do BigQuery (US, EU), você só pode criar um modelo remoto que usa um modelo remoto implantado em uma região na mesma área geográfica grande (US, EU). Por exemplo: um modelo remoto da multirregião US do BigQuery pode usar apenas um endpoint da Vertex AI implantado em qualquer região única da área geográfica dos Estados Unidos, como us-central1, us-east4, us-west2 etc.

Um modelo remoto da multirregião EU do BigQuery só pode usar um endpoint da Vertex AI implantado em qualquer região única nos estados membros da União Europeia, como europe-north1, europe-west3 etc.

Saiba mais sobre regiões e multirregiões do BigQuery na página Locais dos conjuntos de dados. Para mais informações sobre as regiões da Vertex AI, consulte os locais da Vertex AI.

Como usar VPC Service Controls

O VPC Service Controls é um recurso do Google Cloud em que é possível configurar um perímetro seguro para evitar a exfiltração de dados. Se quiser usar o VPC Service Controls com modelos remotos para maior segurança, siga o guia do VPC Service Controls para: criar um perímetro de serviço.

Adicione o projeto do BigQuery da consulta usando a modelo remoto no perímetro. Adicione o projeto do endpoint ao perímetro e defina a API Vertex AI nos serviços restritos com base no seu tipo de endpoint. Para mais detalhes, consulte o VPC Service Controls da Vertex AI.

Limpeza

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.