Implementar y gestionar endpoints de índice en una red de VPC

Para desplegar un índice en un endpoint, debes realizar las tres tareas siguientes:

  1. Crea un IndexEndpoint si es necesario o reutiliza uno que ya tengas.IndexEndpoint
  2. Obtén el IndexEndpoint ID.
  3. Implementa el índice en IndexEndpoint.

Crea un IndexEndpoint en tu red de VPC

Si vas a implementar un Index en un IndexEndpoint, puedes saltarte este paso.

Antes de usar un índice para responder a consultas de match de vectores online, debe implementar el Index en un IndexEndpoint de su red de emparejamiento entre redes de VPC. El primer paso es crear un IndexEndpoint. Puedes desplegar más de un índice en un IndexEndpoint que comparta la misma red de VPC.

gcloud

En el siguiente ejemplo se usa el comando gcloud ai index-endpoints create.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • INDEX_ENDPOINT_NAME: nombre visible del endpoint de índice.
  • VPC_NETWORK_NAME: el nombre de la red de Google Compute Engine a la que se debe emparejar el endpoint de índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud ai index-endpoints create \
    --display-name=INDEX_ENDPOINT_NAME \
    --network=VPC_NETWORK_NAME \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai index-endpoints create `
    --display-name=INDEX_ENDPOINT_NAME `
    --network=VPC_NETWORK_NAME `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai index-endpoints create ^
    --display-name=INDEX_ENDPOINT_NAME ^
    --network=VPC_NETWORK_NAME ^
    --region=LOCATION ^
    --project=PROJECT_ID

Deberías recibir una respuesta similar a la siguiente:

The Google Cloud CLI tool might take a few minutes to create the IndexEndpoint.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INDEX_ENDPOINT_NAME: nombre visible del endpoint de índice.
  • VPC_NETWORK_NAME: el nombre de la red de Google Compute Engine a la que se debe emparejar el endpoint de índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "display_name": "INDEX_ENDPOINT_NAME",
  "network": "VPC_NETWORK_NAME"
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateIndexEndpointOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-01-13T04:09:56.641107Z",
      "updateTime": "2022-01-13T04:09:56.641107Z"
    }
  }
}

Puedes sondear el estado de la operación hasta que la respuesta incluya "done": true.

Terraform

En el siguiente ejemplo se usa el recurso de Terraform vertex_ai_index_endpoint para crear un endpoint de índice.

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint within a VPC network"
  region       = "us-central1"
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.default.name}"
  depends_on = [
    google_service_networking_connection.default
  ]
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.default.name]
  # Workaround to allow `terraform destroy`, see https://github.com/hashicorp/terraform-provider-google/issues/18729
  deletion_policy = "ABANDON"
}

resource "google_compute_global_address" "default" {
  name          = "sample-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_compute_network" "default" {
  name = "sample-network"
}

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"
  }
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_create_index_endpoint_vpc(
    project: str, location: str, display_name: str, network: str
) -> aiplatform.MatchingEngineIndexEndpoint:
    """Create a vector search index endpoint within a VPC network.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        display_name (str): Required. The index endpoint display name
        network(str): Required. The VPC network name, in the format of
            projects/{project number}/global/networks/{network name}.

    Returns:
        aiplatform.MatchingEngineIndexEndpoint - The created index endpoint.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # Create Index Endpoint
    index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
        display_name=display_name,
        network=network,
        description="Matching Engine VPC Index Endpoint",
    )

    return index_endpoint

Consola

Sigue estas instrucciones para crear un endpoint de índice.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Se muestra una lista de tus índices activos.
  3. En la parte superior de la página, selecciona la pestaña Endpoints de índice. Se muestran los endpoints de índice.
  4. Haga clic en Crear endpoint de índice. Se abre el panel Crear un endpoint de índice.
  5. Introduce un nombre visible para el endpoint del índice.
  6. En el campo Región, selecciona una región en el menú desplegable.
  7. En el campo Acceso, selecciona Privado.
  8. Introduce los detalles de tu red de VPC emparejada. Introduce el nombre completo de la red de Compute Engine con la que se debe emparejar el trabajo. El formato debe ser projects/{project_num}/global/networks/{network_id}
  9. Haz clic en Crear.

Desplegar un índice

gcloud

En este ejemplo se usa el comando gcloud ai index-endpoints deploy-index.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • DEPLOYED_INDEX_ENDPOINT_NAME: Nombre visible del endpoint de índice implementado.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o 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

Deberías recibir una respuesta similar a la siguiente:

The Google Cloud CLI tool might take a few minutes to create the IndexEndpoint.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • DEPLOYED_INDEX_ENDPOINT_NAME: Nombre visible del endpoint de índice implementado.
  • INDEX_ID: ID del índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "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

En el siguiente ejemplo se usa el recurso de Terraform vertex_ai_index_endpoint_deployed_index para crear un endpoint de índice implementado.

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de 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_vpc"
}

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint within a VPC network"
  region       = "us-central1"
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.default.name}"
  depends_on = [
    google_service_networking_connection.default
  ]
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.default.name]
  # Workaround to allow `terraform destroy`, see https://github.com/hashicorp/terraform-provider-google/issues/18729
  deletion_policy = "ABANDON"
}

resource "google_compute_global_address" "default" {
  name          = "sample-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_compute_network" "default" {
  name = "sample-network"
}

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"
  }
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API 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)

Consola

Sigue estas instrucciones para implementar tu índice en un endpoint.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Se muestra una lista de tus índices activos.
  3. Selecciona el nombre del índice que quieras implementar. Se abrirá la página de detalles del índice.
  4. En la página de detalles del índice, haz clic en Implementar en endpoint. Se abrirá el panel de implementación de índices.
  5. Introduce un nombre visible. Este nombre actúa como un ID y no se puede actualizar.
  6. En el menú desplegable Endpoint, selecciona el endpoint en el que quieras implementar este índice. Nota: El endpoint no está disponible si el índice ya se ha implementado en él.
  7. Opcional: En el campo Tipo de máquina, selecciona Estándar o Alta memoria.
  8. Opcional. Selecciona Habilitar el autoescalado para cambiar automáticamente el tamaño del número de nodos en función de las demandas de tus cargas de trabajo. El número predeterminado de réplicas es 2 si el autoescalado está inhabilitado.
  9. Haz clic en Desplegar para desplegar el índice en el endpoint. Nota: El proceso de implementación tarda unos 30 minutos.

Habilitar autoescalado

La búsqueda vectorial admite el autoescalado, que puede cambiar automáticamente el tamaño del número de nodos en función de las demandas de tus cargas de trabajo. Cuando la demanda es alta, se añaden nodos al grupo de nodos, que no superará el tamaño máximo que designes. Cuando la demanda es baja, el grupo de nodos se reduce a un tamaño mínimo que designes. Puedes consultar los nodos que se están usando y los cambios monitorizando las réplicas actuales.

Para habilitar el autoescalado, especifica maxReplicaCount y minReplicaCount al desplegar el índice:

gcloud

En el siguiente ejemplo se usa el comando gcloud ai index-endpoints deploy-index.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • DEPLOYED_INDEX_NAME: nombre visible del índice implementado.
  • INDEX_ID: ID del índice.
  • MIN_REPLICA_COUNT: número mínimo de réplicas de la máquina en las que se desplegará siempre el índice desplegado. Si se especifica, el valor debe ser igual o superior a 1.
  • MAX_REPLICA_COUNT: número máximo de réplicas de la máquina en las que se puede implementar el índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --display-name=DEPLOYED_INDEX_NAME \
    --index=INDEX_ID \
    --min-replica-count=MIN_REPLICA_COUNT \
    --max-replica-count=MAX_REPLICA_COUNT \
    --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_NAME `
    --index=INDEX_ID `
    --min-replica-count=MIN_REPLICA_COUNT `
    --max-replica-count=MAX_REPLICA_COUNT `
    --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_NAME ^
    --index=INDEX_ID ^
    --min-replica-count=MIN_REPLICA_COUNT ^
    --max-replica-count=MAX_REPLICA_COUNT ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • DEPLOYED_INDEX_NAME: nombre visible del índice implementado.
  • INDEX_ID: ID del índice.
  • MIN_REPLICA_COUNT: número mínimo de réplicas de la máquina en las que se desplegará siempre el índice desplegado. Si se especifica, el valor debe ser igual o superior a 1.
  • MAX_REPLICA_COUNT: número máximo de réplicas de la máquina en las que se puede implementar el índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
 "deployedIndex": {
   "id": "DEPLOYED_INDEX_ID",
   "index": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID",
   "displayName": "DEPLOYED_INDEX_NAME",
   "automaticResources": {
     "minReplicaCount": MIN_REPLICA_COUNT,
     "maxReplicaCount": MAX_REPLICA_COUNT
   }
 }
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "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": "2023-10-19T17:53:16.502088Z",
     "updateTime": "2023-10-19T17:53:16.502088Z"
   },
   "deployedIndexId": "DEPLOYED_INDEX_ID"
 }
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_deploy_autoscaling_index(
    project: str,
    location: str,
    index_name: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    min_replica_count: int,
    max_replica_count: int,
) -> 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.
        min_replica_count (int): Required. The minimum number of replicas to
          deploy.
        max_replica_count (int): Required. The maximum number of replicas to
          deploy.
    """
    # 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. Specifying min and max replica counts will
    # enable autoscaling.
    index_endpoint.deploy_index(
        index=index,
        deployed_index_id=deployed_index_id,
        min_replica_count=min_replica_count,
        max_replica_count=max_replica_count,
    )

Consola

Solo puedes habilitar el autoescalado desde la consola durante la implementación del índice.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Se muestra una lista de tus índices activos.
  3. Selecciona el nombre del índice que quieras implementar. Se abrirá la página de detalles del índice.
  4. En la página de detalles del índice, haz clic en Implementar en endpoint. Se abrirá el panel de implementación de índices.
  5. Introduce un nombre visible. Este nombre actúa como un ID y no se puede actualizar.
  6. En el menú desplegable Endpoint, selecciona el endpoint en el que quieras implementar este índice. Nota: El endpoint no está disponible si el índice ya se ha implementado en él.
  7. Opcional: En el campo Tipo de máquina, selecciona Estándar o Alta memoria.
  8. Opcional. Selecciona Habilitar el autoescalado para cambiar automáticamente el tamaño del número de nodos en función de las demandas de tus cargas de trabajo. El número predeterminado de réplicas es 2 si el autoescalado está inhabilitado.
  • Si no se definen minReplicaCount ni maxReplicaCount, se les asigna el valor 2 de forma predeterminada.
  • Si solo se define maxReplicaCount, minReplicaCount se define como 2 de forma predeterminada.
  • Si solo se define minReplicaCount, maxReplicaCount se define como igual a minReplicaCount.

Modificar un DeployedIndex

Puedes usar la API MutateDeployedIndex para actualizar los recursos de implementación (por ejemplo, minReplicaCount y maxReplicaCount) de un índice que ya se haya implementado.

  • Los usuarios no pueden cambiar el machineType una vez que se ha implementado el índice.
  • Si no se especifica maxReplicaCount en la solicitud, DeployedIndex seguirá usando el maxReplicaCount que ya tenía.

gcloud

En el siguiente ejemplo se usa el comando gcloud ai index-endpoints mutate-deployed-index.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • MIN_REPLICA_COUNT: número mínimo de réplicas de la máquina en las que se desplegará siempre el índice desplegado. Si se especifica, el valor debe ser igual o superior a 1.
  • MAX_REPLICA_COUNT: número máximo de réplicas de la máquina en las que se puede implementar el índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud ai index-endpoints mutate-deployed-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --min-replica-count=MIN_REPLICA_COUNT \
    --max-replica-count=MAX_REPLICA_COUNT \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai index-endpoints mutate-deployed-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --min-replica-count=MIN_REPLICA_COUNT `
    --max-replica-count=MAX_REPLICA_COUNT `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai index-endpoints mutate-deployed-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --min-replica-count=MIN_REPLICA_COUNT ^
    --max-replica-count=MAX_REPLICA_COUNT ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • MIN_REPLICA_COUNT: número mínimo de réplicas de la máquina en las que se desplegará siempre el índice desplegado. Si se especifica, el valor debe ser igual o superior a 1.
  • MAX_REPLICA_COUNT: número máximo de réplicas de la máquina en las que se puede implementar el índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "deployedIndex": {
    "id": "DEPLOYED_INDEX_ID",
    "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
    "displayName": "DEPLOYED_INDEX_NAME",
    "min_replica_count": "MIN_REPLICA_COUNT",
    "max_replica_count": "MAX_REPLICA_COUNT"
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
"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": "2020-10-19T17:53:16.502088Z",
    "updateTime": "2020-10-19T17:53:16.502088Z"
  },
  "deployedIndexId": "DEPLOYED_INDEX_ID"
}
}

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform. Para obtener más información, consulta la documentación de referencia del proveedor 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_mutate_vpc"
  # This example assumes the deployed index endpoint's resources configuration
  # differs from the values specified below. Terraform will mutate the deployed
  # index endpoint's resource configuration to match.
  automatic_resources {
    min_replica_count = 3
    max_replica_count = 5
  }
}

resource "google_vertex_ai_index_endpoint" "default" {
  display_name = "sample-endpoint"
  description  = "A sample index endpoint within a VPC network"
  region       = "us-central1"
  network      = "projects/${data.google_project.project.number}/global/networks/${google_compute_network.default.name}"
  depends_on = [
    google_service_networking_connection.default
  ]
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.default.name]
  # Workaround to allow `terraform destroy`, see https://github.com/hashicorp/terraform-provider-google/issues/18729
  deletion_policy = "ABANDON"
}

resource "google_compute_global_address" "default" {
  name          = "sample-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_compute_network" "default" {
  name = "sample-network"
}

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"
  }
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_mutate_deployed_index(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
    min_replica_count: int,
    max_replica_count: int,
) -> None:
    """Mutate the deployment resources of an already deployed index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
          against.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
          the queries against.
        min_replica_count (int): Required. The minimum number of replicas to
          deploy.
        max_replica_count (int): Required. The maximum number of replicas to
          deploy.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

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

    # Mutate the deployed index
    index_endpoint.mutate_deployed_index(
        deployed_index_id=deployed_index_id,
        min_replica_count=min_replica_count,
        max_replica_count=max_replica_count,
    )

Ajustes de implementación que afectan al rendimiento

Los siguientes ajustes de implementación pueden afectar a la latencia, la disponibilidad y el coste al usar la búsqueda vectorial. Estas directrices se aplican a la mayoría de los casos. Sin embargo, siempre debes experimentar con tus configuraciones para asegurarte de que funcionan en tu caso práctico.

Ajuste Impacto en el rendimiento
Tipo de máquina

La selección de hardware interactúa directamente con el tamaño de fragmento seleccionado. En función de las opciones de partición que hayas especificado al crear el índice, cada tipo de máquina ofrece un equilibrio entre rendimiento y coste.

Consulta la página de precios para determinar el hardware disponible y los precios. En general, el rendimiento aumenta en el siguiente orden:

  • E2 estándar
  • E2 highmem
  • N1 estándar
  • N2D estándar
Número mínimo de réplicas

minReplicaCount reserva una capacidad mínima para la disponibilidad y la latencia para asegurarse de que el sistema no tenga problemas de arranque en frío cuando el tráfico aumente rápidamente desde niveles bajos.

Si tienes cargas de trabajo que bajan a niveles bajos y, después, aumentan rápidamente a niveles más altos, te recomendamos que asignes a minReplicaCount un número que pueda adaptarse a los picos de tráfico iniciales.

Número máximo de réplicas maxReplicaCount te permite controlar principalmente el coste del uso. Puedes evitar que los costes superen un umbral determinado, pero a cambio se aumentará la latencia y se reducirá la disponibilidad.

Lista IndexEndpoints

Para enumerar tus recursos de IndexEndpoint y ver la información de las instancias de DeployedIndex asociadas, ejecuta el siguiente código:

gcloud

En el siguiente ejemplo se usa el comando gcloud ai index-endpoints list.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud ai index-endpoints list \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai index-endpoints list `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai index-endpoints list ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

Método HTTP y URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "indexEndpoints": [
   {
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID",
     "displayName": "INDEX_ENDPOINT_DISPLAY_NAME",
     "deployedIndexes": [
       {
         "id": "DEPLOYED_INDEX_ID",
         "index": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID",
         "displayName": "DEPLOYED_INDEX_DISPLAY_NAME",
         "createTime": "2021-06-04T02:23:40.178286Z",
         "privateEndpoints": {
           "matchGrpcAddress": "GRPC_ADDRESS"
         },
         "indexSyncTime": "2022-01-13T04:22:00.151916Z",
         "automaticResources": {
           "minReplicaCount": 2,
           "maxReplicaCount": 10
         }
       }
     ],
     "etag": "AMEw9yP367UitPkLo-khZ1OQvqIK8Q0vLAzZVF7QjdZ5O3l7Zow-mzBo2l6xmiuuMljV",
     "createTime": "2021-03-17T04:47:28.460373Z",
     "updateTime": "2021-06-04T02:23:40.930513Z",
     "network": "VPC_NETWORK_NAME"
   }
 ]
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_list_index_endpoint(
    project: str, location: str
) -> List[aiplatform.MatchingEngineIndexEndpoint]:
    """List vector search index endpoints.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name

    Returns:
        List of aiplatform.MatchingEngineIndexEndpoint
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

    # List Index Endpoints
    return aiplatform.MatchingEngineIndexEndpoint.list()

Consola

Sigue estas instrucciones para ver una lista de tus endpoints de índice.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. En la parte superior de la página, selecciona la pestaña Endpoint de índice.
  3. Se muestran todos los endpoints de índice.

Para obtener más información, consulta la documentación de referencia de IndexEndpoint.

Anular el despliegue de un índice

Para retirar una implementación de un índice, ejecuta el siguiente código:

gcloud

En el siguiente ejemplo se usa el comando gcloud ai index-endpoints undeploy-index.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud ai index-endpoints undeploy-index INDEX_ENDPOINT_ID \
    --deployed-index-id=DEPLOYED_INDEX_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai index-endpoints undeploy-index INDEX_ENDPOINT_ID `
    --deployed-index-id=DEPLOYED_INDEX_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai index-endpoints undeploy-index INDEX_ENDPOINT_ID ^
    --deployed-index-id=DEPLOYED_INDEX_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • DEPLOYED_INDEX_ID: cadena especificada por el usuario para identificar de forma única el índice implementado. Debe empezar por una letra y solo puede contener letras, números o guiones bajos. Consulta las directrices de formato de DeployedIndex.id.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
 "deployed_index_id": "DEPLOYED_INDEX_ID"
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.UndeployIndexOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-13T04:09:56.641107Z",
     "updateTime": "2022-01-13T04:09:56.641107Z"
   }
 }
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_undeploy_index(
    project: str,
    location: str,
    index_endpoint_name: str,
    deployed_index_id: str,
) -> None:
    """Mutate the deployment resources of an already deployed index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
          against.
        deployed_index_id (str): Required. The ID of the DeployedIndex to run
          the queries against.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

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

    # Undeploy the index
    index_endpoint.undeploy_index(
        deployed_index_id=deployed_index_id,
    )

Consola

Sigue estas instrucciones para retirar un índice.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. Se muestra una lista de tus índices activos.
  3. Selecciona el índice que quieras retirar. Se abrirá la página de detalles del índice.
  4. En la sección Índices implementados, identifica el endpoint del índice que quieras retirar.
  5. Haz clic en el menú de opciones que se encuentra en la misma fila que el endpoint de índice y selecciona Desplegar.
  6. Se abrirá una pantalla de confirmación. Haz clic en Desplegar. Nota: El proceso de retirada puede tardar hasta 30 minutos.

Eliminar un IndexEndpoint

Antes de eliminar un IndexEndpoint, debes undeploy de todos los índices desplegados en el endpoint.

gcloud

En el siguiente ejemplo se usa el comando gcloud ai index-endpoints delete.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud ai index-endpoints delete INDEX_ENDPOINT_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai index-endpoints delete INDEX_ENDPOINT_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai index-endpoints delete INDEX_ENDPOINT_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice.
  • LOCATION: la región en la que usas Vertex AI.
  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID",
 "metadata": {
   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeleteOperationMetadata",
   "genericMetadata": {
     "createTime": "2022-01-13T04:36:19.142203Z",
     "updateTime": "2022-01-13T04:36:19.142203Z"
   }
 },
 "done": true,
 "response": {
   "@type": "type.googleapis.com/google.protobuf.Empty"
 }
}

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

def vector_search_delete_index_endpoint(
    project: str, location: str, index_endpoint_name: str, force: bool = False
) -> None:
    """Delete a vector search index endpoint.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        index_endpoint_name (str): Required. Index endpoint to run the query
          against.
        force (bool): Required. If true, undeploy any deployed indexes on this
          endpoint before deletion.
    """
    # Initialize the Vertex AI client
    aiplatform.init(project=project, location=location)

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

    # Delete the index endpoint
    index_endpoint.delete(force=force)

Consola

Sigue estas instrucciones para eliminar un endpoint de índice.

  1. En la sección Vertex AI de la Google Cloud consola, ve a la sección Desplegar y usar. Selecciona Vector Search.

    Ir a Vector Search

  2. En la parte superior de la página, selecciona la pestaña Endpoints de índice.
  3. Se muestran todos los endpoints de índice.
  4. Haz clic en el menú de opciones que se encuentra en la misma fila que el endpoint de índice que quieras eliminar y selecciona Eliminar.
  5. Se abrirá una pantalla de confirmación. Haz clic en Eliminar. El endpoint de índice se ha eliminado.