Nella guida rapida di Vertex AI Vector Search, scopri come creare un indice di un set di dati campione di un sito di e-commerce fittizio di abbigliamento. Per lo scopo di questa guida rapida, gli incorporamenti sono già stati creati. Questo è inteso come un modo per iniziare a creare l'indice in meno di 30 minuti.
Prerequisiti
Questo tutorial richiede un progetto Google Cloud collegato a un account . Per creare un nuovo progetto, consulta Configurare un progetto e un ambiente di sviluppo. Devi creare un progetto e configurare l'account di fatturazione.
Scegli l'ambiente di runtime
Questo tutorial può essere eseguito su Colab o Vertex AI Workbench.
- Colab: apri questo tutorial in Colab
- Vertex AI Workbench: apri questo tutorial in Vertex AI Workbench. Se è la prima volta che utilizzi Vertex AI Workbench, Nel tuo progetto Google Cloud, vai alla sezione Vertex AI Workbench della console Google Cloud e fai clic su Abilita per abilitare l'API Notebooks.
Per visualizzare questo blocco note in GitHub, consulta GitHub.
Costo per completare questa guida rapida
Il completamento di questo tutorial costa circa qualche euro. I prezzi dei servizi Google Cloud utilizzati in questo tutorial sono disponibili in pagine seguenti:
Puoi anche utilizzare il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Configurazione
Prima di iniziare a utilizzare Vertex AI, devi configurare quanto segue:
- Installare l'SDK Vertex AI per Python
- Impostare le variabili di ambiente
- Autentica (solo Colab)
- Imposta le autorizzazioni IAM
- Abilita le API
Installare l'SDK Vertex AI Python
È possibile accedere alle API Vertex AI e Cloud Storage in vari modi, tra cui l'API REST e l'SDK Vertex AI per Python. In questo tutorial, l'SDK Vertex AI per Python .
!pip install --upgrade --user google-cloud-aiplatform>=1.29.0 google-cloud-storage
Per usare i pacchetti appena installati in questo runtime Jupyter, devi riavviare il runtime, come mostrato nello snippet di codice riportato di seguito.
# Restart kernel after installs so that your environment can access the new packages
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
Variabili di ambiente
Imposta le variabili di ambiente. Se richiesto, sostituisci your-project-id
con l'ID progetto ed esegui la cella.
# get project ID
PROJECT_ID = ! gcloud config get-value project
PROJECT_ID = PROJECT_ID[0]
LOCATION = "us-central1"
if PROJECT_ID == "(unset)":
print(f"Please set the project ID manually below")
# define project information
if PROJECT_ID == "(unset)":
PROJECT_ID = "[your-project-id]"
# generate a unique id for this session
from datetime import datetime
UID = datetime.now().strftime("%m%d%H%M")
Autenticazione (solo Colab)
Se esegui questo blocco note su Colab, devi eseguire quanto segue dell'autenticazione delle celle. Questo passaggio non è obbligatorio se utilizzi Vertex AI Workbench così come è pre-autenticato.
import sys
# if it's Colab runtime, authenticate the user with Google Cloud
if 'google.colab' in sys.modules:
from google.colab import auth
auth.authenticate_user()
Impostazione delle autorizzazioni IAM
Per utilizzare la funzionalità, devi aggiungere le autorizzazioni di accesso all'account di servizio predefinito i servizi di machine learning.
- Vai alla pagina IAM nella console Google Cloud.
- Cerca l'entità per l'account di servizio Compute predefinito.
Dovrebbe avere il seguente aspetto:
compute@developer.gserviceaccount.com - Fai clic sul pulsante Modifica e concedi all'account di servizio Compute predefinito la ruoli seguenti: Amministratore utenti e archiviazione Vertex AI e Amministratore utilizzo servizi.
Abilita API
Esegui questo comando per abilitare le API per Compute Engine, Vertex AI e Cloud Storage con questo progetto Google Cloud.
! gcloud services enable compute.googleapis.com aiplatform.googleapis.com storage.googleapis.com --project {PROJECT_ID}
Prepara i dati di esempio
In questo tutorial, utilizziamo il set di dati Look, che contiene una tabella di prodotti con circa 30.000 righe di dati sintetici di prodotti per un sito di e-commerce di abbigliamento fittizio.
Da questa tabella è stato preparato il file product-embs.json
.
Questo file è in formato JSONL e ogni riga contiene un ID per l'ID prodotto, un nome per il nome del prodotto e l'incorporamento per l'incorporamento del nome del prodotto in 768 generate in precedenza con gli incorporamenti di Vertex AI per il testo.
Gli incorporamenti di testo rappresentano il significato dei nomi dei prodotti di abbigliamento. Nella in questo tutorial, utilizziamo Vector Search per completare una ricerca semantica gli elementi. Questo codice campione può essere utilizzato come base per altri suggerimenti rapidi dove puoi trovare rapidamente "altri prodotti simili a questo".
Per saperne di più su come creare incorporamenti dai dati in una tabella BigQuery e archiviarli in un file JSON, consulta Introduzione agli incorporamenti di testo + Vertex AI Vector Search.
prepara i dati su Cloud Storage
Per creare un indice con Vertex AI, posiziona il file di incorporamento in un bucket Cloud Storage. Il seguente codice completa due attività:
- Crea un bucket Cloud Storage.
- Copia il file di esempio nel bucket Cloud Storage.
BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
! gsutil mb -l $LOCATION -p $PROJECT_ID $BUCKET_URI
! gsutil cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
Per utilizzare Vector Search per eseguire query, è necessario copiare anche di incorporamento nella directory locale:
! gsutil cp "gs://github-repo/data/vs-quickstart/product-embs.json" . # for query tests
Crea ed esegui il deployment di un indice di Vector Search
Scopri come creare un indice e un endpoint indice ed eseguire il deployment all'endpoint.
Crea un indice
Ora è il momento di caricare gli incorporamenti in Vector Search.
Le API sono disponibili nel pacchetto aiplatform
dell'SDK.
# init the aiplatform package
from google.cloud import aiplatform
aiplatform.init(project=PROJECT_ID, location=LOCATION)
Crea un MatchingEngineIndex
con la sua funzione create_tree_ah_index
(Matching Engine è il nome precedente di Vector Search).
# create Index
my_index = aiplatform.MatchingEngineIndex.create_tree_ah_index(
display_name = f"vs-quickstart-index-{UID}",
contents_delta_uri = BUCKET_URI,
dimensions = 768,
approximate_neighbors_count = 10,
)
Il metodo MatchingEngineIndex.create_tree_ah_index()
crea un indice.
Se il set di dati è piccolo, questa operazione richiede meno di 10 minuti, altrimenti circa 60
minuti o più, a seconda delle dimensioni del set di dati. Puoi controllare lo stato di
la creazione degli indici sulla console Google Cloud di Vector Search
I parametri per la creazione dell'indice:
contents_delta_uri
: l'URI della directory Cloud Storage in cui hai archiviato i file JSON di incorporamentodimensions
: dimensioni delle dimensioni di ogni incorporamento. In questo caso, la durata è 768 utilizzano gli incorporamenti provenienti dall'API TextEmbeds.approximate_neighbors_count
: quanti elementi simili vuoi recuperare in casi tipici
Per scoprire di più sulla creazione dell'indice e dei parametri disponibili, consulta Creare e gestire l'indice
Crea l'endpoint indice ed esegui il deployment dell'indice
Per utilizzare l'indice, devi creare un endpoint indice. Funziona come un server che accetta richieste di query per il tuo indice.
## create `IndexEndpoint`
my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
display_name = f"vs-quickstart-index-endpoint-{UID}",
public_endpoint_enabled = True
)
Con l'endpoint indice, esegui il deployment dell'indice specificando un indice univoco di cui è stato eseguito il deployment ID.
DEPLOYED_INDEX_ID = f"vs_quickstart_deployed_{UID}"
# deploy the Index to the Index Endpoint
my_index_endpoint.deploy_index(
index = my_index, deployed_index_id = DEPLOYED_INDEX_ID
)
Se è la prima volta che esegui il deployment di questo indice in un endpoint indice, circa 30 minuti per creare e avviare automaticamente il backend. Per vedere le del deployment dell'indice nella sezione Vertex AI Nella console Google Cloud, vai alla sezione Deployment e utilizzo. Seleziona Indici
Eseguire una query con Vector Search
Nel seguente codice, trova un incorporamento per il nome di un prodotto specificato, e trova nomi di prodotti simili con Vector Search.
Ottieni un incorporamento per eseguire una query
Per prima cosa, carica il file JSON di incorporamento per creare un valore dict
di nomi di prodotto e incorporamenti.
import json
# build dicts for product names and embs
product_names = {}
product_embs = {}
with open('product-embs.json') as f:
for l in f.readlines():
p = json.loads(l)
id = p['id']
product_names[id] = p['name']
product_embs[id] = p['embedding']
Con il dizionario product_embs
, puoi specificare un ID prodotto per ottenere un incorporamento.
# Get the embedding for ID 6523 "cloudveil women's excursion short"
you can also try with other IDs such as 12711, 18090, 19536 and 11863
query_emb = product_embs['6523']
esegui una query
Passa l'incorporamento al metodo Endpoint.find_neighbors()
per trovare nomi di prodotti simili.
# run query
response = my_index_endpoint.find_neighbors(
deployed_index_id = DEPLOYED_INDEX_ID,
queries = [query_emb],
num_neighbors = 10
)
# show the results
for idx, neighbor in enumerate(response[0]):
print(f"{neighbor.distance:.2f} {product_names[neighbor.id]}")
Il metodo find_neighbors()
impiega solo millisecondi per recuperare elementi simili
anche quando ci sono miliardi di elementi sull'indice, grazie
Algoritmo ScaNN.
Vector Search supporta anche la scalabilità automatica, che può ridimensionare automaticamente
il numero di nodi in base alle esigenze dei tuoi carichi di lavoro.
esegui la pulizia
Se stai utilizzando il tuo progetto Cloud e non un progetto temporaneo su Qwiklabs, assicurati di eliminare tutti gli indici, gli endpoint indice e Cloud Storage al termine del tutorial. In caso contrario, potresti incorrere e inaspettati costi imprevisti da parte delle risorse rimanenti.
Se hai utilizzato Workbench, potrebbe essere necessario eliminare anche i blocchi note dalla console.
# wait for a confirmation
input("Press Enter to delete Index Endpoint, Index and Cloud Storage bucket:")
# delete Index Endpoint
my_index_endpoint.undeploy_all()
my_index_endpoint.delete(force = True)
# delete Index
my_index.delete()
# delete Cloud Storage bucket
! gsutil rm -r {BUCKET_URI}
Utilità
La creazione o il deployment degli indici può richiedere tempo e nello stesso tempo perdi la connessione con il runtime Colab. Se perdi la connessione, creando o eseguendo nuovamente il deployment del nuovo indice, puoi consultare console Google Cloud e utilizza quelle esistenti per continuare.
Ottieni un indice esistente
Per ottenere un oggetto indice già esistente, sostituisci your-index-id
con l'ID indice ed esegui la cella. Puoi ottenere l'ID indice controllando la
Console Google Cloud di Vector Search. Nella sezione Vertex AI
della console Google Cloud, vai
nella sezione Deployment e utilizzo. Seleziona Indici
my_index_id = "[your-index-id]"
my_index = aiplatform.MatchingEngineIndex(my_index_id)
Ottieni un endpoint indice esistente
Per ottenere un oggetto endpoint indice già esistente, sostituisci il seguente
your-index-endpoint-id
con l'ID endpoint indice ed esegui la cella.
Puoi ottenere l'endpoint indice controllando la console Google Cloud di Vector Search.
Nella sezione Vertex AI della console Google Cloud, vai a
nella sezione Deployment e utilizzo. Seleziona Endpoint indice
my_index_endpoint_id = "[your-index-endpoint-id]"
my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint(my_index_endpoint_id)