Kurzanleitung für die Vektorsuche

In der Kurzanleitung für Vertex AI Vektorsuche erfahren Sie, wie Sie einen Index aus einem Beispiel-Dataset von einer fiktiven E-Commerce-Website für Kleidungen erstellen. Für die Zwecke dieser Kurzanleitung wurden die Einbettungen bereits erstellt. Diese Kurzanleitung soll Ihnen den Einstieg in die Erstellung und Bereitstellung eines Index in weniger als 30 Minuten erleichtern.

Vorbereitung

Für diese Anleitung ist ein Google Cloud-Projekt erforderlich, das mit einem Rechnungskonto verknüpft ist. Informationen zum Erstellen eines neuen Projekts finden Sie unter Projekt- und Entwicklungsumgebung einrichten. Sie müssen ein Projekt erstellen und Ihr Rechnungskonto einrichten.

Laufzeitumgebung auswählen

Diese Anleitung kann entweder auf Colab oder Vertex AI Workbench ausgeführt werden.

  • Colab: Diese Anleitung in Colab öffnen
  • Vertex AI Workbench: Öffnen Sie diese Anleitung in Vertex AI Workbench. Wenn Sie Vertex AI Workbench zum ersten Mal in Ihrem Google Cloud-Projekt verwenden, rufen Sie in der Google Cloud Console den Abschnitt „Vertex AI Workbench“ auf und klicken Sie auf Aktivieren, um die Notebooks API zu aktivieren.

Informationen zum Anzeigen dieses Notebooks in GitHub finden Sie unter GitHub.

Kosten für diesen Schnellstart

Das Durcharbeiten dieser Anleitung kostet etwa einige US-Dollar. Die Preise für die in dieser Anleitung verwendeten Google Cloud-Dienste sind auf den folgenden Seiten verfügbar:

Sie können auch den Preisrechner verwenden, um auf Basis der voraussichtlichen Nutzung eine Kostenschätzung zu erstellen.

Einrichtung

Bevor Sie Vertex AI verwenden können, müssen Sie Folgendes einrichten:

Vertex AI SDK für Python installieren

Auf Vertex AI und Cloud Storage APIs kann auf verschiedene Arten zugegriffen werden, einschließlich der REST API und des Vertex AI SDK für Python. In dieser Anleitung wird das Vertex AI SDK für Python verwendet.

!pip install --upgrade --user google-cloud-aiplatform>=1.29.0 google-cloud-storage

Um die neu installierten Pakete in dieser Jupyter-Laufzeit zu verwenden, müssen Sie die Laufzeit neu starten, wie im folgenden Code-Snippet gezeigt.

# Restart kernel after installs so that your environment can access the new packages
import IPython

app = IPython.Application.instance()
app.kernel.do_shutdown(True)

Umgebungsvariablen

Legen Sie die Umgebungsvariablen fest. Wenn Sie dazu aufgefordert werden, ersetzen Sie your-project-id durch Ihre Projekt-ID und führen Sie die Zelle aus.

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

Authentifizierung (nur Colab)

Wenn Sie dieses Notebook auf Colab ausführen, müssen Sie die folgende Zellenauthentifizierung ausführen. Dieser Schritt ist nicht erforderlich, wenn Sie Vertex AI Workbench verwenden, da es vorab authentifiziert ist.

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()

IAM-Berechtigungen festlegen

Sie müssen dem Standarddienstkonto Zugriffsberechtigungen erteilen, um die Dienste verwenden zu können.

  1. Rufen Sie in der Google Cloud Console die IAM-Seite auf.
  2. Suchen Sie nach dem Hauptkonto für das Standard-Compute-Dienstkonto. Er sollte so aussehen: compute@developer.gserviceaccount.com
  3. Klicken Sie auf die Schaltfläche „Bearbeiten“ und weisen Sie dem Compute-Standarddienstkonto die folgenden Rollen zu: Vertex AI-Nutzer und Storage-Administrator und Service Usage-Administrator.

APIs aktivieren

Führen Sie den folgenden Befehl aus, um APIs für Compute Engine, Vertex AI und Cloud Storage mit diesem Google Cloud-Projekt zu aktivieren.

! gcloud services enable compute.googleapis.com aiplatform.googleapis.com storage.googleapis.com --project {PROJECT_ID}

Beispieldaten vorbereiten

In dieser Anleitung verwenden wir das Dataset „TheLook“, das eine Produkttabelle mit etwa 30.000 Zeilen synthetischer Produktdaten für eine fiktive E-Commerce-Website für Kleidungen enthält.

Beispiel-Dataset

In dieser Tabelle haben wir die Datei product-embs.json vorbereitet.

Beispiele für Einbettungen von Produkten

Diese Datei hat das JSONL-Format und jede Zeile hat eine ID für die Produkt-ID, einen Namen für den Produktnamen und eine Einbettung für den Einbettung des Produktnamens in 768 Dimensionen, die zuvor mit Vertex AI-Einbettungen für Text generiert wurden. eine

Die Texteinbettungen stellen die Bedeutung der Produktnamen der Kleidung dar. In dieser Anleitung verwenden wir die Vektorsuche, um eine semantische Suche der Elemente abzuschließen. Dieser Beispielcode kann als Grundlage für andere schnelle Empfehlungssysteme verwendet werden, in denen Sie schnell „andere Produkte wie dieses“ finden können.

Weitere Informationen zum Erstellen der Einbettungen aus den Daten in einer BigQuery-Tabelle und zum Speichern dieser Daten in einer JSON-Datei finden Sie unter Erste Schritte mit Texteinbettungen + Vertex AI Vektorsuche.

Daten in Cloud Storage vorbereiten

Um einen Index mit Vertex AI zu erstellen, platzieren Sie die Einbettungsdatei in einem Cloud Storage-Bucket. Mit dem folgenden Code werden zwei Aufgaben ausgeführt:

  1. Erstellt einen Cloud Storage-Bucket.
  2. Kopiert die Beispieldatei in Ihren Cloud Storage-Bucket.
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

Damit Sie mit Vector Search Abfragen ausführen können, müssen Sie auch die Einbettungsdatei in das lokale Verzeichnis kopieren:

! gsutil cp "gs://github-repo/data/vs-quickstart/product-embs.json" . # for query tests

Vektorsuchindex erstellen und bereitstellen

Erfahren Sie, wie Sie einen Index erstellen, einen Index-Endpunkt erstellen und dann den Index auf dem Endpunkt bereitstellen.

Index erstellen

Jetzt ist es an der Zeit, die Einbettungen in die Vektorsuche zu laden. Die APIs sind im Paket aiplatform des SDK verfügbar.

# init the aiplatform package
from google.cloud import aiplatform
aiplatform.init(project=PROJECT_ID, location=LOCATION)

Erstellen Sie einen MatchingEngineIndex mit der Funktion create_tree_ah_index (Matching Engine ist der vorherige Name der Vektorsuche).

# 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,
)

Mit der Methode MatchingEngineIndex.create_tree_ah_index() wird ein Index erstellt. Dies dauert weniger als 10 Minuten, wenn das Dataset klein ist, je nach Größe des Datasets etwa 60 Minuten. Sie können den Status der Indexerstellung in der Google Cloud Console für Vector Search prüfen.

Indexe ansehen

Die Parameter zum Erstellen des Index:

  • contents_delta_uri: der URI des Cloud Storage-Verzeichnisses, in dem Sie die JSON-Einbettungsdateien gespeichert haben.
  • dimensions: Dimensionsgröße der einzelnen Einbettungen. In diesem Fall beträgt der Wert 768, da Sie die Einbettungen aus der API für Texteinbettungen verwenden.
  • approximate_neighbors_count: Wie viele ähnliche Elemente Sie in typischen Fällen abrufen möchten

Weitere Informationen zum Erstellen des Index und der verfügbaren Parameter finden Sie unter Index erstellen und verwalten.

Indexendpunkt erstellen und Index bereitstellen

Zur Verwendung des Index müssen Sie einen Indexendpunkt erstellen. Sie funktioniert als Serverinstanz, die Abfrageanfragen für Ihren Index akzeptiert.

## create `IndexEndpoint`
my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
    display_name = f"vs-quickstart-index-endpoint-{UID}",
    public_endpoint_enabled = True
)

Stellen Sie mit dem Indexendpunkt den Index bereit, indem Sie eine eindeutige bereitgestellte Index-ID angeben.

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
)

Wenn Sie diesen Index zum ersten Mal auf einem Indexendpunkt bereitstellen, kann es etwa 30 Minuten dauern, bis das Backend automatisch erstellt und initiiert wird. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden, um den Status der Indexbereitstellung zu sehen. Wählen Sie Indexe aus.

Siehe Indexe

Abfrage mit Vektorsuche ausführen

Im folgenden Code wird eine Einbettung für einen bestimmten Produktnamen gesucht, mit der Vektorsuche ähnliche Produktnamen gefunden.

Einbettung zum Ausführen einer Abfrage verwenden

Laden Sie zuerst die Einbettungs-JSON-Datei, um einen dict mit Produktnamen und Einbettungen zu erstellen.

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']

Mit dem Wörterbuch product_embs können Sie eine Produkt-ID angeben, um eine Einbettung dafür abzurufen.

 # 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']

Abfrage ausführen

Übergeben Sie die Einbettung an die Methode Endpoint.find_neighbors(), um ähnliche Produktnamen zu finden.

# 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]}")

Dank des ScaNN-Algorithmus benötigt die find_neighbors()-Methode nur Millisekunden zum Abrufen ähnlicher Elemente, selbst wenn Milliarden von Elementen im Index vorhanden sind. Die Vektorsuche unterstützt auch Autoscaling, mit dem die Anzahl der Knoten automatisch an die Anforderungen Ihrer Arbeitslasten angepasst werden kann.

Bereinigen

Wenn Sie Ihr eigenes Cloud-Projekt und kein temporäres Projekt in Qwiklabs verwenden, löschen Sie alle Indexe, Indexendpunkte und Cloud Storage-Buckets, nachdem Sie diese Anleitung abgeschlossen haben. Andernfalls können unerwartete Kosten für die verbleibenden Ressourcen auftreten.

Wenn Sie Workbench verwendet haben, müssen Sie möglicherweise auch die Notebooks aus der Console löschen.


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

Dienstprogramme

Das Erstellen oder Bereitstellen von Indexen kann einige Zeit in Anspruch nehmen. In dieser Zeit kann die Verbindung zur Colab-Laufzeit unterbrochen werden. Wenn die Verbindung unterbrochen wird, statt den neuen Index neu zu erstellen oder bereitzustellen, können Sie die Google Cloud Console in Vector Search prüfen und mit den vorhandenen Indexen fortfahren.

Vorhandenen Index abrufen

Um ein bereits vorhandenes Indexobjekt abzurufen, ersetzen Sie die folgende your-index-id durch die Index-ID und führen Sie die Zelle aus. Sie können die Index-ID abrufen, indem Sie in der Google Cloud Console die Vektorsuche prüfen. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Indexe aus.

Siehe Indexe

my_index_id = "[your-index-id]"
my_index = aiplatform.MatchingEngineIndex(my_index_id)

Vorhandenen Indexendpunkt abrufen

Um ein bereits vorhandenes Indexendpunktobjekt abzurufen, ersetzen Sie die folgende your-index-endpoint-id durch die Indexendpunkt-ID und führen Sie die Zelle aus. Sie können den Indexendpunkt über die Google Cloud Console für Vector Search abrufen. Wechseln Sie im Abschnitt „Vertex AI“ der Google Cloud Console zum Abschnitt Bereitstellen und verwenden. Wählen Sie Indexendpunkte aus.

Siehe Indexendpunkte

my_index_endpoint_id = "[your-index-endpoint-id]"
my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint(my_index_endpoint_id)