1. ভূমিকা
এই কোডল্যাবে আপনি শিখবেন কিভাবে GKE তে AlloyDB Omni স্থাপন করতে হয় এবং একই Kubernetes ক্লাস্টারে স্থাপন করা একটি ওপেন এমবেডিং মডেলের সাথে এটি ব্যবহার করতে হয়। একই GKE ক্লাস্টারে ডাটাবেস ইন্সট্যান্সের পাশে একটি মডেল স্থাপন করা 3য় পক্ষের পরিষেবার উপর লেটেন্সি এবং নির্ভরতা হ্রাস করে। এছাড়াও এটি নিরাপত্তা প্রয়োজনীয়তা দ্বারা দাবি করা হতে পারে যখন তথ্য সংস্থা ছেড়ে যাওয়া উচিত নয় এবং 3d পার্টি পরিষেবাগুলির ব্যবহার অনুমোদিত নয়৷
পূর্বশর্ত
- Google ক্লাউড, কনসোলের একটি প্রাথমিক ধারণা
- কমান্ড লাইন ইন্টারফেস এবং ক্লাউড শেলের প্রাথমিক দক্ষতা
আপনি কি শিখবেন
- কিভাবে Google Kubernetes ক্লাস্টারে AlloyDB Omni স্থাপন করবেন
- কিভাবে AlloyDB Omni এর সাথে সংযোগ করতে হয়
- কিভাবে AlloyDB Omni এ ডেটা লোড করবেন
- কিভাবে GKE-তে একটি ওপেন এম্বেডিং মডেল স্থাপন করবেন
- AlloyDB Omni এ এমবেডিং মডেল কীভাবে নিবন্ধন করবেন
- শব্দার্থিক অনুসন্ধানের জন্য কীভাবে এম্বেডিং তৈরি করবেন
- AlloyDB Omni তে শব্দার্থিক অনুসন্ধানের জন্য জেনারেটেড এমবেডিংগুলি কীভাবে ব্যবহার করবেন
- কিভাবে AlloyDB-তে ভেক্টর সূচী তৈরি এবং ব্যবহার করবেন
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড অ্যাকাউন্ট এবং Google ক্লাউড প্রকল্প
- একটি ওয়েব ব্রাউজার যেমন ক্রোম সমর্থন করে গুগল ক্লাউড কনসোল এবং ক্লাউড শেল
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
ক্লাউড শেল শুরু করুন
যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।
Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:
পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারে করা যেতে পারে। আপনার কিছু ইন্সটল করার দরকার নেই।
3. আপনি শুরু করার আগে
API সক্ষম করুন
আউটপুট:
ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রকল্প আইডি সেটআপ করা আছে:
PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
যদি এটি ক্লাউড শেল কনফিগারেশনে সংজ্ঞায়িত না হয় তবে নিম্নলিখিত কমান্ডগুলি ব্যবহার করে এটি সেট আপ করুন
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. GKE তে AlloyDB Omni স্থাপন করুন
GKE তে AlloyDB Omni স্থাপন করতে আমাদের AlloyDB Omni অপারেটরের প্রয়োজনীয়তাগুলির তালিকাভুক্ত প্রয়োজনীয়তাগুলি অনুসরণ করে একটি Kubernetes ক্লাস্টার প্রস্তুত করতে হবে৷
একটি GKE ক্লাস্টার তৈরি করুন
আমাদের একটি পুল কনফিগারেশন সহ একটি স্ট্যান্ডার্ড GKE ক্লাস্টার স্থাপন করতে হবে যা AlloyDB Omni উদাহরণের সাথে একটি পড স্থাপন করার জন্য যথেষ্ট। অপারেটর এবং মনিটরিং পরিষেবাগুলির জন্য কিছু রুম সহ ওমনির জন্য আমাদের কমপক্ষে 2 CPU এবং 8 GB RAM প্রয়োজন৷
আপনার স্থাপনার জন্য পরিবেশ ভেরিয়েবল সেট আপ করুন।
export PROJECT_ID=$(gcloud config get project)
export LOCATION=us-central1
export CLUSTER_NAME=alloydb-ai-gke
export MACHINE_TYPE=e2-standard-4
তারপর আমরা GKE স্ট্যান্ডার্ড ক্লাস্টার তৈরি করতে gcloud ব্যবহার করি।
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)$
ক্লাস্টার প্রস্তুত করুন
আমাদের প্রয়োজনীয় উপাদান যেমন সার্টি-ম্যানেজার পরিষেবা ইনস্টল করতে হবে। আমরা শংসাপত্র-ম্যানেজার ইনস্টলেশনের জন্য ডকুমেন্টেশনের ধাপগুলি অনুসরণ করতে পারি
আমরা Kubernetes কমান্ড-লাইন টুল, kubectl ব্যবহার করি, যা ইতিমধ্যেই ক্লাউড শেলে ইনস্টল করা আছে। ইউটিলিটি ব্যবহার করার আগে আমাদের ক্লাস্টারের জন্য শংসাপত্র পেতে হবে।
gcloud container clusters get-credentials ${CLUSTER_NAME} --region=${LOCATION}
এখন আমরা সার্টি-ম্যানেজার ইনস্টল করতে kubectl ব্যবহার করতে পারি:
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 অপারেটর ইনস্টল করুন হেলম ইউটিলিটি ব্যবহার করে ইনস্টল করা যেতে পারে।
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 অপারেটর ইনস্টল করা হয় তখন আমরা আমাদের ডাটাবেস ক্লাস্টার স্থাপনের সাথে অনুসরণ করতে পারি।
এখানে সক্রিয় googleMLE এক্সটেনশন প্যারামিটার এবং অভ্যন্তরীণ (ব্যক্তিগত) লোড ব্যালেন্সার সহ স্থাপনার ম্যানিফেস্টের উদাহরণ রয়েছে৷:
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
পাসওয়ার্ডের গোপন মান হল পাসওয়ার্ড শব্দ "VeryStrongPassword" এর একটি Base64 উপস্থাপনা। আরও নির্ভরযোগ্য উপায় হল পাসওয়ার্ড মান সংরক্ষণ করতে Google গোপন পরিচালক ব্যবহার করা। আপনি ডকুমেন্টেশনে এটি সম্পর্কে আরও পড়তে পারেন।
পরবর্তী ধাপে প্রয়োগ করার জন্য ম্যানিফেস্টটিকে my-omni.yaml হিসাবে সংরক্ষণ করুন। আপনি যদি ক্লাউড শেলে থাকেন তবে আপনি টার্মিনালের উপরের ডানদিকে "ওপেন এডিটর" বোতাম টিপে সম্পাদক ব্যবহার করে এটি করতে পারেন।
my-omni.yaml নামের ফাইলটি সংরক্ষণ করার পর "ওপেন টার্মিনাল" বোতাম টিপে টার্মিনালে ফিরে যান।
kubectl ইউটিলিটি ব্যবহার করে ক্লাস্টারে my-omni.yaml ম্যানিফেস্ট প্রয়োগ করুন:
kubectl apply -f my-omni.yaml
প্রত্যাশিত কনসোল আউটপুট:
secret/db-pw-my-omni created dbcluster.alloydbomni.dbadmin.goog/my-omni created
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 এর সাথে সংযোগ করুন
কুবারনেটস পড ব্যবহার করে সংযোগ করুন
ক্লাস্টার প্রস্তুত হলে আমরা AlloyDB Omni ইনস্ট্যান্স পডে PostgreSQL ক্লায়েন্ট বাইনারি ব্যবহার করতে পারি। আমরা পড আইডি খুঁজে পাই এবং তারপর সরাসরি পডের সাথে সংযোগ করতে এবং ক্লায়েন্ট সফ্টওয়্যার চালানোর জন্য kubectl ব্যবহার করি। পাসওয়ার্ডটি my-omni.yaml-এ হ্যাশের মাধ্যমে সেট করা VeryStrongPassword:
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. GKE-তে AI মডেল স্থাপন করুন
স্থানীয় মডেলের সাথে AlloyDB Omni AI ইন্টিগ্রেশন পরীক্ষা করার জন্য আমাদের ক্লাস্টারে একটি মডেল স্থাপন করতে হবে।
মডেলের জন্য একটি নোড পুল তৈরি করুন
মডেলটি চালানোর জন্য অনুমান চালানোর জন্য আমাদের একটি নোড পুল প্রস্তুত করতে হবে। পারফরম্যান্সের দৃষ্টিকোণ থেকে সর্বোত্তম পন্থা হল L4 Nvidia এক্সিলারেটরের সাথে g2-standard-8-এর মতো নোড কনফিগারেশন ব্যবহার করে গ্রাফিক অ্যাক্সিলারেটর সহ একটি পুল।
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
ডিপ্লয়মেন্ট ম্যানিফেস্ট প্রস্তুত করুন
মডেলটি স্থাপন করার জন্য আমাদের একটি স্থাপনার ম্যানিফেস্ট প্রস্তুত করতে হবে।
আমরা হাগিং ফেস থেকে BGE বেস v1.5 এমবেডিং মডেল ব্যবহার করছি। আপনি এখানে মডেল কার্ড পড়তে পারেন. মডেলটি মোতায়েন করার জন্য আমরা হাগিং ফেস এবং গিটহাব থেকে স্থাপনার প্যাকেজ থেকে ইতিমধ্যে প্রস্তুত নির্দেশাবলী ব্যবহার করতে পারি।
প্যাকেজ ক্লোন করুন
git clone https://github.com/huggingface/Google-Cloud-Containers
আমাদের nvidia-l4 দ্বারা cloud.google.com/gke-accelerator মান প্রতিস্থাপন করে এবং সংস্থানগুলিতে সীমা যোগ করে ম্যানিফেস্টটি সম্পাদনা করুন৷
vi Google-Cloud-Containers/examples/gke/tei-deployment/gpu-config/deployment.yaml
এখানে একটি সংশোধন করা ম্যানিফেস্ট।
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
মডেল স্থাপন
আমাদের একটি পরিষেবা অ্যাকাউন্ট এবং স্থাপনার জন্য একটি নামস্থান প্রস্তুত করতে হবে৷
একটি kubernetes নামস্থান hf-gke-namespace তৈরি করুন।
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
পোর্ট ফরওয়ার্ডিং একটি ক্লাউড শেল সেশনে চলবে এবং এটি পরীক্ষা করার জন্য আমাদের আরেকটি সেশন প্রয়োজন।
উপরের "+" চিহ্নটি ব্যবহার করে আরেকটি ক্লাউড শেল ট্যাব খুলুন।
এবং নতুন শেল সেশনে একটি কার্ল কমান্ড চালান।
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 তৈরি করুন, আপনার ক্লায়েন্ট VM থেকে AlloyDB Omni এর সাথে সংযোগ করুন এবং একটি ডাটাবেস তৈরি করুন৷
আমাদের জাম্প বক্স দরকার যেহেতু Omni-এর জন্য GKE বাহ্যিক লোড ব্যালেন্সার আপনাকে ব্যক্তিগত আইপি অ্যাড্রেসিং ব্যবহার করে VPC থেকে অ্যাক্সেস দেয় কিন্তু VPC এর বাইরে থেকে সংযোগ করার অনুমতি দেয় না। এটি সাধারণভাবে আরও নিরাপদ এবং ইন্টারনেটে আপনার ডাটাবেস উদাহরণ প্রকাশ করে না। স্পষ্টতার জন্য ডায়াগ্রাম চেক করুন.
ক্লাউড শেল সেশন এক্সিকিউটে একটি VM তৈরি করতে:
export ZONE=us-central1-a
gcloud compute instances create instance-1 \
--zone=$ZONE
ক্লাউড শেল এ kubectl ব্যবহার করে AlloyDB Omni শেষ পয়েন্ট আইপি খুঁজুন:
kubectl get dbclusters.alloydbomni.dbadmin.goog my-omni -n default
PRIMARYENDPOINT লিখে রাখুন। এখানে একটি উদাহরণ.
আউটপুট:
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 উদাহরণের সাথে সংযোগ করতে ব্যবহার করব।
জিক্লাউড ব্যবহার করে ভিএম-এর সাথে সংযোগ করুন:
gcloud compute ssh instance-1 --zone=$ZONE
ssh কী জেনারেশন ফ্লোরের জন্য নির্দেশ দেওয়া হলে। ডকুমেন্টেশনে ssh সংযোগ সম্পর্কে আরও পড়ুন।
VM ইনস্টল করার ssh সেশনে PostgreSQL ক্লায়েন্ট:
sudo apt-get update
sudo apt-get install --yes postgresql-client
নিম্নোক্ত উদাহরণের মতো AlloyDB Omni লোড ব্যালেন্সার আইপি রপ্তানি করুন (আপনার লোড ব্যালেন্সার IP দ্বারা IP প্রতিস্থাপন করুন):
export INSTANCE_IP=10.131.0.33
AlloyDB Omni-এর সাথে কানেক্ট করুন, my-omni.yaml-এ হ্যাশের মাধ্যমে সেট করা পাসওয়ার্ড হল VeryStrongPassword:
psql "host=$INSTANCE_IP user=postgres sslmode=require"
প্রতিষ্ঠিত psql সেশন এক্সিকিউটে:
create database demo;
সেশন থেকে প্রস্থান করুন এবং ডাটাবেস ডেমোতে সংযোগ করুন (অথবা আপনি একই সেশনে "\c ডেমো" চালাতে পারেন)
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
রূপান্তর ফাংশন তৈরি করুন
3য় পক্ষের এমবেডিং মডেলের জন্য আমাদের ট্রান্সফর্ম ফাংশন তৈরি করতে হবে যা ইনপুট এবং আউটপুটকে মডেল এবং আমাদের অভ্যন্তরীণ ফাংশন দ্বারা প্রত্যাশিত ফর্ম্যাটে ফর্ম্যাট করে।
এখানে রূপান্তর ফাংশন যা ইনপুট পরিচালনা করে:
-- 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 নামের সাথে মডেলটিকে নিবন্ধন করার পদ্ধতি কল করা হয়েছে, r আপনার মডেল পরিষেবা আইপি ঠিকানার মাধ্যমে IP 34.118.233.48 প্রতিস্থাপন করুন ( kubectl থেকে আউটপুট পরিষেবা 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 ব্যবহার করতে পারি। আপনি যদি VM ছবির জন্য ডিফল্ট ব্যবহার করে থাকেন তবে Google Cloud SDK সেখানে ইতিমধ্যেই ইনস্টল করা উচিত। কিন্তু আপনি যদি Google SDK ছাড়া একটি কাস্টম ইমেজ ব্যবহার করে থাকেন তাহলে ডকুমেন্টেশন অনুসরণ করে এটি যোগ করতে পারেন।
নিম্নোক্ত উদাহরণের মতো AlloyDB Omni লোড ব্যালেন্সার আইপি রপ্তানি করুন (আপনার লোড ব্যালেন্সার IP দ্বারা IP প্রতিস্থাপন করুন):
export INSTANCE_IP=10.131.0.33
ডাটাবেসের সাথে সংযোগ করুন এবং pgvector এক্সটেনশন সক্রিয় করুন।
psql "host=$INSTANCE_IP user=postgres sslmode=require dbname=demo"
পিএসকিউএল সেশনে:
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:~$
এখানে 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:~$
এখানে 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:~$
এখানে 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 ব্যবহার করে ডেমো ডাটাবেসের সাথে সংযোগ করুন এবং আমাদের প্রশ্নের জন্য নির্বাহের সময় পরিমাপ করার জন্য সময় সক্ষম করুন যেমন আমরা এম্বেডিং তৈরির জন্য করেছি।
আসুন "এখানে কি ধরনের ফলের গাছ ভালভাবে জন্মায়?" ভেক্টর অনুসন্ধানের জন্য অ্যালগরিদম হিসাবে কোসাইন দূরত্ব ব্যবহার করে।
পিএসকিউএল সেশনে এক্সিকিউট করুন:
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 ms চলে এবং অনুরোধের সাথে মিলে যাওয়া 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. পরিবেশ পরিষ্কার করুন
এখন আমরা AlloyDB Omni এবং একটি AI মডেল দিয়ে আমাদের GKE ক্লাস্টার মুছে ফেলতে পারি
GKE ক্লাস্টার মুছুন
ক্লাউড শেল চালান:
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 মুছুন
ক্লাউড শেল চালান:
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
আপনি যদি এই কোডল্যাবের জন্য একটি নতুন প্রকল্প তৈরি করেন, তাহলে আপনি সম্পূর্ণ প্রকল্প মুছে ফেলতে পারেন: https://console.cloud.google.com/cloud-resource-manager
9. অভিনন্দন
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।
আমরা কভার করেছি কি
- কিভাবে Google Kubernetes ক্লাস্টারে AlloyDB Omni স্থাপন করবেন
- কিভাবে AlloyDB Omni এর সাথে সংযোগ করতে হয়
- কিভাবে AlloyDB Omni এ ডেটা লোড করবেন
- কিভাবে GKE-তে একটি ওপেন এম্বেডিং মডেল স্থাপন করবেন
- AlloyDB Omni এ এমবেডিং মডেল কীভাবে নিবন্ধন করবেন
- শব্দার্থিক অনুসন্ধানের জন্য কীভাবে এম্বেডিং তৈরি করবেন
- AlloyDB Omni তে শব্দার্থিক অনুসন্ধানের জন্য জেনারেটেড এমবেডিংগুলি কীভাবে ব্যবহার করবেন
- কিভাবে AlloyDB-তে ভেক্টর সূচী তৈরি এবং ব্যবহার করবেন
আপনি ডকুমেন্টেশনে AlloyDB Omni তে AI এর সাথে কাজ করার বিষয়ে আরও পড়তে পারেন।
10. সমীক্ষা
আউটপুট: