Configurar a Pesquisa vetorial com o Private Service Connect

O Private Service Connect permite o consumo particular de serviços em redes VPC que pertencem a diferentes grupos, equipes, projetos e organizações. É possível publicar e consumir serviços usando endereços IP definidos por você e internos à sua rede VPC para que os endpoints da Pesquisa de vetor realizem pesquisas de semelhança vetorial.

A ativação do Private Service Connect em um endpoint do Vector Search é adequada para casos de uso que:

  1. Exigem baixa latência e uma conexão segura com os back-ends de exibição do Vector Search.
  2. Têm espaço IP limitado para reservas exclusivas de peering de VPC.
  3. É preciso acessar os back-ends de exibição em redes VPC de vários usuários.

Para saber mais sobre como configurar o Private Service Connect, acesse a Visão geral do Private Service Connect na documentação da nuvem privada virtual (VPC).

Criar o endpoint do índice

É necessário ativar o Private Service Connect ao criar o endpoint. Esse procedimento é semelhante à criação de outros endpoints na Vertex AI.

REST

  • PROJECT: o ID do projeto de serviço em que você está criando recursos da Vertex AI.

  • REGION: a região da rede.

  • DISPLAY_NAME: um nome de exibição para o endpoint. Esse nome é usado para criar um ID para o endpoint e não pode ser atualizado mais tarde.

  • VPC_PROJECTS: para a configuração da VPC compartilhada, é uma lista separada por vírgulas de projetos host da VPC. Para a configuração da VPC independente, é igual a PROJECT.

PROJECT=PROJECT_ID
VPC_PROJECT=VPC_PROJECT_ID
REGION=us-central1
VERTEX_ENDPOINT=REGION-aiplatform.googleapis.com
curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer `gcloud auth print-access-token`" \
  https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/REGION/indexEndpoints \
  -d '{
     "displayName": "DISPLAY_NAME",
     "privateServiceConnectConfig": {
       "enablePrivateServiceConnect": true,
       "projectAllowlist": [ "VPC_PROJECT_1", "VPC_PROJECT_2", "VPC_PROJECT_N"]
     }
   }

Console

Para criar o endpoint:

  1. Clique no botão a seguir para acessar a Pesquisa de vetor no console do Google Cloud. Uma lista dos índices ativos vai aparecer.

    Acessar a Pesquisa vetorial

  2. Selecione a guia Endpoints de índice. Os endpoints do índice aparecem.

  3. Clique em Criar novo endpoint. O painel Criar um endpoint de índice é aberto.

  4. Em Nome de exibição, insira um nome de exibição para o endpoint do índice. Esse nome é usado para criar um ID para o endpoint e não pode ser atualizado mais tarde.

  5. Selecione uma região no menu suspenso Região.

  6. Em Acesso, clique em Private Service Connect (pré-lançamento).

  7. Um campo de texto aparece para especificar quais projetos de VPC usar. Adicione os IDs ou números dos projetos de VPC que você quer usar.

  8. Clique em Criar.

Sobre as opções de implantação de índice

É possível implantar o índice com conectividade de serviço automática ou manual.

  • Implantar com a automação do Private Service Connect: configure uma política de conexão de serviço e implante seus índices. A configuração de uma política de conexão de serviço permite implantar em uma rede específica sem criar um endereço de computação e uma regra de encaminhamento a cada vez.
  • Implantar com conexão manual: implante seu índice e crie manualmente um endereço de computação e uma regra de encaminhamento. Escolha essa opção se precisar usar vários endereços IP para o mesmo URI de anexo de serviço, embora esse não seja um caso de uso comum.

Implantar com a automação do Private Service Connect

É possível configurar uma política de conexão de serviço para que você não precise criar manualmente um endereço de computação e uma regra de encaminhamento após cada implantação de índice.

  1. Primeiro, crie uma política de conexão de serviço que especifique a rede, a classe de serviço e a região para implantar índices. Esta é uma configuração de uma só vez. Se você já fez isso, pule para o próximo procedimento.
  2. Implantar o índice.

Limitações

A automação permite apenas um endereço IP por projeto e por rede. Se você precisar usar vários endereços IP, consulte Implantar o índice manualmente.

Criar uma política de conexão de serviço

Você precisa ser um administrador de rede para criar uma política de conexão de serviço para automatizar a implantação do índice.

Para automatizar a implantação de índices, siga estas etapas:

  1. Crie sua política de conexão de serviço.

    • PROJECT: o projeto de serviço em que você está criando recursos da Vertex AI.

    • VPC_PROJECT: o projeto em que a VPC do cliente está. Para a configuração de VPC única, é o mesmo que $PROJECT. Para a configuração da VPC compartilhada, esse é o projeto host da VPC.

    • NETWORK_NAME: o nome da rede a ser implantada, no formato projects//global/networks/.

    • REGION: a região da rede.

    • PSC_SUBNETS: as sub-redes do Private Service Connect a serem usadas.

    gcloud network-connectivity service-connection-policies create <policy_name> \
    --project=<vpc_project> --network=<network_name> # in the format projects/<project_id>/global/networks/<network_name> \
    --service-class=gcp-vertexai --region=<region> --subnets=<psc subnets>
    
  2. Acesse a política de conexão de serviço.

    gcloud network-connectivity service-connection-policies list --project=<vpc_project> -–region=<region>
    

Para mais informações sobre as políticas de conexão de serviço, acesse Configurar políticas de conexão de serviço.

Implantar o índice

REST

  • PROJECT: o projeto de serviço em que você está criando recursos da Vertex AI.

  • VPC_PROJECT: o projeto em que a VPC do cliente está. Para a configuração da VPC compartilhada, esse é o projeto host da VPC.

  • DISPLAY_NAME: um nome de exibição para o endpoint. Esse nome é usado para criar um ID para o endpoint e não pode ser atualizado mais tarde.

  • NETWORK_NAME: o nome da rede a ser implantada, no formato projects//global/networks/.

  • REGION: a região da rede.

  • PSC_SUBNETS: a sub-rede do Private Service Connect a ser usada.

PROJECT=PROJECT
VPC_PROJECTS=VPC_PROJECTS
REGION=REGION
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
-H "Content-Type: application/json; charset=utf-8" "https://REGIONAL_ENDPOINT.googleapis.com/v1/projects/PROJECT_NUMBER/locations/REGION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex"
-d '{
  "deployedIndex": {
    "id": "DEPLOYED_INDEX_ID",
    "index": "projects/PROJECT/locations/us-central1/indexes/INDEX_ID ",
    "displayName": "DISPLAY_NAME",
    "psc_automation_configs": [
      { "project_id": "PROJECT_1", "network": "NETWORK_NAME_1" },
      { "project_id": "PROJECT_2", "network": "NETWORK_NAME_2" },
      { "project_id": "PROJECT_N", "network": "NETWORK_NAME_N" }]
    }
}'

Console

Para implantar o endpoint:

  1. Clique no botão a seguir para acessar a Pesquisa de vetor no console do Google Cloud. Uma lista dos índices ativos vai aparecer.

    Acessar a Pesquisa vetorial

  2. Clique no botão Deploy do endpoint da Pesquisa de vetor ativado pelo Private Service Connect que você quer implantar. O painel deslizante Deploy index aparece.

  3. Em Nome de exibição, insira um nome de exibição para o índice implantado. Esse nome é usado para criar o ID e não pode ser atualizado mais tarde.

  4. Clique em Endpoint e escolha o endpoint do índice em que você quer implantar.

  5. Se quiser, clique em Tipo de máquina para escolher manualmente o tipo de máquina em que o índice será implantado. Por padrão, o tipo de máquina é selecionado automaticamente com base no tamanho do fragmento do índice.

Agora, você precisa adicionar configurações de automação do Private Service Connect. Para fazer isso, siga estas etapas:

  1. Na seção Configurações de automação do PSC, clique em Adicionar nova configuração.

  2. Insira o nome do projeto da VPC com que você quer se conectar.

  3. Insira o nome da rede do projeto da VPC a ser conectado. Ele precisa estar no formato projects/<project_number>/global/networks/<network_name>.

  4. Também é possível clicar em Adicionar nova configuração e continuar adicionando configurações de automação do Private Service Connect.

  5. Clique em Implantar para concluir.

Excluir política de conexão de serviço

Se você precisar excluir a política de conexão de serviço, execute o seguinte comando:

gcloud network-connectivity service-connection-policies delete --project=<vpc_project> –-region=<region> <policy_name>

Para mais informações sobre as políticas de conexão de serviço, acesse Configurar políticas de conexão de serviço.

Implantar com conexão manual

Implante o índice e crie uma regra de encaminhamento no projeto VPC.

Implantar o índice

Agora que o índice está pronto, nesta etapa, implante o índice no endpoint criado com o Private Service Connect ativado.

gcloud

