Kubernetes'te AlloyDB Omni ve EmbeddingGemma.

1. Giriş

Bu codelab'de, AlloyDB Omni'yi GKE'ye dağıtmayı ve aynı Kubernetes kümesine dağıtılan açık yerleştirme modeliyle kullanmayı öğreneceksiniz. Bir modelin aynı GKE kümesindeki veritabanı örneğinin yanına dağıtılması, gecikmeyi ve üçüncü taraf hizmetlerine olan bağımlılıkları azaltır. Ayrıca, verilerin kuruluş dışına çıkmaması gerektiğinde ve üçüncü taraf hizmetlerinin kullanımına izin verilmediğinde güvenlik ve uygunluk tarafından yerel dağıtım zorunlu kılınabilir.

6a0381e6e4a8d7f8.png

Ön koşullar

  • Google Cloud ve konsol hakkında temel düzeyde bilgi sahibi olmak
  • Kubernetes ve GKE hakkında temel bilgiler
  • Komut satırı arayüzü ve Cloud Shell'de temel beceriler

Neler öğreneceksiniz?

  • AlloyDB Omni'yi Google Kubernetes kümesine dağıtma
  • AlloyDB Omni'ye bağlanma
  • AlloyDB Omni'ye veri yükleme
  • GKE'ye açık yerleştirme modeli dağıtma
  • AlloyDB Omni'ye yerleştirme modeli kaydetme
  • Semantik arama için yerleştirilmiş öğeler oluşturma
  • AlloyDB Omni'de semantik arama için oluşturulan yerleştirmeleri kullanma
  • AlloyDB'de vektör dizinleri oluşturma ve kullanma

Gerekenler

  • Google Cloud hesabı ve Google Cloud projesi
  • Google Cloud Console ve Cloud Shell'i destekleyen Chrome gibi bir web tarayıcısı

2. Kurulum ve Gereksinimler

Proje Kurulumu

  1. Google Cloud Console'da oturum açın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

İş veya okul hesabı yerine kişisel hesap kullanıyorsanız.

  1. Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Google Cloud Console'da yeni bir proje oluşturmak için üstbilgide bir pop-up pencere açacak olan Proje seç düğmesini tıklayın.

295004821bab6a87.png

Proje seçin penceresinde Yeni Proje düğmesini tıklayın. Bu işlem, yeni proje için bir iletişim kutusu açar.

37d264871000675d.png

İletişim kutusunda tercih ettiğiniz proje adını girin ve konumu seçin.

96d86d3d5655cdbe.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Proje adı, Google API'leri tarafından kullanılmaz ve istediğiniz zaman değiştirilebilir.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Google Cloud Console, benzersiz bir kimliği otomatik olarak oluşturur ancak bu kimliği özelleştirebilirsiniz. Oluşturulan kimliği beğenmediyseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi girerek kullanılabilirliğini kontrol edebilirsiniz. Çoğu codelab'de, genellikle PROJECT_ID yer tutucusuyla tanımlanan proje kimliğinize başvurmanız gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.

Faturalandırmayı etkinleştirme

Kişisel faturalandırma hesabı oluşturma

Faturalandırmayı Google Cloud kredilerini kullanarak ayarladıysanız bu adımı atlayabilirsiniz.

Kişisel faturalandırma hesabı oluşturmak için Cloud Console'da faturalandırmayı etkinleştirmek üzere buraya gidin.

Bazı notlar:

  • Bu laboratuvarı tamamlamak için 3 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
  • Daha fazla ücret ödememek için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
  • Yeni kullanıcılar 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Cloud Shell'i etkinleştirme

Alternatif olarak G, ardından S tuşuna basabilirsiniz. Bu sıra, Google Cloud Console'da veya bu bağlantıyı kullanıyorsanız Cloud Shell'i etkinleştirir.

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Ortamın bağlandığını gösteren Google Cloud Shell terminalinin ekran görüntüsü

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.

3. Başlamadan önce

API'yi etkinleştirme

Çıkış:

AlloyDB Omni ve açık model dağıtımları için Google Kubernetes Engine'i (GKE) kullanmak istiyorsanız Google Cloud projenizde ilgili API'leri etkinleştirmeniz gerekir.

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun:

PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID

Cloud Shell yapılandırmasında tanımlanmamışsa aşağıdaki komutları kullanarak ayarlayın.

export PROJECT_ID=<your project>
gcloud config set project $PROJECT_ID

Gerekli tüm hizmetleri etkinleştirin:

gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com

Beklenen çıktı

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=test-project-001-402417
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

API'lerle tanışın

  • Kubernetes Engine API (container.googleapis.com), Google Kubernetes Engine (GKE) kümeleri oluşturmanıza ve yönetmenize olanak tanır. Google'ın altyapısını kullanarak container mimarisine alınmış uygulamalarınızı dağıtmanız, yönetmeniz ve ölçeklendirmeniz için yönetilen bir ortam sunar.
  • Compute Engine API (compute.googleapis.com), sanal makineler (VM'ler), kalıcı diskler ve ağ ayarları oluşturup yönetmenize olanak tanır. İş yüklerinizi çalıştırmak ve birçok yönetilen hizmetin temel altyapısını barındırmak için gereken temel Hizmet Olarak Altyapı (IaaS) temelini sağlar.

4. GKE'de AlloyDB Omni'yi dağıtma

AlloyDB Omni'yi GKE'ye dağıtmak için AlloyDB Omni operatör gereksinimleri bölümünde listelenen koşulları karşılayan bir Kubernetes kümesi hazırlamamız gerekir.

GKE kümesi oluşturma

AlloyDB Omni örneği içeren bir pod'u dağıtmak için yeterli havuz yapılandırmasına sahip standart bir GKE kümesi dağıtmamız gerekir. AlloyDB Omni için en az 2 CPU ve 8 GB RAM gerekir. Ayrıca operatör ve izleme hizmetleri kapsayıcıları için biraz alan olması gerekir. e2-standard-4 sanal makine türünü kullanacağız.

Dağıtımınız için ortam değişkenlerini ayarlayın.

export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
export MACHINE_TYPE=e2-standard-4

Ardından, GKE standart kümesini oluşturmak için gcloud'u kullanırız.

gcloud container clusters create ${CLUSTER_NAME} \
  --project=${PROJECT_ID} \
  --region=${LOCATION} \
  --workload-pool=${PROJECT_ID}.svc.id.goog \
  --release-channel=rapid \
  --machine-type=${MACHINE_TYPE} \
  --num-nodes=1

Beklenen konsol çıkışı:

student@cloudshell:~ (gleb-test-short-001-415614)$ export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
export MACHINE_TYPE=n2-highmem-2
Your active configuration is: [gleb-test-short-001-415614]
student@cloudshell:~ (gleb-test-short-001-415614)$ gcloud container clusters create ${CLUSTER_NAME} \
  --project=${PROJECT_ID} \
  --region=${LOCATION} \
  --workload-pool=${PROJECT_ID}.svc.id.goog \
  --release-channel=rapid \
  --machine-type=${MACHINE_TYPE} \
  --num-nodes=1
Note: The Kubelet readonly port (10255) is now deprecated. Please update your workloads to use the recommended alternatives. See https://cloud.google.com/kubernetes-engine/docs/how-to/disable-kubelet-readonly-port for ways to check usage and for migration instructions.
Note: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s).
Creating cluster alloydb-ai-gke in us-central1..


NAME: omni01
ZONE: us-central1-a
MACHINE_TYPE: e2-standard-4
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.3
EXTERNAL_IP: 35.232.157.123
STATUS: RUNNING
student@cloudshell:~ (gleb-test-short-001-415614)$ 

Kümeyi hazırlama

Kubernetes için yerel sertifika yöneticisi olan cert-manager hizmeti gibi gerekli bileşenleri yüklememiz gerekir. cert-manager yükleme ile ilgili dokümandaki adımları uygulayabiliriz.

Varsayılan olarak Cloud Shell'de yüklü olan Kubernetes komut satırı aracı kubectl'yi kullanırız. Yardımcı programı kullanmadan önce kümemiz için kimlik bilgilerini almamız gerekir.

gcloud container clusters get-credentials ${CLUSTER_NAME} --region=${LOCATION}

Artık cert-manager'ı yüklemek için kubectl'yi kullanabiliriz:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.2/cert-manager.yaml

Beklenen konsol çıkışı(redaksiyonlu):

student@cloudshell:~$ kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml
namespace/cert-manager created
customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
...
validatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created

AlloyDB Omni'yi yükleme

AlloyDB Omni operatörü, Helm yardımcı programı kullanılarak yüklenebilir.

AlloyDB Omni operatörünü yüklemek için aşağıdaki komutu çalıştırın:

