Gestisci indici

Le sezioni seguenti descrivono come configurare, creare, elencare ed eliminare gli indici.

Panoramica dell'indice

Un indice è un file o un insieme di file costituito dai tuoi vettori di incorporamento. Questi vettori sono creati a partire da grandi quantità di dati che vuoi implementare ed eseguire query con Vector Search. Con Vector Search, puoi creare due tipi di indici, a seconda di come prevedi di aggiornarli con i tuoi dati. Puoi creare un indice progettato per gli aggiornamenti batch o un indice progettato per lo streaming degli aggiornamenti.

Un indice batch è utile quando vuoi aggiornare l'indice in batch, con dati memorizzati per un determinato periodo di tempo, ad esempio sistemi elaborati settimanalmente o mensilmente. Un indice di streaming si verifica quando vuoi che i dati dell'indice vengano aggiornati man mano che vengono aggiunti nuovi dati al datastore, ad esempio se hai una libreria e vuoi mostrare il nuovo inventario online il prima possibile. Il tipo che scegli è importante, poiché la configurazione e i requisiti sono diversi.

Configurare i parametri dell'indice

Prima di creare un indice, configura i parametri per l'indice.

Ad esempio, crea un file denominato index_metadata.json:

{
  "contentsDeltaUri": "gs://BUCKET_NAME/path",
  "config": {
    "dimensions": 100,
    "approximateNeighborsCount": 150,
    "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
    "shardSize": "SHARD_SIZE_MEDIUM",
    "algorithm_config": {
      "treeAhConfig": {
        "leafNodeEmbeddingCount": 5000,
        "fractionLeafNodesToSearch": 0.03
      }
    }
  }
}

Puoi trovare la definizione di ciascuno di questi campi in Parametri di configurazione dell'indice.

Crea un indice

Dimensioni indice

I dati dell'indice vengono suddivisi in parti uguali chiamate shard per essere elaborati. Quando crei un indice, devi specificare la dimensione degli shard da utilizzare. Le dimensioni supportate sono le seguenti:

  • SHARD_SIZE_SMALL: 2 GiB per shard.
  • SHARD_SIZE_MEDIUM: 20 GiB per shard.
  • SHARD_SIZE_LARGE: 50 GiB per shard.

I tipi di macchine che puoi utilizzare per eseguire il deployment dell'indice (utilizzando endpoint pubblici o utilizzando endpoint VPC) dipendono dalle dimensioni dello shard dell'indice. La tabella seguente mostra le dimensioni degli shard supportate da ciascun tipo di macchina:

Tipo di macchina SHARD_SIZE_SMALL SHARD_SIZE_MEDIUM SHARD_SIZE_LARGE
n1-standard-16
n1-standard-32
e2-standard-2 (valore predefinito)
e2-standard-16 (valore predefinito)
e2-highmem-16 (valore predefinito)
n2d-standard-32

Per scoprire in che modo le dimensioni degli shard e il tipo di macchina influiscono sui prezzi, consulta la pagina dei prezzi di Vertex AI. Per scoprire in che modo le dimensioni dello shard influiscono sulle prestazioni, consulta Parametri di configurazione che influiscono sulle prestazioni.

Crea un indice per l'aggiornamento batch

Segui queste istruzioni per creare e implementare l'indice. Se non hai ancora gli incorporamenti pronti, puoi passare a Crea un indice batch vuoto. Con questa opzione, non sono necessari dati di incorporamento al momento della creazione dell'indice.

Per creare un indice:

gcloud