O exemplo a seguir usa o comando gcloud ai index-endpoints deploy-index.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • INDEX_ENDPOINT_ID: o ID do endpoint do índice.
  • DEPLOYED_INDEX_ID: uma string especificada pelo usuário para identificar de maneira exclusiva o índice implantado. Ela precisa começar com uma letra e conter apenas letras, números ou sublinhados. Consulte DeployedIndex.id para ver as diretrizes de formato.
  • DEPLOYED_INDEX_ENDPOINT_NAME: nome de exibição do endpoint do índice implantado.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o Google Cloud ID do projeto.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --display-name=DEPLOYED_INDEX_ENDPOINT_NAME \
    --index=INDEX_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --display-name=DEPLOYED_INDEX_ENDPOINT_NAME `
    --index=INDEX_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --display-name=DEPLOYED_INDEX_ENDPOINT_NAME ^
    --index=INDEX_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • INDEX_ENDPOINT_ID: o ID do endpoint do índice.
  • DEPLOYED_INDEX_ID: uma string especificada pelo usuário para identificar de maneira exclusiva o índice implantado. Ela precisa começar com uma letra e conter apenas letras, números ou sublinhados. Consulte DeployedIndex.id para ver as diretrizes de formato.
  • DEPLOYED_INDEX_ENDPOINT_NAME: nome de exibição do endpoint do índice implantado.
  • INDEX_ID: o ID do índice.
  • LOCATION: a região em que você está usando a Vertex AI.
  • PROJECT_ID: o Google Cloud ID do projeto.
  • PROJECT_NUMBER: o número do projeto gerado automaticamente.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex

Corpo JSON da solicitação:

{
 "deployedIndex": {
   "id": "DEPLOYED_INDEX_ID",
   "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
   "displayName": "DEPLOYED_INDEX_ENDPOINT_NAME"
 }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-10-19T17:53:16.502088Z",
     "updateTime": "2022-10-19T17:53:16.502088Z"
   },
   "deployedIndexId": "DEPLOYED_INDEX_ID"
 }
}

Terraform

O exemplo a seguir usa o recurso vertex_ai_index_endpoint_deployed_index do Terraform para criar um endpoint de índice implantado.

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

provider "google" {
  region = "us-central1"
}

resource "google_vertex_ai_index_endpoint_deployed_index" "default" {
  depends_on        = [google_vertex_ai_index_endpoint.default]
  index_endpoint    = google_vertex_ai_index_endpoint.default.id
  index             = google_vertex_ai_index.default.id
  deployed_index_id = "deployed_index_for_psc"
}

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint with Private Service Connect enabled"
  region       = "us-central1"
  private_service_connect_config {
    enable_private_service_connect = true
    project_allowlist = [
      data.google_project.project.project_id,
    ]
  }
}

data "google_project" "project" {}

# Cloud Storage bucket name must be unique
resource "random_id" "default" {
  byte_length = 8
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "bucket" {
  name                        = "vertex-ai-index-bucket-${random_id.default.hex}"
  location                    = "us-central1"
  uniform_bucket_level_access = true
}

# Create index content
resource "google_storage_bucket_object" "data" {
  name    = "contents/data.json"
  bucket  = google_storage_bucket.bucket.name
  content = <<EOF
{"id": "42", "embedding": [0.5, 1.0], "restricts": [{"namespace": "class", "allow": ["cat", "pet"]},{"namespace": "category", "allow": ["feline"]}]}
{"id": "43", "embedding": [0.6, 1.0], "restricts": [{"namespace": "class", "allow": ["dog", "pet"]},{"namespace": "category", "allow": ["canine"]}]}
EOF
}

resource "google_vertex_ai_index" "default" {
  region       = "us-central1"
  display_name = "sample-index-batch-update"
  description  = "A sample index for batch update"
  labels = {
    foo = "bar"
  }

  metadata {
    contents_delta_uri = "gs://${google_storage_bucket.bucket.name}/contents"
    config {
      dimensions                  = 2
      approximate_neighbors_count = 150
      distance_measure_type       = "DOT_PRODUCT_DISTANCE"
      algorithm_config {
        tree_ah_config {
          leaf_node_embedding_count    = 500
          leaf_nodes_to_search_percent = 7
        }
      }
    }
  }
  index_update_method = "BATCH_UPDATE"

  timeouts {
    create = "2h"
    update = "1h"
  }
}

SDK da Vertex AI para Python

Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Saiba mais na documentação de referência da API SDK da Vertex AI para Python.

def vector_search_deploy_index(
    project: str,
    location: str,
    index_name: str,
    index_endpoint_name: str,
    deployed_index_id: str,
) -> None:
    """Deploy a vector search index to a vector search index endpoint.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_name (str): Required. The index to update. A fully-qualified index
          resource name or a index ID.  Example:
          "projects/123/locations/us-central1/indexes/my_index_id" or
          "my_index_id".
        index_endpoint_name (str): Required. Index endpoint to deploy the index
          to.
        deployed_index_id (str): Required. The user specified ID of the
          DeployedIndex.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create the index instance from an existing index
    index = aiplatform.MatchingEngineIndex(index_name=index_name)

    # Create the index endpoint instance from an existing endpoint.
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint(
        index_endpoint_name=index_endpoint_name
    )

    # Deploy Index to Endpoint
    index_endpoint = index_endpoint.deploy_index(
        index=index, deployed_index_id=deployed_index_id
    )

    print(index_endpoint.deployed_indexes)

Console

Use estas instruções para implantar seu índice.

  1. Na seção Vertex AI do console do Google Cloud, acesse a seção Implantar e usar. Selecione Pesquisa de vetor.

    Acesse a Pesquisa vetorial. Uma lista dos índices ativos será exibida.

  2. Selecione o nome do índice que você quer implantar. A página de detalhes do índice é aberta.
  3. Na página de detalhes do índice, clique em Implantar no endpoint. O painel de implantação do índice será aberto.
  4. Insira um nome de exibição. Ele funciona como um ID e não pode ser atualizado.
  5. No menu suspenso Endpoint, selecione o endpoint em que você quer implantar esse índice. Observação: o endpoint ficará indisponível se o índice já estiver implantado nele.
  6. Opcional: no campo Tipo de máquina, selecione "Padrão" ou "Alta memória".
  7. Opcional. Selecione Ativar escalonamento automático para redimensionar automaticamente o número de nós com base nas demandas das cargas de trabalho. Se o escalonamento automático estiver desativado, o número padrão de réplicas será 2.
  8. Clique em Implantar para implantar o modelo no endpoint. Observação: a implantação leva cerca de 30 minutos.

Criar uma regra de encaminhamento no projeto VPC

Após a conclusão da implantação do índice, o endpoint do índice retorna um URI de anexo de serviço em vez de um endereço IP. Você precisa criar um endereço de computação e uma regra de encaminhamento no projeto de VPC que segmenta o anexo de serviço usando o endereço de computação criado. Para criar um endereço de computação, use o exemplo a seguir:

gcloud compute addresses create ${ADDRESS_NAME:?} \
    --region=${REGION:?} \
    --subnet=${SUBNET_NAME:?} \
    --project=${VPC_PROJECT:?}

Para criar uma regra de encaminhamento que segmenta o URI do anexo de serviço usando o endereço de computação criado, use o exemplo a seguir:

SERVICE_ATTACHMENT_URI=`gcloud ai index-endpoints describe {INDEX_ENDPOINT_ID}
--format="value(deployedIndexes.privateEndpoints.serviceAttachment)"`

gcloud compute forwarding-rules create ${ENDPOINT_NAME:?} \
    --network=${NETWORK_NAME:?} \
    --address=${ADDRESS_NAME:?} \
    --target-service-attachment=${SERVICE_ATTACHMENT_URI:?} \
    --project=${VPC_PROJECT:?} \
    --region=${REGION:?}

(Opcional) Criar um registro DNS para o endereço IP

Se você quiser se conectar e carregar sem memorizar o endereço IP real, crie um registro DNS. Esta etapa é opcional.

DNS_NAME_SUFFIX=matchingengine.vertexai.goog. # Don't forget the "." in the end.
DNS_NAME=${INDEX_ENDPOINT_ID:?}.${REGION:?}.${DNS_NAME_SUFFIX:?}

gcloud dns managed-zones create ${DNS_ZONE_NAME:?} \
    --dns-name=${DNS_NAME_SUFFIX:?} \
    --visibility=private \
    --project=${VPC_PROJECT:?} \
    --region=${REGION:?}

gcloud dns record-sets create ${DNS_NAME:?} \
    --rrdatas=${IP_ADDRESS:?} \
    --type=A --ttl=60 \
    --zone=${DNS_ZONE_NAME:?} \
    --project=${VPC_PROJECT:?} \
    --region=${REGION:?}

Enviar consultas para o endpoint do índice

Agora que você criou um endpoint com o Private Service Connect e criou o índice, é possível começar a executar consultas.

Para consultar o índice, acesse Consultar índices para saber os vizinhos mais próximos.

A seguir