export GCS_BUCKET=alloydb-omni-operator
export HELM_PATH=$(gcloud storage cat gs://$GCS_BUCKET/latest)
export OPERATOR_VERSION="${HELM_PATH%%/*}"
gcloud storage cp gs://$GCS_BUCKET/$HELM_PATH ./ --recursive
helm install alloydbomni-operator alloydbomni-operator-${OPERATOR_VERSION}.tgz \
--create-namespace \
--namespace alloydb-omni-system \
--atomic \
--timeout 5m

Beklenen konsol çıkışı(redaksiyonlu):

student@cloudshell:~$ gcloud storage cp gs://$GCS_BUCKET/$HELM_PATH ./ --recursive
Copying gs://alloydb-omni-operator/1.2.0/alloydbomni-operator-1.2.0.tgz to file://./alloydbomni-operator-1.2.0.tgz
  Completed files 1/1 | 126.5kiB/126.5kiB
student@cloudshell:~$ helm install alloydbomni-operator alloydbomni-operator-${OPERATOR_VERSION}.tgz \
> --create-namespace \
> --namespace alloydb-omni-system \
> --atomic \
> --timeout 5m
NAME: alloydbomni-operator
LAST DEPLOYED: Mon Jan 20 13:13:20 2025
NAMESPACE: alloydb-omni-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
student@cloudshell:~$

AlloyDB Omni operatörü yüklendiğinde veritabanı kümemizin dağıtımına devam edebiliriz.

Aşağıda, googleMLExtension parametresinin etkinleştirildiği ve dahili (özel) yük dengeleyicinin kullanıldığı bir dağıtım manifesti örneği verilmiştir:

apiVersion: v1
kind: Secret
metadata:
  name: db-pw-my-omni
type: Opaque
data:
  my-omni: "VmVyeVN0cm9uZ1Bhc3N3b3Jk"
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: my-omni
spec:
  databaseVersion: "15.13.0"
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-my-omni
    features:
      googleMLExtension:
        enabled: true
    resources:
      cpu: 1
      memory: 8Gi
      disks:
      - name: DataDisk
        size: 20Gi
        storageClass: standard
    dbLoadBalancerOptions:
      annotations:
        networking.gke.io/load-balancer-type: "internal"
  allowExternalIncomingTraffic: true

Şifrenin gizli değeri, "VeryStrongPassword" şifre kelimesinin Base64 gösterimidir. Daha güvenilir yöntem, şifre değerini depolamak için Google Secret Manager'ı kullanmaktır. Bu konu hakkında daha fazla bilgiyi dokümanlarda bulabilirsiniz.

Manifest'i bir sonraki adımda uygulanacak şekilde my-omni.yaml olarak kaydedin. Cloud Shell'deyseniz terminalin sağ üst kısmındaki "Open Editor" (Düzenleyiciyi Aç) düğmesini kullanarak düzenleyiciyi açabilirsiniz.

3ce01b9ff3ddb8af.png

Dosyayı my-omni.yaml adıyla kaydettikten sonra "Open Terminal" (Terminali Aç) düğmesine basarak terminale geri dönün.

7f212c2d2bcafa2b.png

kubectl yardımcı programını kullanarak my-omni.yaml manifestini kümeye uygulayın:

kubectl apply -f my-omni.yaml

Beklenen konsol çıkışı:

secret/db-pw-my-omni created
dbcluster.alloydbomni.dbadmin.goog/my-omni created

kubectl yardımcı programını kullanarak my-omni küme durumunuzu kontrol edin:

kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default

Dağıtım sırasında küme farklı aşamalardan geçer ve sonunda DBClusterReady durumuyla sonuçlanır.

Beklenen konsol çıkışı:

$ kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default
NAME      PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE   HAREADYSTATUS   HAREADYREASON
my-omni   10.131.0.33        Ready          DBClusterReady

AlloyDB Omni'ye bağlanma

Kubernetes kapsülünü kullanarak bağlanma

Küme hazır olduğunda AlloyDB Omni örneği pod'unda PostgreSQL istemci ikililerini kullanabiliriz. Pod kimliğini buluruz ve ardından doğrudan poda bağlanıp istemci yazılımını çalıştırmak için kubectl'yi kullanırız. my-omni.yaml manifest dosyasındaki Kubernetes gizli anahtarı aracılığıyla ayarlanan şifre VeryStrongPassword'dür:

DB_CLUSTER_NAME=my-omni
DB_CLUSTER_NAMESPACE=default
DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=$DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -n $DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -n $DB_CLUSTER_NAMESPACE -c database -- psql -h localhost -U postgres

Örnek konsol çıktısı:

DB_CLUSTER_NAME=my-omni
DB_CLUSTER_NAMESPACE=default
DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=$DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -n $DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -n $DB_CLUSTER_NAMESPACE -c database -- psql -h localhost -U postgres
Password for user postgres: 
psql (15.7)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.

postgres=#

5. GKE'de yapay zeka modeli dağıtma

AlloyDB Omni yapay zeka entegrasyonunu yerel modellerle test etmek için kümeye bir model dağıtmamız gerekir. Google'ın EmbeddingGemma modelini kullanacağız.

Model için düğüm havuzu oluşturma

Modeli çalıştırmak için çıkarım çalıştırmak üzere bir düğüm havuzu hazırlamamız gerekir. Yalnızca CPU havuzu veya GPU hızlandırıcıları olan bir havuz kullanarak çalıştırabiliriz. Kaynaklar için eşzamanlılık oranının yüksek olması nedeniyle bazı bölgelerde yalnızca CPU yaklaşımı daha uygun olabilir. Laboratuvarımızda CPU yaklaşımını kullanacağız ancak performans açısından en iyi yaklaşım, L4 Nvidia hızlandırıcı ile g2-standard-8 gibi bir düğüm yapılandırması kullanan grafik hızlandırıcılar içeren bir havuzdur.

CPU tabanlı düğüm havuzu

e2-standard-32 düğümlerine sahip bir düğüm havuzu oluşturun. Kaynak tasarrufu için çekme işlemimizi tek bir düğümle sınırlayacağız.

export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
gcloud container node-pools create cpupool \
  --project=${PROJECT_ID} \
  --location=${LOCATION} \
  --node-locations=${LOCATION}-a \
  --cluster=${CLUSTER_NAME} \
  --machine-type=c3-standard-8 \
  --num-nodes=1

Beklenen çıktı

student@cloudshell$ export PROJECT_ID=$(gcloud config get project)
Your active configuration is: [pant]
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
student@cloudshell$ gcloud container node-pools create cpupool \
>   --project=${PROJECT_ID} \
>   --location=${LOCATION} \
>   --node-locations=${LOCATION}-a \
>   --cluster=${CLUSTER_NAME} \
>   --machine-type=c3-standard-8 \
>   --num-nodes=1
Creating node pool cpupool...done.
Created [https://container.googleapis.com/v1/projects/gleb-test-short-003-483115/zones/us-central1/clusters/alloydb-ai-gke/nodePools/cpupool].
NAME     MACHINE_TYPE    DISK_SIZE_GB  NODE_VERSION
cpupool  c3-standard-8  100           1.34.1-gke.3355002

Hugging Face jetonu alma

Bu laboratuvarda, EmbeddingGemma modelini dağıtmak için Hugging Face ile ortaklık yapıyoruz. Bunu yapmak için Hugging Face jetonu almamız gerekiyor.

Daha önce jeton almadıysanız yeni bir jeton oluşturmak için aşağıdaki adımları uygulayın.

  1. Sağ üst köşedeki Giriş Yap veya Kaydol bağlantılarını kullanarak Hugging Face sitesinde oturum açın ya da kaydolun.
  2. Profiliniz -> Erişim Jetonları'nı tıklayın.
  3. Kimliğinizi doğrulayın
  4. Yeni jeton oluştur'u tıklayın.
  5. Jetonunuz için bir ad seçin
  6. Jeton için bir rol seçin. En azından Okuma ayrıcalığına sahip olmanız gerekir.
  7. Sayfanın alt kısmındaki "Jeton oluştur"u tıklayın.
  8. Oluşturulan jetonu kopyalayın ve daha sonra kullanmak üzere kaydedin.

Ayrıca, https://huggingface.co/google/embeddinggemma-300m sayfasında Hugging Face'teki EmbeddingGemma ile ilgili dosyalara ve içeriklere erişmek için koşulları kabul etmeniz gerekir.

Jetonu kullanarak Kubernetes gizli anahtarı oluşturma

Cloud Shell oturumunda aşağıdaki komutu çalıştırın (HF_TOKEN değerini HF jetonunuzla değiştirin).

export HF_TOKEN=hf_QjgW...lfrXF
kubectl create secret generic hf-secret \
    --from-literal=hf_api_token=$HF_TOKEN \
    --dry-run=client -o yaml | kubectl apply -f -

Dağıtım Manifestini Hazırlama

Modeli dağıtmak için bir dağıtım manifestosu hazırlamamız gerekir.

Hugging Face'in EmbeddingGemma modelini kullanıyoruz. Model kartını buradan inceleyebilirsiniz. Modeli dağıtmak için Hugging Face'in talimatlarına ve GitHub'daki dağıtım paketine dayalı bir yaklaşım kullanacağız.

Paketi GitHub'dan kopyalama

git clone https://github.com/huggingface/Google-Cloud-Containers

CPU düğümlerinde tei (text embedding interface) için manifesti ayarlayın. Model, resim ve doğru kaynak ayırma da dahil olmak üzere çeşitli parametreleri değiştirmemiz ve yapılandırmaya Hugging Face jetonu gizli anahtarını eklememiz gerekiyor.

Manifest dosyasını düzenleyin (kullanılabilir herhangi bir düzenleyiciyi kullanarak)

vi Google-Cloud-Containers/examples/gke/tei-deployment/cpu-config/deployment.yaml

CPU tabanlı bir havuzda dağıtım için düzeltilmiş bir manifest aşağıda verilmiştir.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tei-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tei-server
  template:
    metadata:
      labels:
        app: tei-server
        hf.co/model: Google--embeddinggemma-300m
        hf.co/task: text-embeddings
    spec:
      containers:
        - name: tei-container
          image: ghcr.io/huggingface/text-embeddings-inference:cpu-latest
          #image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-embeddings-inference-cpu.1-4:latest
          resources:
            requests:
              cpu: "6"
              memory: "24Gi"
            limits:
              cpu: "6"
              memory: "24Gi"
          env:
            - name: MODEL_ID
              value: google/embeddinggemma-300m
            - name: NUM_SHARD
              value: "1"
            - name: PORT
              value: "8080"
            - name: HF_TOKEN
              valueFrom:
                secretKeyRef:
                  name: hf-secret
                  key: hf_api_token
          volumeMounts:
            - mountPath: /tmp
              name: tmp
      volumes:
        - name: tmp
          emptyDir: {}
      nodeSelector:
        #cloud.google.com/compute-class: "Performance"
        cloud.google.com/machine-family: "c3"

Modeli Dağıtma

CPU dağıtımları için değiştirilmiş manifesti uygulayarak modeli dağıtın.

kubectl apply -f Google-Cloud-Containers/examples/gke/tei-deployment/cpu-config

Dağıtımları doğrulama

kubectl get pods

Model hizmetini doğrulama

kubectl get service tei-service

Çalışan hizmet türü ClusterIP'yi göstermesi gerekir.

Örnek çıktı:

student@cloudshell$ kubectl get service tei-service
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
tei-service   ClusterIP   34.118.233.48   <none>        8080/TCP   10m

Hizmetin CLUSTER-IP'si, uç nokta adresimiz olarak kullanacağımız IP'dir. Model yerleştirme, http://34.118.233.48:8080/embed URI'siyle yanıt verebilir. Bu kimlik, modeli AlloyDB Omni'ye kaydederken daha sonra kullanılır.

kubectl port-forward komutunu kullanarak hizmeti kullanıma sunarak test edebiliriz.

kubectl port-forward service/tei-service 8080:8080

Cloud Shell kullanıyorsanız bağlantı noktası yönlendirme bir Cloud Shell oturumunda çalışıyor olabilir ve bunu test etmek için başka bir oturuma ihtiyacımız vardır.

En üstteki "+" işaretini kullanarak başka bir Cloud Shell sekmesi açın.

abc505ac4d41f24e.png

Yeni kabuk oturumunda bir curl komutu çalıştırın.

curl http://localhost:8080/embed \
    -X POST \
    -d '{"inputs":"Test"}' \
    -H 'Content-Type: application/json'

Aşağıdaki örnek çıktıdaki gibi bir vektör dizisi döndürmelidir (redaksiyonlu):

curl http://localhost:8080/embed \
>     -X POST \
>     -d '{"inputs":"Test"}' \
>     -H 'Content-Type: application/json'
[[-0.018975832,0.0071419072,0.06347208,0.022992613,0.014205903
...
-0.03677433,0.01636146,0.06731572]]

Bu sayıları görürsek modeli başarıyla test ettiğimizi ve artık doğrudan SQL'den kullanılmak üzere AlloyDB Omni'mize kaydedebileceğimizi onaylayabiliriz.

6. Modeli AlloyDB Omni'ye kaydetme

AlloyDB Omni'nin dağıtılan modelle nasıl çalıştığını test etmek için bir veritabanı oluşturup modeli kaydetmemiz gerekir.

Veritabanı Oluşturma

İstemci sanal makinenizden AlloyDB Omni'ye bağlanmak ve veritabanı oluşturmak için atlama kutusu olarak bir GCE sanal makinesi oluşturun.

Omni için GKE harici yük dengeleyici, özel IP adresleme kullanarak VPC'den erişmenize olanak tanır ancak VPC dışından bağlanmanıza izin vermediğinden jump box'a ihtiyacımız var. Genel olarak daha güvenlidir ve veritabanı örneğinizi internete açık hale getirmez. Lütfen diyagramın netliğini kontrol edin.

b4f24ddb5c8c8bf4.png

Cloud Shell oturumunda sanal makine oluşturmak için şunu çalıştırın:

export ZONE=us-central1-a
gcloud compute instances create instance-1 \
    --zone=$ZONE 

Cloud Shell'de kubectl kullanarak AlloyDB Omni uç noktası IP'sini bulun:

kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default

PRIMARYENDPOINT değerini not edin.

Örnek bir çıkış aşağıda verilmiştir:

student@cloudshell:~$ kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default
NAME      PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE   HAREADYSTATUS   HAREADYREASON
my-omni   10.131.0.33        Ready          DBClusterReady
student@cloudshell:~$

10.131.0.33, AlloyDB Omni örneğine bağlanmak için örneklerimizde kullanacağımız IP'dir.

gcloud kullanarak sanal makineye bağlanma:

gcloud compute ssh instance-1 --zone=$ZONE 

İstenirse SSH anahtarı oluşturma talimatlarını uygulayın. SSH bağlantısı hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.

Sanal makineye yönelik SSH oturumunda PostgreSQL istemcisini yükleyin:

sudo apt-get update
sudo apt-get install --yes postgresql-client

Aşağıdaki örneği kullanarak AlloyDB Omni yük dengeleyici IP değişkenini dışa aktarın (IP yerine yük dengeleyicinizin IP'sini yazın):

export INSTANCE_IP=10.131.0.33

AlloyDB Omni'ye bağlanmak için my-omni.yaml içindeki karma ile ayarlanan şifre VeryStrongPassword'dır:

psql "host=$INSTANCE_IP user=postgres sslmode=require"

Oluşturulan psql oturumunda şunu çalıştırın:

create database demo;

Oturumdan çıkın ve veritabanı demosuna bağlanın (veya aynı oturumda \c demo komutunu çalıştırabilirsiniz).

psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"

Dönüştürme işlevleri oluşturma

3. taraf yerleştirme modelleri için, giriş ve çıkışı modelin ve dahili işlevlerimizin beklediği biçimde biçimlendiren dönüştürme işlevleri oluşturmamız gerekir. Bu işlevler, farklı arayüzler arasında biçim dönüştürme işlemini gerçekleştirmek için çevirmen görevi görür.

Girişi işleyen dönüştürme işlevini aşağıda bulabilirsiniz:

-- Input Transform Function corresponding to the custom model endpoint
CREATE OR REPLACE FUNCTION tei_text_input_transform(model_id VARCHAR(100), input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
DECLARE
  transformed_input JSON;
  model_qualified_name TEXT;
BEGIN
  SELECT json_build_object('inputs', input_text, 'truncate', true)::JSON INTO transformed_input;
  RETURN transformed_input;
END;
$$;

Örnek çıktıda gösterildiği gibi, demo veritabanına bağlıyken sağlanan kodu yürütün:

demo=# -- Input Transform Function corresponding to the custom model endpoint
CREATE OR REPLACE FUNCTION tei_text_input_transform(model_id VARCHAR(100), input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
DECLARE
  transformed_input JSON;
  model_qualified_name TEXT;
BEGIN
  SELECT json_build_object('inputs', input_text, 'truncate', true)::JSON INTO transformed_input;
  RETURN transformed_input;
END;
$$;
CREATE FUNCTION
demo=#

Aşağıda, modelden gelen yanıtı gerçek sayılar dizisine dönüştüren çıkış işlevi yer almaktadır:

-- Output Transform Function corresponding to the custom model endpoint
CREATE OR REPLACE FUNCTION tei_text_output_transform(model_id VARCHAR(100), response_json JSON)
RETURNS REAL[]
LANGUAGE plpgsql
AS $$
DECLARE
  transformed_output REAL[];
BEGIN
  SELECT ARRAY(SELECT json_array_elements_text(response_json->0)) INTO transformed_output;
  RETURN transformed_output;
END;
$$;

Aynı oturumda yürütün:

demo=# -- Output Transform Function corresponding to the custom model endpoint
CREATE OR REPLACE FUNCTION tei_text_output_transform(model_id VARCHAR(100), response_json JSON)
RETURNS REAL[]
LANGUAGE plpgsql
AS $$
DECLARE
  transformed_output REAL[];
BEGIN
  SELECT ARRAY(SELECT json_array_elements_text(response_json->0)) INTO transformed_output;
  RETURN transformed_output;
END;
$$;
CREATE FUNCTION
demo=#

Modeli kaydetme

Artık modeli veritabanına kaydedebiliriz.

embeddinggemma adlı modeli kaydetmek için kullanılan prosedür çağrısı aşağıda verilmiştir. Modeli kaydederken tei-service hizmet adını model_request_url parametremizde kullanırız. Bu, dahili Kubernetes kümesi hizmet adıdır ve GKE kümesindeki dahili IP'ye çevrilir:

CALL
  google_ml.create_model(
    model_id => 'embeddinggemma',
    model_request_url => 'http://tei-service:8080/embed',
    model_provider => 'custom',
    model_type => 'text_embedding',
    model_in_transform_fn => 'tei_text_input_transform',
    model_out_transform_fn => 'tei_text_output_transform');

Demo veritabanına bağlıyken sağlanan kodu yürütün:

demo=# CALL
  google_ml.create_model(
    model_id => 'embeddinggemma',
    model_request_url => 'http://tei-service:8080/embed',
    model_provider => 'custom',
    model_type => 'text_embedding',
    model_in_transform_fn => 'tei_text_input_transform',
    model_out_transform_fn => 'tei_text_output_transform');
CALL
demo=#

Kayıt modelini, gerçek sayılar dizisi döndürmesi gereken aşağıdaki test sorgusuyla test edebiliriz.

select google_ml.embedding('embeddinggemma','What is AlloyDB Omni?');

Vektör verilerini geri almadan önce uzun bir süre beklemeniz gerekebilir. Bu testte, yerleştirme modelini barındırmak için CPU tabanlı düğüm havuzu kullanıyoruz. Bu model, GPU'lu düğümlerde çok daha hızlı çalışıyor.

7. AlloyDB Omni'de modeli test etme

Veri Yükleme

AlloyDB Omni'nin dağıtılan modelle nasıl çalıştığını test etmek için bazı verileri yüklememiz gerekir. AlloyDB'de vektör araması için diğer codelab'lerden birinde kullanılan verileri kullandım.

Verileri yüklemenin bir yolu, Google Cloud SDK'yı ve PostgreSQL istemci yazılımını kullanmaktır. Aynı istemci sanal makinesini kullanabiliriz. Sanal makine görüntüsü için varsayılanları kullandıysanız Google Cloud SDK zaten yüklenmiş olmalıdır. Ancak Google SDK'sız özel bir resim kullandıysanız dokümanlardaki talimatları uygulayarak bu resmi ekleyebilirsiniz.

AlloyDB Omni yük dengeleyici IP'sini aşağıdaki örnekteki gibi dışa aktarın (IP yerine yük dengeleyici IP'nizi girin):

export INSTANCE_IP=10.131.0.33

Veritabanına bağlanın ve pgvector uzantısını etkinleştirin.

psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"

psql oturumunda:

CREATE EXTENSION IF NOT EXISTS vector;

psql oturumundan çıkın ve komut satırı oturumunda verileri demo veritabanına yüklemek için komutları yürütün.

Tabloları oluşturun. Aşağıdaki komut, cymbal_demo_schema.sql dosyasını alır ve SQL'i demo veritabanındaki tüm tablo tanımlarıyla birlikte yürütür:

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=demo"

Beklenen konsol çıkışı:

student@cloudshell:~$ gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=demo"
Password for user postgres:
SET
SET
SET
SET
SET
 set_config
------------

(1 row)

SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
ALTER TABLE
ALTER SEQUENCE
ALTER TABLE
ALTER TABLE
ALTER TABLE
student@cloudshell:~$ 

Oluşturulan tabloların listesi:

psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\dt+"

Çıkış:

student@cloudshell:~$ psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\dt+"
Password for user postgres: 
                                           List of relations
 Schema |       Name       | Type  |  Owner   | Persistence | Access method |    Size    | Description 
--------+------------------+-------+----------+-------------+---------------+------------+-------------
 public | cymbal_embedding | table | postgres | permanent   | heap          | 8192 bytes | 
 public | cymbal_inventory | table | postgres | permanent   | heap          | 8192 bytes | 
 public | cymbal_products  | table | postgres | permanent   | heap          | 8192 bytes | 
 public | cymbal_stores    | table | postgres | permanent   | heap          | 8192 bytes | 
(4 rows)
student@cloudshell:~$ 

cymbal_products tablosuna veri yükleme:

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\copy cymbal_products from stdin csv header"

Beklenen konsol çıkışı:

student@cloudshell:~$ gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_products.csv |psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\copy cymbal_products from stdin csv header"
COPY 941
student@cloudshell:~$ 

cymbal_products tablosundaki birkaç satırın örneğini aşağıda bulabilirsiniz.

psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT uniq_id,left(product_name,30),left(product_description,50),sale_price FROM cymbal_products limit 3"

Çıkış:

student@cloudshell:~$ psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT uniq_id,left(product_name,30),left(product_description,50),sale_price FROM cymbal_products limit 3"
Password for user postgres: 
             uniq_id              |              left              |                        left                        | sale_price 
----------------------------------+--------------------------------+----------------------------------------------------+------------
 a73d5f754f225ecb9fdc64232a57bc37 | Laundry Tub Strainer Cup       |   Laundry tub strainer cup Chrome For 1-.50, drain |      11.74
 41b8993891aa7d39352f092ace8f3a86 | LED Starry Star Night Light La |  LED Starry Star Night Light Laser Projector 3D Oc |      46.97
 ed4a5c1b02990a1bebec908d416fe801 | Surya Horizon HRZ-1060 Area Ru |  The 100% polypropylene construction of the Surya  |       77.4
(3 rows)
student@cloudshell:~$ 

cymbal_inventory tablosuna veri yükleme:

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\copy cymbal_inventory from stdin csv header"

Beklenen konsol çıkışı:

student@cloudshell:~$ gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_inventory.csv |psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\copy cymbal_inventory from stdin csv header"
Password for user postgres: 
COPY 263861
student@cloudshell:~$ 

cymbal_inventory tablosundaki birkaç satırın örneğini aşağıda bulabilirsiniz.

psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT * FROM cymbal_inventory LIMIT 3"

Çıkış:

student@cloudshell:~$ psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT * FROM cymbal_inventory LIMIT 3"
Password for user postgres: 
 store_id |             uniq_id              | inventory 
----------+----------------------------------+-----------
     1583 | adc4964a6138d1148b1d98c557546695 |         5
     1490 | adc4964a6138d1148b1d98c557546695 |         4
     1492 | adc4964a6138d1148b1d98c557546695 |         3
(3 rows)
student@cloudshell:~$ 

cymbal_stores tablosuna veri yükleme:

gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\copy cymbal_stores from stdin csv header"

Beklenen konsol çıkışı:

student@cloudshell:~$ gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_stores.csv |psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\copy cymbal_stores from stdin csv header"
Password for user postgres: 
COPY 4654
student@cloudshell:~$

cymbal_stores tablosundaki birkaç satırın örneğini aşağıda bulabilirsiniz.

psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT store_id, name, zip_code FROM cymbal_stores limit 3"

Çıkış:

student@cloudshell:~$ psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT store_id, name, zip_code FROM cymbal_stores limit 3"
Password for user postgres: 
 store_id |       name        | zip_code 
----------+-------------------+----------
     1990 | Mayaguez Store    |      680
     2267 | Ware Supercenter  |     1082
     4359 | Ponce Supercenter |      780
(3 rows)
student@cloudshell:~$ 

Yerleştirmeler Oluşturma

psql kullanarak demo veritabanına bağlanın ve ürün açıklamalarına göre cymbal_products tablosunda açıklanan ürünler için yerleştirilmiş öğeler oluşturun.

Demo veritabanına bağlanın:

psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"

Yerleştirmelerimizi depolamak için sütun yerleştirme içeren bir cymbal_embedding tablosu kullanıyoruz ve işlev için metin girişi olarak ürün açıklamasını kullanıyoruz.

Daha sonra uzaktan modellerle karşılaştırmak için sorgularınızın zamanlamasını etkinleştirin:

\timing

Yerleştirmeleri oluşturmak için sorguyu çalıştırın:

INSERT INTO cymbal_embedding(uniq_id,embedding)  SELECT uniq_id, google_ml.embedding('embeddinggemma',product_description)::vector FROM cymbal_products;

Beklenen konsol çıkışı:

demo=# INSERT INTO cymbal_embedding(uniq_id,embedding)  SELECT uniq_id, google_ml.embedding('embeddinggemma',product_description)::vector FROM cymbal_products;
INSERT 0 941
Time: 497878.136 ms (08:17.878)
demo=#

Bu örnekte, yerleştirme oluşturma işlemi yaklaşık 8 dakika sürdü. Bu durum, CPU tabanlı düğüm havuzunda beklenir. GPU hızlandırıcıları olan bir havuzda, GPU türüne bağlı olarak önemli ölçüde daha hızlı olabilir.

Test Sorguları Çalıştırma

psql kullanarak demo veritabanına bağlanın ve yerleştirme oluştururken yaptığımız gibi sorgularımızın yürütme süresini ölçmek için zamanlamayı etkinleştirin.

Vektör aramasında algoritma olarak kosinüs uzaklığını kullanarak "Burada hangi tür meyve ağaçları iyi yetişir?" gibi bir istekle eşleşen ilk 5 ürünü bulalım.

psql oturumunda şunu çalıştırın:

SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (ce.embedding <=> google_ml.embedding('embeddinggemma','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_embedding ce on
        ce.uniq_id=cp.uniq_id
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 5;

Beklenen konsol çıkışı:

demo=# SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (ce.embedding <=> google_ml.embedding('embeddinggemma','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_embedding ce on
        ce.uniq_id=cp.uniq_id
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 5;
     product_name      |                                   description                                    | sale_price | zip_code |      distance
-----------------------+----------------------------------------------------------------------------------+------------+----------+--------------------
 Cherry Tree           | This is a beautiful cherry tree that will produce delicious cherries. It is an d |      75.00 |    93230 | 0.5210549378080666
 California Lilac      | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d |       5.00 |    93230 | 0.5639421771781971
 Toyon                 | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 | 0.5670010914504852
 Rose Bush             | This is a beautiful rose bush that will produce fragrant roses. It is a perennia |      50.00 |    93230 | 0.5731542622882957
 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 | 0.5750934653011995
(5 rows)

Time: 83.610 ms
demo=#

Sorgu 83 ms sürdü ve cymbal_products tablosundaki, istekle eşleşen ve 1583 numaralı mağazada envanteri bulunan ağaçların listesini döndürdü.

ANN dizini oluşturma

Yalnızca küçük bir veri kümemiz olduğunda tüm yerleştirmeleri tarayan tam arama kullanmak kolaydır ancak veriler büyüdükçe yükleme ve yanıt süresi de artar. Performansı artırmak için yerleştirme verilerinizde dizinler oluşturabilirsiniz. Vektör verileri için Google ScaNN dizinini kullanarak bunu nasıl yapacağınızla ilgili bir örneği aşağıda bulabilirsiniz.

Bağlantıyı kaybettiyseniz demo veritabanına yeniden bağlanın:

psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"

alloydb_scann uzantısını etkinleştirin:

CREATE EXTENSION IF NOT EXISTS alloydb_scann;

Dizini oluşturun:

CREATE INDEX cymbal_embedding_scann ON cymbal_embedding USING scann (embedding cosine);

Önceki sorguyu tekrar deneyin ve sonuçları karşılaştırın:

demo=# SELECT
        cp.product_name,
        left(cp.product_description,80) as description,
        cp.sale_price,
        cs.zip_code,
        (ce.embedding <=> google_ml.embedding('embeddinggemma','What kind of fruit trees grow well here?')::vector) as distance
FROM
        cymbal_products cp
JOIN cymbal_embedding ce on
        ce.uniq_id=cp.uniq_id
JOIN cymbal_inventory ci on
        ci.uniq_id=cp.uniq_id
JOIN cymbal_stores cs on
        cs.store_id=ci.store_id
        AND ci.inventory>0
        AND cs.store_id = 1583
ORDER BY
        distance ASC
LIMIT 5;
     product_name      |                                   description                                    | sale_price | zip_code |      distance
-----------------------+----------------------------------------------------------------------------------+------------+----------+--------------------
 Cherry Tree           | This is a beautiful cherry tree that will produce delicious cherries. It is an d |      75.00 |    93230 | 0.5210549378080666
 California Lilac      | This is a beautiful lilac tree that can grow to be over 10 feet tall. It is an d |       5.00 |    93230 | 0.5639421771781971
 Toyon                 | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e |      10.00 |    93230 | 0.5670010914504852
 Rose Bush             | This is a beautiful rose bush that will produce fragrant roses. It is a perennia |      50.00 |    93230 | 0.5731542622882957
 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e |      25.00 |    93230 | 0.5750934653011995
(5 rows)

Time: 64.783 ms

Sorgu yürütme süresi biraz kısaldı ve bu kazanç daha büyük veri kümelerinde daha belirgin olacaktır. Sonuçlar oldukça benzer ve sonuçta aynı ilk 5 ağaç gösteriliyor.

Diğer sorguları deneyin ve dokümanlardan vektör dizini seçme hakkında daha fazla bilgi edinin.

Ayrıca AlloyDB Omni'de daha fazla özellik ve laboratuvar olduğunu unutmayın.

8. Ortamı temizleme

Artık AlloyDB Omni ve bir yapay zeka modeliyle GKE kümemizi silebiliriz.

GKE kümesini silme

Cloud Shell'de şunu çalıştırın:

export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
gcloud container clusters delete ${CLUSTER_NAME} \
  --project=${PROJECT_ID} \
  --region=${LOCATION}

Beklenen konsol çıkışı:

student@cloudshell:~$ gcloud container clusters delete ${CLUSTER_NAME} \
>   --project=${PROJECT_ID} \
>   --region=${LOCATION}
The following clusters will be deleted.
 - [alloydb-ai-gke] in [us-central1]

Do you want to continue (Y/n)?  Y

Deleting cluster alloydb-ai-gke...done.
Deleted

Sanal makineyi sil

Cloud Shell'de şunu çalıştırın:

export PROJECT_ID=$(gcloud config get project)
export ZONE=us-central1-a
gcloud compute instances delete instance-1 \
  --project=${PROJECT_ID} \
  --zone=${ZONE}

Beklenen konsol çıkışı:

student@cloudshell:~$ export PROJECT_ID=$(gcloud config get project)
export ZONE=us-central1-a
gcloud compute instances delete instance-1 \
  --project=${PROJECT_ID} \
  --zone=${ZONE}
Your active configuration is: [cloudshell-5399]
The following instances will be deleted. Any attached disks configured to be auto-deleted will be deleted unless they are attached to any other instances or the `--keep-disks` flag is given and specifies them for keeping. Deleting a disk 
is irreversible and any data on the disk will be lost.
 - [instance-1] in [us-central1-a]

Do you want to continue (Y/n)?  Y

Deleted

Bu codelab için yeni bir proje oluşturduysanız bunun yerine projenin tamamını silebilirsiniz: https://console.cloud.google.com/cloud-resource-manager

9. Tebrikler

Codelab'i tamamladığınız için tebrik ederiz.

İşlediğimiz konular

  • AlloyDB Omni'yi Google Kubernetes kümesine dağıtma
  • AlloyDB Omni'ye bağlanma
  • AlloyDB Omni'ye veri yükleme
  • GKE'ye açık yerleştirme modeli dağıtma
  • AlloyDB Omni'ye yerleştirme modeli kaydetme
  • Semantik arama için yerleştirilmiş öğeler oluşturma
  • AlloyDB Omni'de semantik arama için oluşturulan yerleştirmeleri kullanma
  • AlloyDB'de vektör dizinleri oluşturma ve kullanma

AlloyDB Omni'de yapay zekayla çalışma hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.

10. Anket

Çıkış:

Bu eğitimi nasıl kullanacaksınız?

Sadece okuyun Okuyun ve alıştırmaları tamamlayın