Prima di utilizzare i dati dei comandi riportati di seguito, apporta le seguenti sostituzioni:

  • LOCAL_PATH_TO_METADATA_FILE: il percorso locale del file di metadati.
  • INDEX_NAME: il nome visualizzato per l'indice.
  • LOCATION: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il tuo Google Cloud ID progetto.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud ai indexes create \
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE \
    --display-name=INDEX_NAME \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes create `
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE `
    --display-name=INDEX_NAME `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes create ^
    --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^
    --display-name=INDEX_NAME ^
    --region=LOCATION ^
    --project=PROJECT_ID

Dovresti ricevere una risposta simile alla seguente:

You can poll for the status of the operation for the response
to include "done": true. Use the following example to poll the status.

  $ gcloud ai operations describe 1234567890123456789 --project=my-test-project --region=us-central1

Consulta gcloud ai operations per scoprire di più sul comando describe.

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • INPUT_DIR: il percorso della directory Cloud Storage del contenuto dell'indice.
  • INDEX_NAME: il nome visualizzato per l'indice.
  • LOCATION: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il tuo Google Cloud ID progetto.
  • PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "display_name": "INDEX_NAME",
  "metadata": {
    "contentsDeltaUri": "INPUT_DIR",
    "config": {
      "dimensions": 100,
      "approximateNeighborsCount": 150,
      "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
      "algorithm_config": {
        "treeAhConfig": {
          "leafNodeEmbeddingCount": 500,
          "leafNodesToSearchPercent": 7
        }
      }
    }
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateIndexOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-01-08T01:21:10.147035Z",
      "updateTime": "2022-01-08T01:21:10.147035Z"
    }
  }
}

Terraform

L'esempio seguente utilizza la risorsa Terraform google_vertex_ai_index per creare un indice per gli aggiornamenti batch.

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

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

# Create a Cloud Storage bucket
resource "google_storage_bucket" "bucket" {
  name                        = "vertex-ai-index-bucket-${random_id.bucket_name_suffix.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

Per scoprire come installare o aggiornare l'SDK Vertex AI Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

def vector_search_create_index(
    project: str, location: str, display_name: str, gcs_uri: Optional[str] = None
) -> aiplatform.MatchingEngineIndex:
    """Create a vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        display_name (str): Required. The index display name
        gcs_uri (str): Optional. The Google Cloud Storage uri for index content

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

    # Create Index
    index = aiplatform.MatchingEngineIndex.create_tree_ah_index(
        display_name=display_name,
        contents_delta_uri=gcs_uri,
        description="Matching Engine Index",
        dimensions=100,
        approximate_neighbors_count=150,
        leaf_node_embedding_count=500,
        leaf_nodes_to_search_percent=7,
        index_update_method="BATCH_UPDATE",  # Options: STREAM_UPDATE, BATCH_UPDATE
        distance_measure_type=aiplatform.matching_engine.matching_engine_index_config.DistanceMeasureType.DOT_PRODUCT_DISTANCE,
    )

    return index

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Java.

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.aiplatform.v1.CreateIndexRequest;
import com.google.cloud.aiplatform.v1.Index;
import com.google.cloud.aiplatform.v1.Index.IndexUpdateMethod;
import com.google.cloud.aiplatform.v1.IndexServiceClient;
import com.google.cloud.aiplatform.v1.IndexServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.util.concurrent.TimeUnit;

public class CreateIndexSample {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String project = "YOUR_PROJECT_ID";
    String location = "YOUR_LOCATION";
    String displayName = "YOUR_INDEX_DISPLAY_NAME";
    String contentsDeltaUri = "gs://YOUR_BUCKET/";
    String metadataJson =
        String.format(
            "{\n"
                + "  \"contentsDeltaUri\": \"%s\",\n"
                + "  \"config\": {\n"
                + "    \"dimensions\": 100,\n"
                + "        \"approximateNeighborsCount\": 150,\n"
                + "        \"distanceMeasureType\": \"DOT_PRODUCT_DISTANCE\",\n"
                + "        \"shardSize\": \"SHARD_SIZE_MEDIUM\",\n"
                + "        \"algorithm_config\": {\n"
                + "      \"treeAhConfig\": {\n"
                + "        \"leafNodeEmbeddingCount\": 5000,\n"
                + "            \"fractionLeafNodesToSearch\": 0.03\n"
                + "      }\n"
                + "    }\n"
                + "  }\n"
                + "}",
            contentsDeltaUri);

    createIndexSample(project, location, displayName, metadataJson);
  }

  public static Index createIndexSample(
      String project, String location, String displayName, String metadataJson) throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IndexServiceClient indexServiceClient =
        IndexServiceClient.create(
            IndexServiceSettings.newBuilder()
                .setEndpoint(location + "-aiplatform.googleapis.com:443")
                .build())) {
      Value.Builder metadataBuilder = Value.newBuilder();
      JsonFormat.parser().merge(metadataJson, metadataBuilder);

      CreateIndexRequest request =
          CreateIndexRequest.newBuilder()
              .setParent(LocationName.of(project, location).toString())
              .setIndex(
                  Index.newBuilder()
                      .setDisplayName(displayName)
                      .setMetadata(metadataBuilder)
                      .setIndexUpdateMethod(IndexUpdateMethod.BATCH_UPDATE))
              .build();

      return indexServiceClient.createIndexAsync(request).get(5, TimeUnit.MINUTES);
    }
  }
}

Console

Segui queste istruzioni per creare un indice per gli aggiornamenti batch.

  1. Nella sezione Vertex AI della console Google Cloud , vai alla sezione Deployment e utilizzo. Seleziona Vector Search.

    Vai a Vector Search

  2. Fai clic su Crea nuovo indice per aprire il riquadro Indice. Viene visualizzato il riquadro Crea un nuovo indice.
  3. Nel campo Nome visualizzato, fornisci un nome per identificare in modo univoco il tuo indice.
  4. Nel campo Descrizione, fornisci una descrizione dello scopo dell'indice.
  5. Nel campo Regione, seleziona una regione dal menu a discesa.
  6. Nel campo Cloud Storage, cerca e seleziona la cartella Cloud Storage in cui sono archiviati i dati vettoriali.
  7. Nel menu a discesa Tipo di algoritmo, seleziona il tipo di algoritmo che Vector Search utilizza per una ricerca efficiente. Se selezioni l'algoritmo treeAh, inserisci il numero approssimativo di vicini.
  8. Nel campo Dimensioni, inserisci il numero di dimensioni dei vettori di input.
  9. Nel campo Metodo di aggiornamento, seleziona Batch.
  10. Nel campo Dimensioni shard, seleziona dal menu a discesa le dimensioni dello shard che preferisci.
  11. Fai clic su Crea. Una volta pronto, il nuovo indice viene visualizzato nell'elenco degli indici. Nota: la compilazione può richiedere fino a un'ora.

Crea un indice batch vuoto

Per creare ed eseguire il deployment dell'indice immediatamente, puoi creare un indice batch vuoto. Con questa opzione, non sono necessari dati di incorporamento al momento della creazione dell'indice.

Per creare un indice vuoto, la richiesta è quasi identica alla creazione di un indice per gli aggiornamenti batch. La differenza è che rimuovi il campo contentsDeltaUri, poiché non stai collegando una posizione dei dati. Ecco un esempio di indice batch vuoto:

Esempio di richiesta di indice vuota

{
  "display_name": INDEX_NAME,
  "indexUpdateMethod": "BATCH_UPDATE",
  "metadata": {
    "config": {
      "dimensions": 100,
      "approximateNeighborsCount": 150,
      "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
      "algorithm_config": {
        "treeAhConfig": {
          "leafNodeEmbeddingCount": 500,
          "fractionLeafNodesToSearch": 0.07
        }
      }
    }
  }
}
  

Crea un indice per gli aggiornamenti di streaming

Segui queste istruzioni per creare e implementare l'indice di streaming. Se non hai ancora preparato gli incorporamenti, vai a Crea un indice vuoto per gli aggiornamenti dello streaming. Con questa opzione, non sono necessari dati di incorporamento al momento della creazione dell'indice.

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • INDEX_NAME: il nome visualizzato per l'indice.
  • DESCRIPTION: una descrizione dell'indice.
  • INPUT_DIR: il percorso della directory Cloud Storage del contenuto dell'indice.
  • DIMENSIONS: il numero di dimensioni del vettore di embedding.
  • PROJECT_ID: il tuo Google Cloud ID progetto.
  • PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto.
  • LOCATION: la regione in cui utilizzi Vertex AI.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  displayName: "INDEX_NAME",
  description: "DESCRIPTION",
  metadata: {
     contentsDeltaUri: "INPUT_DIR",
     config: {
        dimensions: "DIMENSIONS",
        approximateNeighborsCount: 150,
        distanceMeasureType: "DOT_PRODUCT_DISTANCE",
        algorithmConfig: {treeAhConfig: {leafNodeEmbeddingCount: 10000, leafNodesToSearchPercent: 2}}
     },
  },
  indexUpdateMethod: "STREAM_UPDATE"
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.ui.CreateIndexOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-12-05T23:17:45.416117Z",
      "updateTime": "2023-12-05T23:17:45.416117Z",
      "state": "RUNNING",
      "worksOn": [
        "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID"
      ]
    }
  }
}

Terraform

L'esempio seguente utilizza la risorsa Terraform google_vertex_ai_index per creare un indice per gli aggiornamenti in streaming.

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

# 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" "streaming_index" {
  region       = "us-central1"
  display_name = "sample-index-streaming-update"
  description  = "A sample index for streaming 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 = "STREAM_UPDATE"

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

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

def vector_search_create_streaming_index(
    project: str, location: str, display_name: str, gcs_uri: Optional[str] = None
) -> aiplatform.MatchingEngineIndex:
    """Create a vector search index.

    Args:
        project (str): Required. Project ID
        location (str): Required. The region name
        display_name (str): Required. The index display name
        gcs_uri (str): Optional. The Google Cloud Storage uri for index content

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

    # Create Index
    index = aiplatform.MatchingEngineIndex.create_tree_ah_index(
        display_name=display_name,
        contents_delta_uri=gcs_uri,
        description="Matching Engine Index",
        dimensions=100,
        approximate_neighbors_count=150,
        leaf_node_embedding_count=500,
        leaf_nodes_to_search_percent=7,
        index_update_method="STREAM_UPDATE",  # Options: STREAM_UPDATE, BATCH_UPDATE
        distance_measure_type=aiplatform.matching_engine.matching_engine_index_config.DistanceMeasureType.DOT_PRODUCT_DISTANCE,
    )

    return index

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Java.

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.aiplatform.v1.CreateIndexRequest;
import com.google.cloud.aiplatform.v1.Index;
import com.google.cloud.aiplatform.v1.Index.IndexUpdateMethod;
import com.google.cloud.aiplatform.v1.IndexServiceClient;
import com.google.cloud.aiplatform.v1.IndexServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.util.concurrent.TimeUnit;

public class CreateStreamingIndexSample {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String project = "YOUR_PROJECT_ID";
    String location = "YOUR_LOCATION";
    String displayName = "YOUR_INDEX_DISPLAY_NAME";
    String contentsDeltaUri = "gs://YOUR_BUCKET/";
    String metadataJson =
        String.format(
            "{\n"
                + "  \"contentsDeltaUri\": \"%s\",\n"
                + "  \"config\": {\n"
                + "    \"dimensions\": 100,\n"
                + "        \"approximateNeighborsCount\": 150,\n"
                + "        \"distanceMeasureType\": \"DOT_PRODUCT_DISTANCE\",\n"
                + "        \"shardSize\": \"SHARD_SIZE_MEDIUM\",\n"
                + "        \"algorithm_config\": {\n"
                + "      \"treeAhConfig\": {\n"
                + "        \"leafNodeEmbeddingCount\": 5000,\n"
                + "            \"fractionLeafNodesToSearch\": 0.03\n"
                + "      }\n"
                + "    }\n"
                + "  }\n"
                + "}",
            contentsDeltaUri);

    createStreamingIndexSample(project, location, displayName, metadataJson);
  }

  public static Index createStreamingIndexSample(
      String project, String location, String displayName, String metadataJson) throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IndexServiceClient indexServiceClient =
        IndexServiceClient.create(
            IndexServiceSettings.newBuilder()
                .setEndpoint(location + "-aiplatform.googleapis.com:443")
                .build())) {
      Value.Builder metadataBuilder = Value.newBuilder();
      JsonFormat.parser().merge(metadataJson, metadataBuilder);

      CreateIndexRequest request =
          CreateIndexRequest.newBuilder()
              .setParent(LocationName.of(project, location).toString())
              .setIndex(
                  Index.newBuilder()
                      .setDisplayName(displayName)
                      .setMetadata(metadataBuilder)
                      .setIndexUpdateMethod(IndexUpdateMethod.STREAM_UPDATE))
              .build();

      return indexServiceClient.createIndexAsync(request).get(5, TimeUnit.MINUTES);
    }
  }
}

Console

Segui queste istruzioni per creare un indice per gli aggiornamenti in streaming nella console Google Cloud .

Per creare un indice disponibile per gli aggiornamenti di streaming, sono necessari passaggi simili a quelli per configurare un indice di aggiornamento batch, tranne per il fatto che devi impostare indexUpdateMethod su STREAM_UPDATE.

  1. Nella sezione Vertex AI della console Google Cloud , vai alla sezione Deployment e utilizzo. Seleziona Vector Search

    Vai a Vector Search

  2. Fai clic su Crea nuovo indice per aprire il riquadro Indice. Viene visualizzato il riquadro Crea un nuovo indice.
  3. Nel campo Nome visualizzato, fornisci un nome per identificare in modo univoco l'indice.
  4. Nel campo Descrizione, fornisci una descrizione dello scopo dell'indice.
  5. Nel campo Regione, seleziona una regione dal menu a discesa.
  6. Nel campo Cloud Storage, cerca e seleziona la cartella Cloud Storage in cui sono archiviati i tuoi dati vettoriali.
  7. Nel menu a discesa Tipo di algoritmo, seleziona il tipo di algoritmo che verrà utilizzato da Vector Search per eseguire la ricerca. Se selezioni l'algoritmo treeAh, inserisci il numero approssimativo di vicini.
  8. Nel campo Dimensioni, inserisci il numero di dimensioni dei vettori di input.
  9. Nel campo Metodo di aggiornamento, seleziona Stream.
  10. Nel campo Dimensione shard, seleziona dal menu a discesa la dimensione shard che preferisci.
  11. Fai clic su Crea. Una volta pronto, il nuovo indice viene visualizzato nell'elenco degli indici. Nota: la compilazione può richiedere fino a un'ora.

Crea un indice vuoto per gli aggiornamenti in streaming

Per creare ed eseguire il deployment dell'indice immediatamente, puoi creare un indice vuoto per lo streaming. Con questa opzione, non sono necessari dati di incorporamento al momento della creazione dell'indice.

Per creare un indice vuoto, la richiesta è quasi identica alla creazione di un indice per lo streaming. La differenza è che rimuovi il campo contentsDeltaUri, poiché non stai collegando una posizione dei dati. Ecco un esempio di indice di streaming vuoto:

Esempio di richiesta di indice vuota

{
  "display_name": INDEX_NAME,
  "indexUpdateMethod": "STREAM_UPDATE",
  "metadata": {
    "config": {
      "dimensions": 100,
      "approximateNeighborsCount": 150,
      "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
      "algorithm_config": {
        "treeAhConfig": {
          "leafNodeEmbeddingCount": 500,
          "leafNodesToSearchPercent": 7
        }
      }
    }
  }
}
  

Elenca indici

gcloud

Prima di utilizzare i dati dei comandi riportati di seguito, apporta le seguenti sostituzioni:

  • INDEX_NAME: il nome visualizzato per l'indice.
  • LOCATION: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il tuo Google Cloud ID progetto.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud ai indexes list \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes list `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes list ^
    --region=LOCATION ^
    --project=PROJECT_ID

