1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara men-deploy AlloyDB Omni di Google Kubernetes Engine (GKE) dan menggunakannya dengan model terbuka seperti EmbeddingGemma dan Gemma 4 untuk embedding dan prediksi. Menjalankan database dan model di cluster yang sama akan mengurangi latensi jaringan dan menghindari dependensi layanan pihak ketiga. Cara ini juga membantu memenuhi persyaratan kepatuhan dan residensi data karena data Anda tidak pernah keluar dari lingkungan Anda.

Prasyarat
- Pemahaman dasar tentang Google Cloud dan konsol Google Cloud
- Pengetahuan dasar tentang Kubernetes dan GKE
- Pemahaman tentang antarmuka command line dan Google Cloud Shell
Yang akan Anda pelajari
- Cara men-deploy AlloyDB Omni di cluster GKE
- Cara terhubung ke AlloyDB Omni
- Cara memuat data ke AlloyDB Omni
- Cara men-deploy model AI (embedding dan LLM) ke GKE
- Cara mendaftarkan model AI di AlloyDB Omni
- Cara membuat embedding untuk penelusuran semantik
- Cara menjalankan kueri penelusuran semantik di AlloyDB Omni
- Cara membuat dan menggunakan indeks vektor di AlloyDB Omni
Yang Anda butuhkan
- Akun Google Cloud dan project Google Cloud
- Browser web seperti Chrome
2. Penyiapan dan persyaratan
Penyiapan project
- Login ke konsol Google Cloud. Jika belum memiliki akun Gmail atau Google Workspace, buat akun. Gunakan akun pribadi, bukan akun kantor atau sekolah.
- Buat project baru atau pilih project yang sudah ada. Di header Konsol Google Cloud, klik Select a project, lalu klik New Project.

Di jendela Select a project, klik New Project untuk membuka dialog pembuatan project.

Pada dialog, masukkan Nama project dan pilih organisasi atau lokasi Anda.

- Project name adalah nama tampilan untuk peserta project ini. Nama project tidak digunakan oleh Google API, dan Anda dapat mengubahnya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (Anda tidak dapat mengubahnya setelah ditetapkan). Konsol Google Cloud otomatis membuat ID unik, atau Anda dapat memasukkan ID Anda sendiri. Dalam codelab ini, Anda mereferensikan project ID dengan placeholder
. - Project Number adalah ID ketiga yang digunakan oleh beberapa API. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Resource Manager.
Aktifkan penagihan
Jika menyiapkan penagihan menggunakan kredit Google Cloud, Anda dapat melewati langkah ini.
Untuk menyiapkan akun penagihan pribadi, aktifkan penagihan di konsol Google Cloud.
- Menyelesaikan lab ini memerlukan biaya kurang dari $5 USD untuk resource Google Cloud.
- Ikuti langkah-langkah pembersihan di akhir lab ini untuk menghapus resource dan menghindari biaya lebih lanjut.
- Pengguna baru memenuhi syarat untuk mengikuti Uji Coba Gratis senilai$300 USD.
Mulai Cloud Shell
Dalam codelab ini, Anda menggunakan Google Cloud Shell, lingkungan command line yang berjalan di cloud.
Dari Konsol Google Cloud, klik ikon Activate Cloud Shell di toolbar kanan atas:

Atau, tekan G, lalu S, atau buka Google Cloud Shell secara langsung.
Setelah terhubung, Cloud Shell akan menampilkan perintah terminal:

Cloud Shell mencakup penyimpanan persisten dan alat pengembangan. Anda dapat menjalankan semua langkah dalam codelab ini dari browser.
3. Mengaktifkan API
Untuk menggunakan Google Kubernetes Engine (GKE) untuk deployment model dan AlloyDB Omni, aktifkan Compute Engine dan GKE API di project Google Cloud Anda.
Di Cloud Shell, pastikan project ID Anda telah dikonfigurasi:
PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
Jika project ID Anda belum ditentukan, konfigurasikan:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
Aktifkan API yang diperlukan:
gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com
Output yang diharapkan:
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.
Anda dapat membaca tentang setiap API yang diaktifkan dalam dokumentasi.
4. Men-deploy AlloyDB Omni di GKE
Untuk men-deploy AlloyDB Omni di GKE, siapkan cluster Kubernetes dengan mengikuti persyaratan operator AlloyDB Omni.
Membuat cluster GKE
Deploy cluster GKE standar dengan kapasitas untuk menjalankan AlloyDB Omni, operator, dan container pemantauan. AlloyDB Omni memerlukan minimal dua CPU dan RAM 8 GB. Tutorial ini menggunakan jenis mesin n2-standard-4.
Tetapkan variabel lingkungan untuk deployment Anda:
export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
export MACHINE_TYPE=n2-standard-4
Buat cluster GKE standar:
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
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
export MACHINE_TYPE=n2-standard-4
Your active configuration is: [test-project-001-402417]
student@cloudshell:~ (test-project-001-402417)$ 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: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s).
Creating cluster alloydb-ai-gke in us-central1... Cluster is being health-checked (Kubernetes Control Plane is healthy)...done.
Created [https://container.googleapis.com/v1/projects/test-project-001-402417/zones/us-central1/clusters/alloydb-ai-gke].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1/alloydb-ai-gke?project=test-project-001-402417
kubeconfig entry generated for alloydb-ai-gke.
NAME: alloydb-ai-gke
LOCATION: us-central1
MASTER_VERSION: 1.36.3-gke.1640000
MASTER_IP: 34.121.243.65
MACHINE_TYPE: n2-standard-4
NODE_VERSION: 1.36.3-gke.1640000
NUM_NODES: 3
STATUS: RUNNING
STACK_TYPE: IPV4
Menyiapkan cluster
Instal komponen yang diperlukan seperti cert-manager, pengontrol sertifikat native untuk Kubernetes. Untuk mengetahui detailnya, lihat dokumentasi penginstalan cert-manager.
Cloud Shell mencakup alat command line Kubernetes kubectl. Dapatkan kredensial cluster menggunakan gcloud:
gcloud container clusters get-credentials ${CLUSTER_NAME} --region=${LOCATION}
Instal cert-manager menggunakan kubectl:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.21.1/cert-manager.yaml
Output konsol yang diharapkan (disamarkan):
student@cloudshell:~$ kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.21.1/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
Menginstal operator AlloyDB Omni
Instal operator AlloyDB Omni menggunakan Helm.
Download dan instal diagram operator AlloyDB Omni:
helm install alloydbomni-operator oci://gcr.io/alloydb-omni/alloydbomni-operator \
--version 1.8.1 \
--create-namespace \
--namespace alloydb-omni-system \
--atomic \
--timeout 5m
Output konsol yang diharapkan (disamarkan):
student@cloudshell:~$ helm install alloydbomni-operator oci://gcr.io/alloydb-omni/alloydbomni-operator \ > --version 1.8.0 \ > --create-namespace \ > --namespace alloydb-omni-system \ > --atomic \ > --timeout 5m Flag --atomic has been deprecated, use --rollback-on-failure instead Pulled: gcr.io/alloydb-omni/alloydbomni-operator:1.8.0 Digest: sha256:f2d98fa7a3b08dfc1e83b811582718b94e5c017b81aade700c83e917c59f0395 NAME: alloydbomni-operator LAST DEPLOYED: Thu Aug 27 17:57:30 2026 NAMESPACE: alloydb-omni-system STATUS: deployed REVISION: 1 DESCRIPTION: Install complete TEST SUITE: None
Deploy cluster database.
Manifes berikut mengonfigurasi cluster database dengan googleMLExtension diaktifkan dan load balancer internal:
cat << 'EOF' > my-omni.yaml
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: "18.3.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
EOF
Nilai rahasia sandi adalah representasi Base64 dari VeryStrongPassword. Di lingkungan produksi, gunakan Google Secret Manager untuk mengelola sandi. Untuk mengetahui detailnya, lihat dokumentasi Secret Manager.
Manifes disimpan sebagai my-omni.yaml. Di Cloud Shell, klik Open Editor di pojok kanan atas jendela terminal dan baca file.

Setelah membaca manifes my-omni.yaml, klik Open Terminal untuk kembali ke command prompt.

Terapkan manifes my-omni.yaml:
kubectl apply -f my-omni.yaml
Output konsol yang diharapkan:
secret/db-pw-my-omni created dbcluster.alloydbomni.dbadmin.goog/my-omni created
Periksa status cluster my-omni:
kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default
Selama deployment, cluster database bertransisi melalui fase penyiapan hingga mencapai status DBClusterReady.
Output konsol yang diharapkan:
$ kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE HAREADYSTATUS HAREADYREASON my-omni 10.131.0.33 Ready DBClusterReady
Secara opsional, Anda dapat memantau deployment cluster menggunakan perintah kubectl log:
kubectl logs -l alloydbomni.internal.dbadmin.goog/dbcluster=my-omni --all-containers -f
Terhubung ke AlloyDB Omni
Setelah cluster siap, hubungkan ke pod database menggunakan klien PostgreSQL (psql). Sandinya adalah VeryStrongPassword seperti yang ditentukan dalam my-omni.yaml:
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
Contoh output konsol:
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 (18.3)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off, ALPN: postgresql)
Type "help" for help.
postgres=#
Keluar dari sesi psql dengan mengetik \q dan menekan Enter:
postgres=# \q
5. Men-deploy model EmbeddingGemma di GKE
Untuk menguji integrasi AI AlloyDB Omni dengan model lokal, deploy model embedding ke cluster GKE. Tutorial ini menggunakan model EmbeddingGemma dari Google.
Membuat node pool untuk model
Untuk menjalankan inferensi model, siapkan node pool khusus. Anda dapat menggunakan kumpulan node khusus CPU atau kumpulan node yang dipercepat GPU (seperti g2-standard-8 dengan GPU NVIDIA L4). Tutorial ini menggunakan node pool berbasis CPU dengan jenis mesin c3-standard-8.
Buat node pool CPU node tunggal:
export PROJECT_ID=$(gcloud config get-value 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
Output yang diharapkan:
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
Mendapatkan token Hugging Face
Tutorial ini men-deploy model EmbeddingGemma dari Hugging Face. Untuk mengakses bobot model, buat token akses Hugging Face:
- Login atau buat akun di Hugging Face.
- Buka Profil Anda > Token Akses.
- Klik Buat token baru.
- Masukkan nama untuk token dan pilih peran Baca.
- Klik Create token, lalu salin nilai token yang dibuat.
- Setujui persyaratan model di halaman model EmbeddingGemma jika Anda belum melakukannya.
Buat secret Kubernetes yang berisi token Hugging Face Anda di Cloud Shell (ganti placeholder token dengan token Anda):
export HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN>
kubectl create secret generic hf-secret \
--from-literal=hf_api_token=$HF_TOKEN \
--dry-run=client -o yaml | kubectl apply -f -
Menyiapkan manifes deployment
Untuk men-deploy model, gunakan paket container Text Embeddings Inference (TEI) dari Hugging Face. Untuk mengetahui informasi selengkapnya, lihat dokumentasi TEI GKE Hugging Face.
Clone repositori deployment dari GitHub:
git clone https://github.com/huggingface/Google-Cloud-Containers
Periksa dan ubah manifes konfigurasi CPU:
edit Google-Cloud-Containers/examples/gke/tei-deployment/cpu-config/deployment.yaml
Manifes yang diperbarui untuk deployment CPU:
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
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/machine-family: "c3"
Simpan perubahan dengan menekan ctrl+s dan beralih kembali ke terminal.
Men-deploy model
Terapkan manifes untuk men-deploy server TEI:
kubectl apply -f Google-Cloud-Containers/examples/gke/tei-deployment/cpu-config
Pantau deployment hingga dalam status siap:
printf "Waiting for model to load..."; until kubectl logs -l app=tei-server --tail=50 2>/dev/null | grep -q "Ready"; do printf "."; sleep 3; done; printf '\n\033[1;32m========================================\n[SUCCESS] Model is loaded and ready!\nYou can now proceed to the next step.\n========================================\033[0m\n'
Periksa layanan Kubernetes tei-service:
kubectl get service tei-service
Output yang diharapkan:
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
Layanan CLUSTER-IP melayani permintaan secara internal di http://34.118.233.48:8080/embed.
Uji endpoint model secara lokal menggunakan kubectl port-forward:
kubectl port-forward service/tei-service 8080:8080
Buka tab Cloud Shell kedua dengan mengklik + di bagian atas terminal:

Di tab baru, uji pembuatan embedding dengan curl:
curl http://localhost:8080/embed \
-X POST \
-d '{"inputs":"Test"}' \
-H 'Content-Type: application/json'
Output yang diharapkan (array vektor):
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]]
Hentikan penerusan port di tab pertama dengan menekan ctrl+c.
6. Mendaftarkan model embedding di AlloyDB Omni
Untuk menggunakan model yang di-deploy dari AlloyDB Omni, buat database, tentukan fungsi transformasi, dan daftarkan endpoint model.
Buat VM klien dan database
Buat instance VM Compute Engine di VPC yang sama untuk bertindak sebagai jump host klien:

Di Cloud Shell, buat VM klien:
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE
Ambil IP endpoint AlloyDB Omni:
echo "INSTANCE_IP=$(kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default -o jsonpath='{.status.primary.endpoint}')"
Output yang diharapkan:
INSTANCE_IP=10.128.0.33
Nilai INSTANCE_IP adalah IP load balancer internal untuk cluster AlloyDB Omni. Dalam contoh ini, nilainya adalah 10.131.0.33.
Hubungkan ke instance VM menggunakan SSH:
gcloud compute ssh instance-1 --zone=$ZONE
Di sesi SSH pada instance-1, instal klien PostgreSQL:
sudo apt-get update && sudo apt-get install --yes postgresql-client
Ekspor IP load balancer AlloyDB Omni (ganti dengan IP PRIMARYENDPOINT Anda):
export INSTANCE_IP=10.131.0.33
Terhubung ke AlloyDB Omni menggunakan psql (sandi adalah VeryStrongPassword):
psql "host=$INSTANCE_IP user=postgres sslmode=require"
Di sesi psql, buat database demo:
CREATE DATABASE demo;
Beralih ke database demo:
\c demo
Membuat fungsi transformasi
Endpoint sematan kustom memerlukan fungsi transformasi input dan output untuk menyesuaikan format data antara AlloyDB Omni dan API model.
Buat fungsi transformasi input:
CREATE OR REPLACE FUNCTION tei_text_input_transform(model_id VARCHAR(100), input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
DECLARE
transformed_input JSON;
BEGIN
SELECT json_build_object('inputs', input_text, 'truncate', true)::JSON INTO transformed_input;
RETURN transformed_input;
END;
$$;
Output yang diharapkan:
demo=# CREATE OR REPLACE FUNCTION tei_text_input_transform(model_id VARCHAR(100), input_text TEXT)
RETURNS JSON
LANGUAGE plpgsql
AS $$
DECLARE
transformed_input JSON;
BEGIN
SELECT json_build_object('inputs', input_text, 'truncate', true)::JSON INTO transformed_input;
RETURN transformed_input;
END;
$$;
CREATE FUNCTION
demo=#
Buat fungsi transformasi output untuk mengurai respons array vektor:
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;
$$;
Output yang diharapkan:
demo=# 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=#
Mendaftarkan model
Daftarkan model di AlloyDB Omni menggunakan prosedur google_ml.create_model. Tentukan http://tei-service:8080/embed sebagai model_request_url untuk merutekan permintaan ke layanan cluster Kubernetes:
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');
Output yang diharapkan:
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=#
Uji model terdaftar dengan contoh kueri SQL:
SELECT google_ml.embedding('embeddinggemma', 'What is AlloyDB Omni?');
Fungsi ini menampilkan representasi array bilangan riil yang dihasilkan oleh model EmbeddingGemma lokal yang berjalan di GKE.
Tekan q untuk kembali ke perintah sesi psql.
Keluar dari sesi psql:
\q
7. Menguji model dengan data sampel
Memuat data sampel
Tutorial ini menggunakan set data retail Cymbal untuk mendemonstrasikan penelusuran kemiripan vektor. Anda akan menggunakan Google Cloud SDK dan klien PostgreSQL untuk mengimpor data ke AlloyDB Omni.
Pada sesi SSH di instance-1, hubungkan ke database demo dan aktifkan ekstensi vector:
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
Di sesi psql:
CREATE EXTENSION IF NOT EXISTS vector;
Keluar dari sesi psql:
\q
Download dan terapkan skema untuk membuat tabel di database demo:
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=demo"
Output yang diharapkan:
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:~$
Verifikasi tabel yang dibuat:
psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\dt+"
Output yang diharapkan:
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)
Muat data ke tabel cymbal_products:
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"
Output yang diharapkan:
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:~$
Berikut adalah contoh beberapa baris dari tabel cymbal_products.
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"
Output yang diharapkan:
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:~$
Muat data ke tabel cymbal_inventory:
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"
Output yang diharapkan:
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:~$
Berikut adalah contoh beberapa baris dari tabel cymbal_inventory.
psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT * FROM cymbal_inventory LIMIT 3"
Output:
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:~$
Muat data ke tabel cymbal_stores:
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"
Output konsol yang diharapkan:
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:~$
Berikut adalah contoh beberapa baris dari tabel cymbal_stores.
psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT store_id, name, zip_code FROM cymbal_stores limit 3"
Output:
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:~$
Membangun embedding
Hubungkan ke database demo menggunakan psql dan buat sematan untuk produk yang dijelaskan dalam tabel cymbal_products berdasarkan deskripsi produk.
Hubungkan ke database demo:
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
Gunakan kolom embedding berjenis vector untuk menyimpan embedding teks yang dihasilkan untuk deskripsi produk.
Aktifkan pengaturan waktu kueri:
\timing
Buat embedding untuk setiap deskripsi produk dan simpan di tabel cymbal_embedding:
INSERT INTO cymbal_embedding (uniq_id, embedding)
SELECT uniq_id, google_ml.embedding('embeddinggemma', product_description)::vector
FROM cymbal_products;
Output yang diharapkan:
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=#
Menjalankan kueri penelusuran semantik
Dalam sesi psql, temukan lima produk teratas yang cocok dengan pertanyaan "What kind of fruit trees grow well here?" menggunakan jarak kosinus (<=>):
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
WHERE
ci.inventory > 0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 5;
Output yang diharapkan:
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
WHERE
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=#
Kueri berjalan selama 83 md dan menampilkan daftar pohon dari tabel cymbal_products yang cocok dengan permintaan dan inventaris tersedia di toko dengan nomor 1583.
Buat indeks ANN
Dengan set data kecil, Anda dapat dengan mudah menggunakan penelusuran persis yang memindai semua sematan, tetapi saat data bertambah, waktu pemuatan dan respons juga akan meningkat. Untuk meningkatkan performa, Anda dapat membuat indeks pada data sematan. Berikut adalah contoh cara melakukannya menggunakan indeks ScaNN Google untuk data vektor.
Hubungkan kembali ke database demo jika koneksi Anda terputus:
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
Aktifkan ekstensi alloydb_scann:
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
Buat indeks ScaNN pada kolom embedding:
CREATE INDEX cymbal_products_embeddings_scann ON cymbal_embedding
USING scann (embedding cosine)
WITH (num_leaves=10, max_num_levels = 1);
Jalankan kembali kueri penelusuran semantik untuk membandingkan performa eksekusi:
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
WHERE
ci.inventory > 0
AND cs.store_id = 1583
ORDER BY
distance ASC
LIMIT 5;
Output yang diharapkan:
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
WHERE
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
Waktu eksekusi kueri telah sedikit berkurang dan peningkatan akan lebih terlihat dengan set data yang lebih besar. Data yang ditampilkan harus sama atau sangat mirip dengan data yang kita dapatkan tanpa indeks.
Coba kueri lain dan baca selengkapnya tentang cara mengoptimalkan indeks vektor dalam dokumentasi.
Keluar dari sesi psql:
\q
Kembali ke Google Cloud Shell dengan menutup koneksi dari sesi SSH instance-1 dengan menekan CTRL+D atau mengetik exit.
8. Men-deploy Gemma dengan vLLM
Menambahkan node pool untuk Gemma
Pertama, periksa jenis node yang tersedia di wilayah Anda:
export LOCATION=us-central1-a
gcloud compute accelerator-types list --filter="zone:${LOCATION}"
Anda akan melihat daftar jenis akselerator yang tersedia, termasuk akselerator nvidia-l4. Sekarang buat node pool dengan jenis akselerator nvidia-l4:
export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
gcloud container node-pools create gpupool \
--accelerator type=nvidia-l4,count=1,gpu-driver-version=latest \
--project=${PROJECT_ID} \
--location=${LOCATION} \
--node-locations=${LOCATION}-a \
--cluster=${CLUSTER_NAME} \
--machine-type=g2-standard-8 \
--num-nodes=1
Buat manifes deployment untuk model Google Gemini 4 12B menggunakan vLLM:
cat << 'EOF' > gemma-12b-gpu-vllm-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gemma-12b-gpu-vllm-deployment
spec:
replicas: 1
selector:
matchLabels:
app: gemma-12b-gpu-vllm
template:
metadata:
labels:
app: gemma-12b-gpu-vllm
ai.gke.io/model: gemma-4-12b-it
ai.gke.io/inference-server: vllm
examples.ai.gke.io/source: user-guide
spec:
containers:
- name: inference-server
image: us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:latest
resources:
requests:
cpu: "4"
memory: "16Gi"
ephemeral-storage: "30Gi"
nvidia.com/gpu: "1"
limits:
cpu: "8"
memory: "24Gi"
ephemeral-storage: "30Gi"
nvidia.com/gpu: "1"
command: ["python3", "-m", "vllm.entrypoints.api_server"]
args:
- --model=$(MODEL_ID)
- --host=0.0.0.0
- --port=8000
- --tensor-parallel-size=1
- --enable-log-requests
- --enable-chunked-prefill
- --enable-prefix-caching
- --enable-auto-tool-choice
- --generation-config=auto
- --tool-call-parser=gemma4
- --dtype=bfloat16
- --max-num-seqs=16
- --max-model-len=32768
- --gpu-memory-utilization=0.95
- --reasoning-parser=gemma4
- --trust-remote-code
- --quantization=fp8
env:
- name: LD_LIBRARY_PATH
value: ${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64
- name: MODEL_ID
value: google/gemma-4-12b-it
- name: HF_TOKEN
valueFrom:
secretKeyRef:
name: hf-secret
key: hf_api_token
volumeMounts:
- mountPath: /dev/shm
name: dshm
volumes:
- name: dshm
emptyDir:
medium: Memory
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-l4
cloud.google.com/gke-gpu-driver-version: latest
---
apiVersion: v1
kind: Service
metadata:
name: gemma-12b-gpu-vllm-service
spec:
selector:
app: gemma-12b-gpu-vllm
type: ClusterIP
ports:
- protocol: TCP
port: 8000
targetPort: 8000
EOF
Terapkan deployment gemma-12b-gpu-vllm-deployment.yaml yang disimpan:
kubectl apply -f gemma-12b-gpu-vllm-deployment.yaml
Output yang diharapkan:
$ kubectl apply -f gemma-12b-gpu-vllm-deployment.yaml deployment.apps/gemma-12b-gpu-vllm-deployment created service/gemma-12b-gpu-vllm-service created
Tunggu hingga deployment selesai dan model dimuat. Proses ini mungkin memerlukan waktu beberapa menit.
printf "Waiting for model to load..."; until kubectl logs -l app=gemma-12b-gpu-vllm --tail=50 2>/dev/null | grep -q "Application startup complete"; do printf "."; sleep 3; done; printf '\n\033[1;32m========================================\n[SUCCESS] Model is loaded and ready!\nYou can now proceed to the next step.\n========================================\033[0m\n'
Output yang diharapkan:
Waiting for model to load... ======================================== [SUCCESS] Model is loaded and ready! You can now proceed to the next step. ========================================
Menguji model. Aktifkan penerusan port untuk mengakses model:
kubectl port-forward svc/gemma-12b-gpu-vllm-service 8090:8000
Di jendela terminal lain, gunakan curl untuk mengirim perintah ke model:
curl http://localhost:8090/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "system", "content": "You are a helpful assistant running on GKE."},
{"role": "user", "content": "What is AlloyDB Omni."}
],
"temperature": 0.7
}' | jq -r '.choices[0].message.content'
Output yang diharapkan:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3957 100 3761 100 196 85 4 0:00:49 0:00:43 0:00:06 830
**AlloyDB Omni** is a fully managed, PostgreSQL-compatible database engine from Google Cloud that can be run **on-premises, in other clouds, or in your own data centers.**
To understand it simply: It allows you to run the high-performance, enterprise-grade capabilities of Google's **AlloyDB** (a cloud-native database) on your own infrastructure.
Here is a breakdown of what makes it significant:
### 1. The "Best of Both Worlds" Architecture
Normally, you have to choose between:
* **Managed Cloud Databases:** Easy to scale and manage, but you are locked into the cloud provider's infrastructure.
* **Self-Managed Databases:** You have full control over the hardware/location, but you are responsible for scaling, patching, and high availability.
**AlloyDB Omni** bridges this gap. It provides the advanced features of a cloud-native database (like intelligent indexing, high availability, and massive scalability) while allowing you to run it anywhere.
Hentikan penerusan port di terminal pertama (jika masih berjalan) dengan menekan Ctrl+C.
9. Mendaftarkan model Gemma 4 di AlloyDB Omni
Daftarkan model Gemma 12B di AlloyDB Omni menggunakan prosedur google_ml.create_model. Tentukan http://gemma-12b-gpu-vllm-service:8000/v1/chat/completions sebagai model_request_url untuk merutekan permintaan ke layanan cluster Kubernetes:
Ambil IP endpoint AlloyDB Omni:
echo "INSTANCE_IP=$(kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default -o jsonpath='{.status.primary.endpoint}')"
Hubungkan ke instance VM menggunakan SSH:
export ZONE=us-central1-a
gcloud compute ssh instance-1 --zone=$ZONE
Setelah terhubung ke VM, ekspor variabel INSTANCE_IP dari langkah sebelumnya (nilai 10.128.0.33 diberikan sebagai contoh - ganti dengan IP Anda):
export INSTANCE_IP=10.128.0.33
Mengekspor sandi AlloyDB:
export PGPASSWORD=VeryStrongPassword
Hubungkan ke database demo:
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
Di sesi psql, daftarkan model:
CALL
google_ml.create_model(
model_id => 'gemma-12b-gpu',
model_request_url => 'http://gemma-12b-gpu-vllm-service:8000/v1/chat/completions',
model_provider => 'custom',
model_type => 'llm');
Uji model dengan contoh kueri SQL:
SELECT google_ml.predict_row(
model_id => 'gemma-12b-gpu',
request_body => json_build_object(
'messages', json_build_array(
json_build_object('role', 'user', 'content', 'What is AlloyDB Omni?'))))->'choices'->0->'message'->'content';
Tekan q untuk keluar dari jendela hasil dan kembali ke perintah psql
Menggabungkan penelusuran vektor dengan RAG LLM di AlloyDB Omni
Gunakan penelusuran vektor dengan permintaan LLM untuk mendemonstrasikan RAG (Retrieval-Augmented Generation) dengan LLM.
Jalankan kueri SQL di plsql:
WITH trees AS (
SELECT
cp.product_name,
cp.product_description AS description,
cp.sale_price,
cs.zip_code,
cp.uniq_id AS product_id
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
WHERE
ci.inventory>0
AND cs.store_id = 1583
ORDER BY
(ce.embedding <=> embedding('embeddinggemma',
'What kind of fruit trees grow well here?')::vector) ASC
LIMIT 1),
prompt AS (
SELECT
'You are a friendly advisor helping to find a product based on the customer''s needs.
Based on the client request we have loaded a list of products closely related to search.
The list in JSON format with list of values like {"product_name":"name","product_description":"some description","sale_price":10}
Here is the list of products:' || json_agg(trees) || 'The customer asked "What kind of fruit trees grow well here?"
You should give information about the product, price and some supplemental information' AS prompt_text
FROM
trees),
response AS (
SELECT
google_ml.predict_row(
model_id =>'gemma-12b-gpu',
request_body => json_build_object(
'messages', json_build_array(
json_build_object('role', 'user', 'content',prompt_text)
)))->'choices'->0->'message'->'content' AS resp
FROM
prompt)
SELECT
REPLACE(resp::text, '\n', CHR(10))
FROM
response;
Output yang diharapkan:
----------------------------------------------------------------------------------------------------------------------------------------------
"Hello there! I'd be happy to help you find the perfect tree for your garden. +
+
Based on your location, we have a wonderful option that would grow beautifully in your area: +
+
**Cherry Tree** +
* **Price:** $75.00 +
* **Description:** This is a stunning deciduous tree that not only provides a beautiful landscape but also produces delicious cherries. +
* **Supplemental Information:** +
* **Growth:** It grows to about 15 feet tall. +
* **Appearance:** You can look forward to dark green leaves in the summer that transform into a vibrant red in the fall. +
* **Benefits:** It's a great choice if you're looking for both fruit and extra shade or privacy in your yard. +
* **Care Tips:** It performs best in a cool, moist climate with sandy soil. Since you are in a suitable zone, it should thrive nicely!+
+
Would you like more details on how to plant this, or would you like to proceed with an order?"
(1 row)
Kueri melengkapi perintah ke LLM dengan hasil penelusuran vektor.
Coba kueri lain dan bereksperimen dengan pola RAG. Manfaat arsitektur yang disajikan adalah kecukupan dirinya sepenuhnya. Data tidak dikirim ke luar cluster Anda dan dapat berjalan di lingkungan yang sepenuhnya terisolasi.
Keluar dari sesi psql:
\q
Putuskan koneksi dari sesi SSH ke VM:
exit
Jangan lupa bahwa AlloyDB Omni memiliki lebih banyak fitur dan lab.
10. Membersihkan lingkungan
Untuk menghindari biaya berkelanjutan pada akun Google Cloud Anda, hapus resource yang dibuat dalam codelab ini.
Menghapus cluster GKE
Di Cloud Shell, hapus cluster GKE:
export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
gcloud container clusters delete ${CLUSTER_NAME} \
--project=${PROJECT_ID} \
--region=${LOCATION}
Output yang diharapkan:
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
Menghapus VM klien
Di Cloud Shell, hapus instance Compute Engine:
export PROJECT_ID=$(gcloud config get-value project)
export ZONE=us-central1-a
gcloud compute instances delete instance-1 \
--project=${PROJECT_ID} \
--zone=${ZONE}
Output yang diharapkan:
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
Jika Anda membuat project baru untuk codelab ini, Anda dapat menghapus seluruh project di Google Cloud Resource Manager.
11. Selamat
Selamat, Anda telah menyelesaikan codelab ini!
Yang telah Anda pelajari
- Cara men-deploy AlloyDB Omni di cluster GKE
- Cara terhubung ke AlloyDB Omni
- Cara memuat data ke AlloyDB Omni
- Cara men-deploy model AI (embedding dan LLM) ke GKE
- Cara mendaftarkan model AI di AlloyDB Omni
- Cara membuat embedding untuk penelusuran semantik
- Cara menjalankan kueri penelusuran semantik di AlloyDB Omni
- Cara membuat dan menggunakan indeks vektor di AlloyDB Omni
Anda dapat membaca selengkapnya tentang cara menggunakan AI di AlloyDB Omni dalam dokumentasi.
Survei
Output: