1. บทนำ
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีทำให้ AlloyDB Omni ใช้งานได้ใน GKE และใช้กับรูปแบบการฝังแบบเปิดที่ติดตั้งใช้งานในคลัสเตอร์ Kubernetes เดียวกัน การปรับใช้โมเดลข้างอินสแตนซ์ฐานข้อมูลในคลัสเตอร์ GKE เดียวกันจะช่วยลดเวลาในการตอบสนองและการพึ่งพาบริการของบุคคลที่สาม นอกจากนี้ ข้อกำหนดด้านความปลอดภัยอาจกำหนดให้ต้องดำเนินการดังกล่าวเมื่อข้อมูลไม่ควรออกจากองค์กรและไม่อนุญาตให้ใช้บริการของบุคคลที่สาม
ข้อกำหนดเบื้องต้น
- ความเข้าใจพื้นฐานเกี่ยวกับคอนโซล Google Cloud
- ทักษะพื้นฐานในอินเทอร์เฟซบรรทัดคำสั่งและ Cloud Shell
สิ่งที่คุณจะได้เรียนรู้
- วิธีทำให้ AlloyDB Omni ใช้งานได้ในคลัสเตอร์ Google Kubernetes
- วิธีเชื่อมต่อกับ AlloyDB Omni
- วิธีโหลดข้อมูลไปยัง AlloyDB Omni
- วิธีทำให้โมเดลการฝังแบบเปิดใช้งานได้ใน GKE
- วิธีลงทะเบียนโมเดลการฝังใน AlloyDB Omni
- วิธีสร้างการฝังสําหรับการค้นหาเชิงความหมาย
- วิธีใช้การฝังที่สร้างขึ้นสำหรับการค้นหาเชิงความหมายใน AlloyDB Omni
- วิธีสร้างและใช้ดัชนีเวกเตอร์ใน AlloyDB
สิ่งที่ต้องมี
- บัญชี Google Cloud และโปรเจ็กต์ Google Cloud
- เว็บเบราว์เซอร์ เช่น Chrome ที่รองรับ Google Cloud Console และ Cloud Shell
2. การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าอุปกรณ์พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงหลังจากขั้นตอนนี้ไม่ได้ และชื่อนี้จะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้จะไม่เสียค่าใช้จ่ายมากนัก หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณลบทรัพยากรที่สร้างไว้หรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่ม Cloud Shell
แม้ว่าคุณจะดำเนินการกับ Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้ คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นข้อมูลดังต่อไปนี้
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานบน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานทั้งหมดในโค้ดแล็บนี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย
3. ก่อนเริ่มต้น
เปิดใช้ API
เอาต์พุต:
ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว โดยทำดังนี้
PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
หากไม่ได้กำหนดไว้ในการกำหนดค่า Cloud Shell ให้ตั้งค่าโดยใช้คำสั่งต่อไปนี้
export PROJECT_ID=<your project>
gcloud config set project $PROJECT_ID
เปิดใช้บริการที่จำเป็นทั้งหมด
gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com
ผลลัพธ์ที่คาดหวัง
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.
4. ติดตั้งใช้งาน AlloyDB Omni ใน GKE
หากต้องการติดตั้งใช้งาน AlloyDB Omni ใน GKE เราต้องเตรียมคลัสเตอร์ Kubernetes ตามข้อกำหนดที่ระบุไว้ในข้อกำหนดของโอเปอเรเตอร์ AlloyDB Omni
สร้างคลัสเตอร์ GKE
เราต้องติดตั้งใช้งานคลัสเตอร์ GKE มาตรฐานที่มีการกําหนดค่าพูลที่เพียงพอสําหรับติดตั้งใช้งานพ็อดที่มีอินสแตนซ์ AlloyDB Omni เราต้องใช้ CPU อย่างน้อย 2 ตัวและ RAM 8 GB สำหรับ Omni โดยเหลือพื้นที่ว่างไว้สำหรับบริการของผู้ให้บริการและการตรวจสอบ
ตั้งค่าตัวแปรสภาพแวดล้อมสําหรับการทําให้ใช้งานได้
export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
export MACHINE_TYPE=e2-standard-4
จากนั้นใช้ gcloud เพื่อสร้างคลัสเตอร์ GKE มาตรฐาน
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
ผลลัพธ์ที่คาดหวังในคอนโซล
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)$
เตรียมคลัสเตอร์
เราต้องติดตั้งคอมโพเนนต์ที่จำเป็น เช่น บริการ cert-manager เราสามารถทำตามขั้นตอนในเอกสารประกอบสำหรับการติดตั้ง cert-manager
เราจะใช้เครื่องมือบรรทัดคำสั่งของ Kubernetes อย่าง kubectl ซึ่งติดตั้งไว้ใน Cloud Shell อยู่แล้ว ก่อนที่จะใช้ยูทิลิตีนี้ เราจำเป็นต้องขอข้อมูลเข้าสู่ระบบสำหรับคลัสเตอร์
gcloud container clusters get-credentials ${CLUSTER_NAME} --region=${LOCATION}
ตอนนี้เราใช้ kubectl เพื่อติดตั้ง cert-manager ได้แล้ว
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml
ผลลัพธ์ที่คาดหวังจากคอนโซล(ปกปิดบางส่วน)
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
ติดตั้งโอเปอเรเตอร์ AlloyDB Omni ได้โดยใช้ยูทิลิตี Helm
เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งโอเปอเรเตอร์ AlloyDB Omni
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
ผลลัพธ์ที่คาดหวังจากคอนโซล(ปกปิดบางส่วน)
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 แล้ว เราจะติดตามผลการติดตั้งใช้งานคลัสเตอร์ฐานข้อมูลได้
ต่อไปนี้คือตัวอย่างไฟล์ Manifest ของการติดตั้งใช้งานที่มีพารามิเตอร์ googleMLExtension ที่เปิดใช้และตัวจัดสรรภาระงานภายใน (ส่วนตัว)
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.7.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
ค่าลับของรหัสผ่านคือการแสดงผลแบบ Base64 ของคํารหัสผ่าน "VeryStrongPassword" วิธีที่น่าเชื่อถือกว่าคือการใช้เครื่องมือจัดการข้อมูลลับของ Google เพื่อจัดเก็บค่ารหัสผ่าน อ่านข้อมูลเพิ่มเติมได้ในเอกสารประกอบ
บันทึกไฟล์ Manifest เป็น my-omni.yaml เพื่อใช้ในขั้นตอนถัดไป หากอยู่ใน Cloud Shell คุณจะดำเนินการได้โดยใช้เครื่องมือแก้ไขโดยกดปุ่ม "เปิดเครื่องมือแก้ไข" ที่ด้านขวาบนของเทอร์มินัล
หลังจากบันทึกไฟล์ชื่อ my-omni.yaml แล้ว ให้กลับไปที่เทอร์มินัลโดยกดปุ่ม "เปิดเทอร์มินัล"
ใช้ไฟล์ Manifest my-omni.yaml กับคลัสเตอร์โดยใช้ยูทิลิตี kubectl โดยทำดังนี้
kubectl apply -f my-omni.yaml
ผลลัพธ์ที่คาดหวังในคอนโซล
secret/db-pw-my-omni created dbcluster.alloydbomni.dbadmin.goog/my-omni created
ตรวจสอบสถานะคลัสเตอร์ my-omni โดยใช้ยูทิลิตี kubectl
kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default
ในระหว่างการติดตั้งใช้งาน คลัสเตอร์จะผ่านระยะต่างๆ และควรสิ้นสุดด้วยสถานะ DBClusterReady
ผลลัพธ์ที่คาดหวังในคอนโซล
$ 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
เชื่อมต่อโดยใช้พ็อด Kubernetes
เมื่อคลัสเตอร์พร้อมแล้ว เราจะใช้ไบนารีไคลเอ็นต์ PostgreSQL ในพ็อดอินสแตนซ์ AlloyDB Omni ได้ เราจะค้นหารหัสพ็อด จากนั้นใช้ kubectl เพื่อเชื่อมต่อกับพ็อดโดยตรงและเรียกใช้ซอฟต์แวร์ไคลเอ็นต์ รหัสผ่านคือ VeryStrongPassword ตามที่กําหนดผ่านแฮชใน 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
ตัวอย่างเอาต์พุตคอนโซล
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. ทำให้โมเดล AI ใช้งานได้ใน GKE
หากต้องการทดสอบการผสานรวม AlloyDB Omni AI กับโมเดลในเครื่อง เราต้องทำให้โมเดลใช้งานได้ในคลัสเตอร์
สร้าง Node Pool สําหรับโมเดล
หากต้องการเรียกใช้โมเดล เราต้องเตรียมกลุ่มโหนดเพื่อเรียกใช้การอนุมาน แนวทางที่ดีที่สุดจากมุมมองประสิทธิภาพคือพูลที่มีตัวเร่งกราฟิกโดยใช้การกำหนดค่าโหนด เช่น g2-standard-8 ที่มีตัวเร่ง L4 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
ผลลัพธ์ที่คาดหวัง
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 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 Note: Machines with GPUs have certain limitations which may affect your workflow. Learn more at https://cloud.google.com/kubernetes-engine/docs/how-to/gpus Note: Starting in GKE 1.30.1-gke.115600, if you don't specify a driver version, GKE installs the default GPU driver for your node's GKE version. Creating node pool gpupool...done. Created [https://container.googleapis.com/v1/projects/student-test-001/zones/us-central1/clusters/alloydb-ai-gke/nodePools/gpupool]. NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION gpupool g2-standard-8 100 1.31.4-gke.1183000
เตรียมไฟล์ Manifest สำหรับการทำให้ใช้งานได้
เราต้องเตรียมไฟล์ Manifest สำหรับการทําให้ใช้งานได้เพื่อทำให้โมเดลใช้งานได้
เราใช้โมเดลการฝัง BGE Base v1.5 จาก Hugging Face อ่านการ์ดรูปแบบได้ที่นี่ หากต้องการทำให้โมเดลใช้งานได้ เราสามารถใช้วิธีการที่เตรียมไว้แล้วจาก Hugging Face และแพ็กเกจการทำให้ใช้งานได้จาก GitHub
โคลนแพ็กเกจ
git clone https://github.com/huggingface/Google-Cloud-Containers
แก้ไขไฟล์ Manifest โดยแทนที่ค่า cloud.google.com/gke-accelerator ด้วย nvidia-l4 และเพิ่มขีดจำกัดให้กับทรัพยากร
vi Google-Cloud-Containers/examples/gke/tei-deployment/gpu-config/deployment.yaml
นี่คือไฟล์ Manifest ที่แก้ไขแล้ว
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: Snowflake--snowflake-arctic-embed-m
hf.co/task: text-embeddings
spec:
containers:
- name: tei-container
image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-embeddings-inference-cu122.1-4.ubuntu2204:latest
resources:
requests:
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
env:
- name: MODEL_ID
value: Snowflake/snowflake-arctic-embed-m
- name: NUM_SHARD
value: "1"
- name: PORT
value: "8080"
volumeMounts:
- mountPath: /dev/shm
name: dshm
- mountPath: /data
name: data
volumes:
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 1Gi
- name: data
emptyDir: {}
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-l4
ทำให้โมเดลใช้งานได้
เราต้องเตรียมบัญชีบริการและเนมสเปซสําหรับการติดตั้งใช้งาน
สร้างเนมสเปซ hf-gke-namespace ของ Kubernetes
export NAMESPACE=hf-gke-namespace
kubectl create namespace $NAMESPACE
สร้างบัญชีบริการ Kubernetes
export SERVICE_ACCOUNT=hf-gke-service-account
kubectl create serviceaccount $SERVICE_ACCOUNT --namespace $NAMESPACE
ทำให้โมเดลใช้งานได้
kubectl apply -f Google-Cloud-Containers/examples/gke/tei-deployment/gpu-config
ยืนยันการติดตั้งใช้งาน
kubectl get pods
ยืนยันบริการโมเดล
kubectl get service tei-service
โดยควรจะแสดงประเภทบริการที่ทำงานอยู่ ClusterIP
ตัวอย่างเอาต์พุต
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
CLUSTER-IP สำหรับบริการคือสิ่งที่เราจะใช้เป็นที่อยู่ปลายทาง การฝังโมเดลจะตอบกลับด้วย URI http://34.118.233.48:8080/embed ระบบจะใช้ชื่อนี้ในภายหลังเมื่อคุณลงทะเบียนโมเดลใน AlloyDB Omni
เราทดสอบได้โดยแสดงโดยใช้คําสั่ง kubectl port-forward
kubectl port-forward service/tei-service 8080:8080
การกําหนดค่าการกําหนดเส้นทางพอร์ตจะทํางานในเซสชัน Cloud Shell 1 เซสชัน และเราต้องการเซสชันอื่นเพื่อทดสอบ
เปิดแท็บ Cloud Shell อื่นโดยใช้เครื่องหมาย "+" ที่ด้านบน
และเรียกใช้คำสั่ง curl ในเซสชัน Shell ใหม่
curl http://localhost:8080/embed \
-X POST \
-d '{"inputs":"Test"}' \
-H 'Content-Type: application/json'
ซึ่งควรแสดงผลอาร์เรย์เวกเตอร์ดังตัวอย่างเอาต์พุตต่อไปนี้ (ปกปิดข้อมูลบางส่วน)
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]]
6. ลงทะเบียนโมเดลใน AlloyDB Omni
หากต้องการทดสอบประสิทธิภาพของ AlloyDB Omni กับโมเดลที่ติดตั้งใช้งาน เราต้องสร้างฐานข้อมูลและลงทะเบียนโมเดล
สร้างฐานข้อมูล
สร้าง GCE VM เป็น Jump Box, เชื่อมต่อกับ AlloyDB Omni จาก VM ของลูกค้า และสร้างฐานข้อมูล
เราต้องใช้ Jump Box เนื่องจากตัวจัดสรรภาระงานภายนอก GKE สำหรับ Omni ให้คุณเข้าถึงจาก VPC โดยใช้การกำหนดที่อยู่ IP ส่วนตัว แต่ไม่อนุญาตให้คุณเชื่อมต่อจากภายนอก VPC ซึ่งโดยทั่วไปแล้วจะมีความปลอดภัยมากกว่าและไม่เปิดเผยอินสแตนซ์ฐานข้อมูลของคุณต่ออินเทอร์เน็ต โปรดดูความชัดเจนในแผนภาพ
หากต้องการสร้าง VM ในเซสชัน Cloud Shell ให้ทำดังนี้
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE
ค้นหา IP ของปลายทาง AlloyDB Omni โดยใช้ kubectl ใน Cloud Shell โดยทำดังนี้
kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default
จด PRIMARYENDPOINT ไว้ ดังตัวอย่างต่อไปนี้
output:
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 คือ IP ที่เราจะใช้ในตัวอย่างเพื่อเชื่อมต่อกับอินสแตนซ์ AlloyDB Omni
เชื่อมต่อกับ VM โดยใช้ gcloud
gcloud compute ssh instance-1 --zone=$ZONE
หากได้รับข้อความแจ้งให้สร้างคีย์ SSH ให้ทำตามวิธีการ อ่านเพิ่มเติมเกี่ยวกับการเชื่อมต่อ SSH ในเอกสารประกอบ
ในเซสชัน SSH ไปยัง VM ให้ติดตั้งไคลเอ็นต์ PostgreSQL โดยทำดังนี้
sudo apt-get update
sudo apt-get install --yes postgresql-client
ส่งออก IP ตัวจัดสรรภาระงาน AlloyDB Omni ดังตัวอย่างต่อไปนี้ (แทนที่ IP ด้วย IP ตัวจัดสรรภาระงานของคุณ)
export INSTANCE_IP=10.131.0.33
เชื่อมต่อกับ AlloyDB Omni โดยรหัสผ่านคือ VeryStrongPassword ตามที่กําหนดไว้ผ่านแฮชใน my-omni.yaml
psql "host=$INSTANCE_IP user=postgres sslmode=require"
ในเซสชัน psql ที่ตั้งค่าไว้ ให้เรียกใช้คำสั่งต่อไปนี้
create database demo;
ออกจากเซสชันและเชื่อมต่อกับข้อมูลการสาธิตฐานข้อมูล (หรือจะเรียกใช้ "\c demo" ในเซสชันเดียวกันก็ได้)
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=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;
$$;
เรียกใช้โค้ดที่ระบุขณะเชื่อมต่อกับฐานข้อมูลเดโมตามที่แสดงในตัวอย่างเอาต์พุต
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=#
และนี่คือฟังก์ชันเอาต์พุตที่เปลี่ยนการตอบกลับจากโมเดลเป็นอาร์เรย์จำนวนจริง
-- 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;
$$;
เรียกใช้ในเซสชันเดียวกัน
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=#
ลงทะเบียนโมเดล
ตอนนี้เราลงทะเบียนโมเดลในฐานข้อมูลได้แล้ว
นี่คือการเรียกใช้กระบวนการเพื่อลงทะเบียนโมเดลที่มีชื่อ bge-base-1.5 แทนที่ IP 34.118.233.48 ด้วยที่อยู่ IP ของบริการโมเดล (เอาต์พุตจาก kubectl get service tei-service)
CALL
google_ml.create_model(
model_id => 'bge-base-1.5',
model_request_url => 'http://34.118.233.48: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=# CALL google_ml.create_model( model_id => 'bge-base-1.5', model_request_url => 'http://34.118.233.48: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=#
เราทดสอบโมเดลการลงทะเบียนได้โดยใช้การค้นหาทดสอบต่อไปนี้ ซึ่งควรแสดงผลอาร์เรย์ตัวเลขจริง
select google_ml.embedding('bge-base-1.5','What is AlloyDB Omni?');
7. ทดสอบโมเดลใน AlloyDB Omni
โหลดข้อมูล
เราต้องโหลดข้อมูลบางส่วนเพื่อทดสอบว่า AlloyDB Omni ทำงานร่วมกับโมเดลที่ติดตั้งใช้งานอย่างไร เราใช้ข้อมูลเดียวกับในโค้ดแล็บอื่นๆ สำหรับการค้นหาเวกเตอร์ใน AlloyDB
วิธีหนึ่งในการโหลดข้อมูลคือการใช้ Google Cloud SDK และซอฟต์แวร์ไคลเอ็นต์ PostgreSQL เราสามารถใช้ VM ของไคลเอ็นต์เดียวกันกับที่ใช้สร้างฐานข้อมูลเดโม Google Cloud SDK ควรติดตั้งไว้แล้วหากคุณใช้ค่าเริ่มต้นสำหรับอิมเมจ VM แต่หากคุณใช้รูปภาพที่กำหนดเองโดยไม่มี Google SDK คุณสามารถเพิ่มรูปภาพดังกล่าวได้โดยทำตามเอกสารประกอบ
ส่งออก IP ตัวจัดสรรภาระงาน AlloyDB Omni ดังตัวอย่างต่อไปนี้ (แทนที่ IP ด้วย IP ตัวจัดสรรภาระงานของคุณ)
export INSTANCE_IP=10.131.0.33
เชื่อมต่อกับฐานข้อมูลและเปิดใช้ส่วนขยาย pgvector
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
ในเซสชัน psql ให้ทำดังนี้
CREATE EXTENSION IF NOT EXISTS vector;
ออกจากเซสชัน psql และในเซสชันบรรทัดคำสั่ง ให้เรียกใช้คําสั่งเพื่อโหลดข้อมูลไปยังฐานข้อมูลเดโม
สร้างตาราง
gcloud storage cat gs://cloud-training/gcc/gcc-tech-004/cymbal_demo_schema.sql |psql "host=$INSTANCE_IP user=postgres dbname=demo"
ผลลัพธ์ที่คาดหวังในคอนโซล
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:~$
รายการตารางที่สร้างมีดังนี้
psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "\dt+"
เอาต์พุต:
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
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"
ผลลัพธ์ที่คาดหวังในคอนโซล
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:~$
ต่อไปนี้คือตัวอย่าง 2-3 แถวจากตาราง 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"
เอาต์พุต:
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
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"
ผลลัพธ์ที่คาดหวังในคอนโซล
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:~$
ต่อไปนี้คือตัวอย่าง 2-3 แถวจากตาราง cymbal_inventory
psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT * FROM cymbal_inventory LIMIT 3"
เอาต์พุต:
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
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"
ผลลัพธ์ที่คาดหวังในคอนโซล
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:~$
ต่อไปนี้คือตัวอย่าง 2-3 แถวจากตาราง cymbal_stores
psql "host=$INSTANCE_IP user=postgres dbname=demo" -c "SELECT store_id, name, zip_code FROM cymbal_stores limit 3"
เอาต์พุต:
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:~$
สร้างการฝัง
เชื่อมต่อกับฐานข้อมูลเดโมโดยใช้ psql และสร้างการฝังสําหรับผลิตภัณฑ์ที่อธิบายไว้ในตาราง cymbal_products โดยอิงตามชื่อและรายละเอียดผลิตภัณฑ์
เชื่อมต่อกับฐานข้อมูลเดโม
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
เราใช้ตาราง cymbal_embedding ที่มีการฝังคอลัมน์เพื่อจัดเก็บการฝัง และเราใช้คำอธิบายผลิตภัณฑ์เป็นอินพุตข้อความในฟังก์ชัน
เปิดใช้การกำหนดเวลาการค้นหาเพื่อเปรียบเทียบกับโมเดลระยะไกลในภายหลัง
\timing
เรียกใช้คําค้นหาเพื่อสร้างการฝัง
INSERT INTO cymbal_embedding(uniq_id,embedding) SELECT uniq_id, google_ml.embedding('bge-base-1.5',product_description)::vector FROM cymbal_products;
ผลลัพธ์ที่คาดหวังในคอนโซล
demo=# INSERT INTO cymbal_embedding(uniq_id,embedding) SELECT uniq_id, google_ml.embedding('bge-base-1.5',product_description)::vector FROM cymbal_products; INSERT 0 941 Time: 11069.762 ms (00:11.070) demo=#
ในตัวอย่างนี้ การสร้างการฝังสําหรับระเบียน 941 รายการใช้เวลาประมาณ 11 วินาที
เรียกใช้ข้อความค้นหาทดสอบ
เชื่อมต่อกับฐานข้อมูลเดโมโดยใช้ psql และเปิดใช้การจับเวลาเพื่อวัดเวลาในการดำเนินการของคําค้นหาเช่นเดียวกับการสร้างการฝัง
มาค้นหาผลิตภัณฑ์ 5 อันดับแรกที่ตรงกับคำขออย่าง "ต้นผลไม้ชนิดใดที่ปลูกได้ดีที่นี่" โดยใช้ระยะทางโคไซน์เป็นอัลกอริทึมสำหรับการค้นหาเวกเตอร์
ในเซสชัน psql ให้ดำเนินการต่อไปนี้
SELECT
cp.product_name,
left(cp.product_description,80) as description,
cp.sale_price,
cs.zip_code,
(ce.embedding <=> google_ml.embedding('bge-base-1.5','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;
ผลลัพธ์ที่คาดหวังในคอนโซล
demo=# SELECT cp.product_name, left(cp.product_description,80) as description, cp.sale_price, cs.zip_code, (ce.embedding <=> google_ml.embedding('bge-base-1.5','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 -----------------------+----------------------------------------------------------------------------------+------------+----------+--------------------- California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.22753925487632942 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.23497374266229387 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.24215884459965364 California Redwood | This is a beautiful redwood tree that can grow to be over 300 feet tall. It is a | 1000.00 | 93230 | 0.24564130578287147 Cherry Tree | This is a beautiful cherry tree that will produce delicious cherries. It is an d | 75.00 | 93230 | 0.24846117929767153 (5 rows) Time: 28.724 ms demo=#
การค้นหาใช้เวลา 28 มิลลิวินาทีและแสดงรายการต้นไม้จากตาราง cymbal_products ที่ตรงกับคําขอและมีสินค้าพร้อมจําหน่ายในร้านค้าหมายเลข 1583
สร้างดัชนี ANN
เมื่อเรามีชุดข้อมูลเพียงชุดเล็กๆ ก็ใช้การค้นหาที่ตรงกันทั้งหมดซึ่งจะสแกนการฝังทั้งหมดได้ง่ายๆ แต่เมื่อข้อมูลมีมากขึ้น เวลาในการโหลดและการตอบสนองก็จะเพิ่มขึ้นด้วย คุณสร้างดัชนีในข้อมูลการฝังเพื่อปรับปรุงประสิทธิภาพได้ ต่อไปนี้คือตัวอย่างวิธีดำเนินการโดยใช้ดัชนี Google ScaNN สำหรับข้อมูลเวกเตอร์
เชื่อมต่อกับฐานข้อมูลเดโมอีกครั้งหากขาดการเชื่อมต่อ
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
เปิดใช้ส่วนขยาย alloydb_scann
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
สร้างดัชนี
CREATE INDEX cymbal_embedding_scann ON cymbal_embedding USING scann (embedding cosine);
ลองใช้ข้อความค้นหาเดิมและเปรียบเทียบผลลัพธ์
demo=# SELECT cp.product_name, left(cp.product_description,80) as description, cp.sale_price, cs.zip_code, (ce.embedding <=> google_ml.embedding('bge-base-1.5','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 -----------------------+----------------------------------------------------------------------------------+------------+----------+--------------------- California Sycamore | This is a beautiful sycamore tree that can grow to be over 100 feet tall. It is | 300.00 | 93230 | 0.22753925487632942 Toyon | This is a beautiful toyon tree that can grow to be over 20 feet tall. It is an e | 10.00 | 93230 | 0.23497374266229387 California Peppertree | This is a beautiful peppertree that can grow to be over 30 feet tall. It is an e | 25.00 | 93230 | 0.24215884459965364 California Redwood | This is a beautiful redwood tree that can grow to be over 300 feet tall. It is a | 1000.00 | 93230 | 0.24564130578287147 Fremont Cottonwood | This is a beautiful cottonwood tree that can grow to be over 100 feet tall. It i | 200.00 | 93230 | 0.2533482837690365 (5 rows) Time: 14.665 ms demo=#
เวลาในการเรียกใช้การค้นหาลดลงเล็กน้อย และผลลัพธ์ที่ได้จะสังเกตได้ชัดเจนขึ้นเมื่อใช้ชุดข้อมูลขนาดใหญ่ ผลลัพธ์ค่อนข้างคล้ายกัน และมีเพียงเชอร์รี่เท่านั้นที่ถูกแทนที่ด้วยเฟรมอนต์คอตตอนวูด
ลองใช้ข้อความค้นหาอื่นๆ และอ่านเพิ่มเติมเกี่ยวกับการเลือกดัชนีเวกเตอร์ในเอกสารประกอบ
และอย่าลืมว่า AlloyDB Omni มีฟีเจอร์และห้องทดลองอีกมากมาย
8. ล้างสภาพแวดล้อม
ตอนนี้เราลบคลัสเตอร์ GKE ด้วย AlloyDB Omni และโมเดล AI ได้แล้ว
ลบคลัสเตอร์ GKE
ใน Cloud Shell ให้ดำเนินการต่อไปนี้
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}
ผลลัพธ์ที่คาดหวังในคอนโซล
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
ลบ VM
ใน Cloud Shell ให้ดำเนินการต่อไปนี้
export PROJECT_ID=$(gcloud config get project)
export ZONE=us-central1-a
gcloud compute instances delete instance-1 \
--project=${PROJECT_ID} \
--zone=${ZONE}
ผลลัพธ์ที่คาดหวังในคอนโซล
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
หากสร้างโปรเจ็กต์ใหม่สำหรับ Codelab นี้ คุณสามารถลบโปรเจ็กต์ทั้งหมดแทนได้ที่ https://console.cloud.google.com/cloud-resource-manager
9. ขอแสดงความยินดี
ขอแสดงความยินดีที่ทํา Codelab จนเสร็จสมบูรณ์
สิ่งที่เราได้พูดถึง
- วิธีทำให้ AlloyDB Omni ใช้งานได้ในคลัสเตอร์ Google Kubernetes
- วิธีเชื่อมต่อกับ AlloyDB Omni
- วิธีโหลดข้อมูลไปยัง AlloyDB Omni
- วิธีทำให้โมเดลการฝังแบบเปิดใช้งานได้ใน GKE
- วิธีลงทะเบียนโมเดลการฝังใน AlloyDB Omni
- วิธีสร้างการฝังสําหรับการค้นหาเชิงความหมาย
- วิธีใช้การฝังที่สร้างขึ้นสำหรับการค้นหาเชิงความหมายใน AlloyDB Omni
- วิธีสร้างและใช้ดัชนีเวกเตอร์ใน AlloyDB
อ่านข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับ AI ใน AlloyDB Omni ได้ในเอกสารประกอบ
10. แบบสำรวจ
เอาต์พุต: