Le sezioni seguenti descrivono come configurare, creare, elencare ed eliminare gli indici.
Panoramica dell'indice
Un indice è un file o più file costituiti dai vettori di embedding. Questi vettori sono costituiti da grandi quantità di dati che vuoi implementare e su cui 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 l'aggiornamento in streaming.
Un indice batch è utile quando vuoi aggiornare l'indice in blocco con i dati memorizzati in un determinato periodo di tempo, ad esempio i sistemi elaborati settimanalmente o mensilmente. Un indice in streaming è utile quando vuoi che i dati dell'indice vengano aggiornati man mano che vengono aggiunti nuovi dati al tuo datastore, ad esempio se hai una libreria e vuoi mostrare il nuovo inventario online il prima possibile. Il tipo scelto è 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.
Creare un indice
Dimensioni indice
I dati dell'indice vengono suddivisi in parti uguali chiamate shard per l'elaborazione. Quando crei un indice, devi specificare le dimensioni degli shard da utilizzare. I seguenti sono i formati supportati:
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 dei frammenti 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 dei frammenti e il tipo di macchina influiscono sui prezzi, consulta la pagina dei prezzi di Vertex AI. Per scoprire in che modo le dimensioni dei frammenti influiscono sul rendimento, consulta Parametri di configurazione che influiscono sul rendimento.
Creare un indice per l'aggiornamento collettivo
Segui queste istruzioni per creare e implementare l'indice. Se non hai ancora preparato gli embeddings, puoi andare a Creare un indice batch vuoto. Con questa opzione, non sono richiesti dati di embedding al momento della creazione dell'indice.
Per creare un indice:
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- LOCAL_PATH_TO_METADATA_FILE: il percorso locale del file di metadati.
- INDEX_NAME: nome visualizzato dell'indice.
- LOCATION: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto Google Cloud.
Esegui il seguente 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 dei contenuti dell'indice.
- INDEX_NAME: nome visualizzato dell'indice.
- LOCATION: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto Google Cloud.
- PROJECT_NUMBER: il numero del progetto generato automaticamente.
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.
Python
Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.
Console
Segui queste istruzioni per creare un indice per gli aggiornamenti collettivi.
- Nella sezione Vertex AI della console Google Cloud, vai alla sezione Esegui il deployment e utilizza. Seleziona Ricerca vettoriale.
- Fai clic su Crea nuovo indice per aprire il riquadro Indice. Viene visualizzato il riquadro Crea un nuovo indice.
- Nel campo Nome visualizzato, fornisci un nome per identificare in modo univoco l'indice.
- Nel campo Descrizione, fornisci una descrizione dell'uso dell'indice.
- Nel campo Regione, seleziona una regione dal menu a discesa.
- Nel campo Cloud Storage, cerca e seleziona la cartella Cloud Storage in cui sono archiviati i dati vettoriali.
- Nel menu a discesa Tipo di algoritmo, seleziona il tipo di algoritmo utilizzato da Vector Search per una ricerca efficiente. Se selezioni l'algoritmo treeAh, inserisci il numero approssimativo di vicini.
- Nel campo Dimensioni, inserisci il numero di dimensioni dei vettori di input.
- Nel campo Metodo di aggiornamento, seleziona Batch.
- Nel campo Dimensione frammento, seleziona la dimensione del frammento che preferisci dal menu a discesa.
- Fai clic su Crea. Il nuovo indice viene visualizzato nell'elenco degli indici quando è pronto. Nota: il completamento del tempo di compilazione può richiedere fino a un'ora.
Creare un indice batch vuoto
Per creare ed eseguire immediatamente il deployment dell'indice, puoi creare un indice batch vuoto. Con questa opzione, non sono richiesti dati di embedding al momento della creazione dell'indice.
Per creare un indice vuoto, la richiesta è quasi identica a quella per la creazione di un indice per gli aggiornamenti batch. La differenza è che rimuovi il campo contentsDeltaUri
, poiché non colleghi una posizione dei dati. Ecco un esempio di indice batch vuoto:
Esempio di richiesta di indicizzazione vuota
{ "display_name": INDEX_NAME, "indexUpdateMethod": "BATCH_UPDATE", "metadata": { "config": { "dimensions": 100, "approximateNeighborsCount": 150, "distanceMeasureType": "DOT_PRODUCT_DISTANCE", "algorithm_config": { "treeAhConfig": { "leafNodeEmbeddingCount": 500, "leafNodesToSearchPercent": 7 } } } } }
Creare un indice per gli aggiornamenti in streaming
Segui queste istruzioni per creare e implementare l'indice di streaming. Se non hai ancora preparato gli incorporamenti, vai a Creare un indice vuoto per gli aggiornamenti in streaming. Con questa opzione, non sono richiesti dati di embedding al momento della creazione dell'indice.
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- INDEX_NAME: nome visualizzato dell'indice.
- DESCRIPTION: una descrizione dell'indice.
- INPUT_DIR: il percorso della directory Cloud Storage dei contenuti dell'indice.
- DIMENSIONS: numero di dimensioni del vettore di incorporamento.
- PROJECT_ID: il tuo ID progetto Google Cloud.
- PROJECT_NUMBER: il numero del progetto generato automaticamente.
- 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.
Python
Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.
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 in streaming, sono necessari passaggi simili alla configurazione di un indice di aggiornamento collettivo, tranne per il fatto che devi impostare indexUpdateMethod
su STREAM_UPDATE
.
- Nella sezione Vertex AI della console Google Cloud, vai alla sezione Esegui il deployment e utilizza. Seleziona Ricerca vettoriale.
- Fai clic su Crea nuovo indice per aprire il riquadro Indice. Viene visualizzato il riquadro Crea un nuovo indice.
- Nel campo Nome visualizzato, fornisci un nome per identificare in modo univoco l'indice.
- Nel campo Descrizione, fornisci una descrizione della finalità dell'indice.
- Nel campo Regione, seleziona una regione dal menu a discesa.
- Nel campo Cloud Storage, cerca e seleziona la cartella Cloud Storage in cui sono archiviati i tuoi dati vettoriali.
- 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.
- Nel campo Dimensioni, inserisci il numero di dimensioni dei vettori di input.
- Nel campo Metodo di aggiornamento, seleziona Stream.
- Nel campo Dimensione frammento, seleziona la dimensione del frammento che preferisci dal menu a discesa.
- Fai clic su Crea. Il nuovo indice viene visualizzato nell'elenco degli indici quando è pronto. Nota: il completamento del tempo di compilazione può richiedere fino a un'ora.
Creare un indice vuoto per gli aggiornamenti in streaming
Per creare ed eseguire immediatamente il deployment dell'indice, puoi creare un indice vuoto per lo streaming. Con questa opzione, non sono richiesti dati di embedding al momento della creazione dell'indice.
Per creare un indice vuoto, la richiesta è quasi identica a quella per la creazione di un indice per lo streaming. La differenza è che rimuovi il campo contentsDeltaUri
, poiché non colleghi una posizione dei dati. Ecco un esempio di indice di streaming vuoto:
Esempio di richiesta di indicizzazione 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, effettua le seguenti sostituzioni:
- INDEX_NAME: nome visualizzato dell'indice.
- LOCATION: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto Google Cloud.
Esegui il seguente 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: nome visualizzato dell'indice.
- LOCATION: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto Google Cloud.
- PROJECT_NUMBER: il numero del progetto generato automaticamente.
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 per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.
Console
Segui queste istruzioni per visualizzare un elenco dei tuoi indici.
- Nella sezione Vertex AI della console Google Cloud, vai alla sezione Esegui il deployment e utilizza. Seleziona Ricerca vettoriale.
- Viene visualizzato un elenco degli indici attivi.
Ottimizzazione dell'indice
L'ottimizzazione dell'indice richiede l'impostazione dei parametri di configurazione che influiscono sul rendimento degli indici di cui è stato eseguito il deployment, in particolare su richiamo e latenza. Questi parametri vengono impostati quando viene creato l'indice per la prima volta. Puoi utilizzare indici con forza bruta per misurare il richiamo.
Parametri di configurazione che influiscono sul rendimento
I seguenti parametri di configurazione possono essere impostati al momento della creazione dell'indice e possono influire su richiamo, latenza, disponibilità e costo quando si utilizza la ricerca di vettori. Queste indicazioni si applicano alla maggior parte dei casi. Tuttavia, fai sempre esperimenti con le configurazioni per assicurarti che funzionino per il tuo caso d'uso.
Per le definizioni dei parametri, consulta Parametri di configurazione dell'indice.
Parametro | Informazioni | Impatto sulle prestazioni |
---|---|---|
shardSize
|
Controlla la quantità di dati su ogni macchina. Quando scegli le dimensioni di uno shard, stima le dimensioni del tuo set di dati in futuro. Se le dimensioni del set di dati hanno un limite superiore, scegli la dimensione dello shard appropriata per adattarlo. 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 grande. |
Se configuri un numero maggiore di frammenti 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:
Se configuri un numero inferiore di shard più grandi, durante la ricerca vengono elaborati meno risultati candidati. Un numero inferiore di shard può influire sul rendimento nei seguenti modi:
|
distanceMeasureType
|
Determina l'algoritmo utilizzato per il calcolo della distanza tra i punti dati e il vettore di query. |
Le seguenti impostazioni
|
leafNodeEmbeddingCount
|
Il numero di incorporamenti per ogni nodo foglia. Per impostazione predefinita, questo valore è impostato su 1000.
In genere, la modifica del valore di |
L'aumento del numero di incorporamenti per ciascun nodo foglia può ridurre la latenza, ma anche la qualità del recupero. Può influire sul rendimento nei seguenti modi:
La riduzione del numero di incorporamenti per ciascun nodo foglia può influire sul rendimento nei seguenti modi:
|
Utilizzo di un indice di forza bruta per misurare il richiamo
Per ottenere i vicini più prossimi esatti, utilizza gli indici con l'algoritmo di forza bruta. L'algoritmo di forza bruta offre un recupero del 100% a scapito di una maggiore latenza. L'utilizzo di un indice di forza bruta per misurare il richiamo in genere non è una buona scelta per la pubblicazione di annunci di 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, effettua le seguenti sostituzioni:
- INDEX_ID: l'ID dell'indice.
- LOCATION: la regione in cui utilizzi Vertex AI.
- PROJECT_ID: il tuo ID progetto Google Cloud.
Esegui il seguente 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 ID progetto Google Cloud.
- PROJECT_NUMBER: il numero del progetto generato automaticamente.
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 per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.
Console
Segui queste istruzioni per eliminare uno o più indici.
- Nella sezione Vertex AI della console Google Cloud, vai alla sezione Esegui il deployment e utilizza. Seleziona Ricerca vettoriale.
- Viene visualizzato un elenco degli indici attivi.
- Per eliminare un indice, vai al menu Opzioni nella stessa riga dell'indice e seleziona Elimina.
Passaggi successivi
- Scopri di più sui parametri di configurazione dell'indice
- Scopri come eseguire il deployment e gestire gli endpoint degli indici pubblici
- Scopri come implementare e gestire gli endpoint dell'indice in una rete VPC
- Scopri come aggiornare e ricostruire l'indice
- Scopri come monitorare un indice