Dovresti ricevere una risposta simile alla seguente:

You can poll for the status of the operation for the response
to include "done": true. Use the following example to poll the status.

  $ gcloud ai operations describe 1234567890123456789 --project=my-test-project --region=us-central1

Consulta gcloud ai operations per scoprire di più sul comando describe.

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • INDEX_NAME: il nome visualizzato per l'indice.
  • LOCATION: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il tuo Google Cloud ID progetto.
  • PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto.

Metodo HTTP e URL:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
 "indexes": [
   {
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID",
     "displayName": "INDEX_NAME",
     "metadataSchemaUri": "gs://google-cloud-aiplatform/schema/matchingengine/metadata/nearest_neighbor_search_1.0.0.yaml",
     "metadata": {
       "config": {
         "dimensions": 100,
         "approximateNeighborsCount": 150,
         "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
         "featureNormType": "NONE",
         "algorithmConfig": {
           "treeAhConfig": {
             "maxLeavesToSearch": 50,
             "leafNodeCount": 10000
           }
         }
       }
     },
     "etag": "AMEw9yNU8YX5IvwuINeBkVv3yNa7VGKk11GBQ8GkfRoVvO7LgRUeOo0qobYWuU9DiEc=",
     "createTime": "2020-11-08T21:56:30.558449Z",
     "updateTime": "2020-11-08T22:39:25.048623Z"
   }
 ]
}

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

def vector_search_list_index(
    project: str, location: str
) -> List[aiplatform.MatchingEngineIndex]:
    """List vector search indexes.

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

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

    # List Indexes
    return aiplatform.MatchingEngineIndex.list()

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Java.

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.aiplatform.v1.Index;
import com.google.cloud.aiplatform.v1.IndexServiceClient;
import com.google.cloud.aiplatform.v1.IndexServiceClient.ListIndexesPagedResponse;
import com.google.cloud.aiplatform.v1.IndexServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;

public class ListIndexesSample {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String project = "YOUR_PROJECT_ID";
    String location = "YOUR_LOCATION";

    for (Index index : listIndexesSample(project, location).iterateAll()) {
      System.out.println(index.getName());
    }
  }

  public static ListIndexesPagedResponse listIndexesSample(String project, String location)
      throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IndexServiceClient indexServiceClient =
        IndexServiceClient.create(
            IndexServiceSettings.newBuilder()
                .setEndpoint(location + "-aiplatform.googleapis.com:443")
                .build())) {
      String parent = LocationName.of(project, location).toString();
      return indexServiceClient.listIndexes(parent);
    }
  }
}

Console

Segui queste istruzioni per visualizzare un elenco degli indici.

  1. Nella sezione Vertex AI della console Google Cloud , vai alla sezione Deployment e utilizzo. Seleziona Vector Search.

    Vai a Vector Search

  2. Viene visualizzato un elenco degli indici attivi.

Ottimizzazione dell'indice

L'ottimizzazione dell'indice richiede l'impostazione dei parametri di configurazione che influiscono sulle prestazioni degli indici di cui è stato eseguito il deployment, in particolare su richiamo e latenza. Questi parametri vengono impostati quando crei l'indice per la prima volta. Puoi utilizzare indici di forza bruta per misurare il richiamo.

Parametri di configurazione che influiscono sulle prestazioni

I seguenti parametri di configurazione possono essere impostati al momento della creazione dell'indice e possono influire su richiamo, latenza, disponibilità e costi quando si utilizza la ricerca vettoriale. Queste indicazioni si applicano alla maggior parte dei casi. Tuttavia, sperimenta sempre le tue configurazioni per assicurarti che funzionino per il tuo caso d'uso.

Per le definizioni dei parametri, vedi Parametri di configurazione dell'indice.

Parametro Informazioni Impatto sulle prestazioni
shardSize

Controlla la quantità di dati su ogni macchina.

Quando scegli una dimensione dello shard, stima le dimensioni del set di dati in futuro. Se le dimensioni del set di dati hanno un limite superiore, scegli la dimensione dello shard appropriata per adattarsi. Se non esiste un limite superiore o se il tuo caso d'uso è estremamente sensibile alla variabilità della latenza, ti consigliamo di scegliere una dimensione dello shard elevata.

Se configuri un numero maggiore di shard più piccoli, durante la ricerca viene elaborato un numero maggiore di risultati candidati. Un numero maggiore di shard può influire sulle prestazioni nei seguenti modi:

  • Richiamo: aumentato
  • Latenza: potenzialmente aumentata, maggiore variabilità
  • Disponibilità: le interruzioni degli shard interessano una percentuale inferiore di dati
  • Costo: può aumentare se lo stesso tipo di macchina viene utilizzato con più shard

Se configuri un numero inferiore di shard più grandi, durante la ricerca vengono elaborati meno risultati candidati. Un numero inferiore di shard può influire sulle prestazioni nei seguenti modi:

  • Richiamo: diminuito
  • Latenza: ridotta, meno variabilità
  • Disponibilità: le interruzioni degli shard interessano una percentuale maggiore di dati
  • Costo: può diminuire se viene utilizzato lo stesso tipo di macchina con meno shard
distanceMeasureType

Determina l'algoritmo utilizzato per il calcolo della distanza tra i punti dati e il vettore di query.

Le seguenti impostazioni di distanceMeasureType possono contribuire a ridurre la latenza delle query:

  • DOT_PRODUCT_DISTANCE è ottimizzato al meglio per ridurre la latenza
  • DOT_PRODUCT_DISTANCE combinato con l'impostazione FeatureNormType su UNIT_L2_NORM è consigliato per la somiglianza del coseno
leafNodeEmbeddingCount

Il numero di incorporamenti per ogni nodo foglia. Per impostazione predefinita, questo numero è impostato su 1000.

In genere, la modifica del valore di leafNodeEmbeddingCount ha un effetto minore rispetto alla modifica del valore di altri parametri.

Aumentare il numero di incorporamenti per ogni nodo foglia può ridurre la latenza, ma anche la qualità del richiamo. Può influire sulle prestazioni nei seguenti modi:

  • Richiamo: diminuito a causa di una ricerca meno mirata
  • Latenza: ridotta, a condizione che il valore non sia superiore a 15.000 per la maggior parte dei casi d'uso
  • Disponibilità: nessun impatto
  • Costo: può diminuire perché sono necessarie meno repliche per lo stesso QPS

Diminuire il numero di incorporamenti per ogni nodo foglia può influire sul rendimento nei seguenti modi:

  • Richiamo: può aumentare perché vengono raccolte più foglie target
  • Latenza: aumentata
  • Disponibilità: nessun impatto
  • Costo: può aumentare perché sono necessarie più repliche per lo stesso QPS

Utilizzare un indice di forzatura bruta per misurare il ricordo

Per ottenere i vicini più prossimi esatti, utilizza gli indici con l'algoritmo di forza bruta. L'algoritmo di forza bruta fornisce un richiamo del 100% a scapito di una latenza maggiore. L'utilizzo di un indice di forza bruta per misurare il richiamo di solito non è una buona scelta per la pubblicazione in produzione, ma potrebbe essere utile per valutare il richiamo di varie opzioni di indicizzazione offline.

Per creare un indice con l'algoritmo di forza bruta, specifica brute_force_config nei metadati dell'indice:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/indexes \
-d '{
    displayName: "'${DISPLAY_NAME}'",
    description: "'${DESCRIPTION}'",
    metadata: {
       contentsDeltaUri: "'${INPUT_DIR}'",
       config: {
          dimensions: 100,
          approximateNeighborsCount: 150,
          distanceMeasureType: "DOT_PRODUCT_DISTANCE",
          featureNormType: "UNIT_L2_NORM",
          algorithmConfig: {
             bruteForceConfig: {}
          }
       },
    },
}'

Eliminare un indice

gcloud

Prima di utilizzare i dati dei comandi riportati di seguito, apporta le seguenti sostituzioni:

  • INDEX_ID: l'ID dell'indice.
  • LOCATION: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il tuo Google Cloud ID progetto.

Esegui questo comando:

Linux, macOS o Cloud Shell

gcloud ai indexes delete INDEX_ID \
    --region=LOCATION \
    --project=PROJECT_ID

Windows (PowerShell)

gcloud ai indexes delete INDEX_ID `
    --region=LOCATION `
    --project=PROJECT_ID

Windows (cmd.exe)

gcloud ai indexes delete INDEX_ID ^
    --region=LOCATION ^
    --project=PROJECT_ID

REST

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • INDEX_ID: l'ID dell'indice.
  • LOCATION: la regione in cui utilizzi Vertex AI.
  • PROJECT_ID: il tuo Google Cloud ID progetto.
  • PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto.

Metodo HTTP e URL:

DELETE https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeleteOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-01-08T02:35:56.364956Z",
      "updateTime": "2022-01-08T02:35:56.364956Z"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

def vector_search_delete_index(
    project: str, location: str, index_name: str
) -> None:
    """Delete a vector search index.

    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".
    """
    # 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)

    # Delete the index
    index.delete()

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Java.

Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.


import com.google.cloud.aiplatform.v1.IndexName;
import com.google.cloud.aiplatform.v1.IndexServiceClient;
import com.google.cloud.aiplatform.v1.IndexServiceSettings;
import java.util.concurrent.TimeUnit;

public class DeleteIndexSample {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String project = "YOUR_PROJECT_ID";
    String location = "YOUR_LOCATION";
    String indexId = "YOUR_INDEX_ID";

    deleteIndexSample(project, location, indexId);
  }

  public static void deleteIndexSample(String project, String location, String indexId)
      throws Exception {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IndexServiceClient indexServiceClient =
        IndexServiceClient.create(
            IndexServiceSettings.newBuilder()
                .setEndpoint(location + "-aiplatform.googleapis.com:443")
                .build())) {
      String indexName = IndexName.of(project, location, indexId).toString();
      indexServiceClient.deleteIndexAsync(indexName).get(5, TimeUnit.MINUTES);
    }
  }
}

Console

Segui queste istruzioni per eliminare uno o più indici.

  1. Nella sezione Vertex AI della console Google Cloud , vai alla sezione Deployment e utilizzo. Seleziona Vector Search.

    Vai a Vector Search

  2. Viene visualizzato un elenco degli indici attivi.
  3. Per eliminare un indice, vai al menu  opzioni nella stessa riga dell'indice e seleziona Elimina.

Passaggi successivi