1. परिचय
खास जानकारी
Cloud Run में, हाल ही में जीपीयू इस्तेमाल करने की सुविधा जोड़ी गई है. यह सुविधा, Public Preview के तौर पर उपलब्ध है. इसके लिए, आपको इंतज़ार करना पड़ सकता है. अगर आपको इस सुविधा को आज़माना है, तो वेटलिस्ट में शामिल होने के लिए यह फ़ॉर्म भरें. Cloud Run, Google Cloud पर एक कंटेनर प्लैटफ़ॉर्म है. इसकी मदद से, कंटेनर में कोड को आसानी से चलाया जा सकता है. इसके लिए, आपको क्लस्टर मैनेज करने की ज़रूरत नहीं होती.
फ़िलहाल, हम 24 जीबी वीआरएएम वाले Nvidia L4 जीपीयू उपलब्ध कराते हैं. Cloud Run के हर इंस्टेंस के लिए एक जीपीयू होता है. साथ ही, Cloud Run की ऑटो स्केलिंग की सुविधा अब भी लागू होती है. इसमें ज़्यादा से ज़्यादा पांच इंस्टेंस तक स्केल आउट करने की सुविधा शामिल है. साथ ही, अनुरोध न होने पर इंस्टेंस की संख्या को घटाकर शून्य करने की सुविधा भी शामिल है. कोटे में बढ़ोतरी भी की जा सकती है.
जीपीयू का एक इस्तेमाल, ओपन लार्ज लैंग्वेज मॉडल (एलएलएम) को चलाना है. इस ट्यूटोरियल में, एलएलएम को चलाने वाली सेवा को डिप्लॉय करने का तरीका बताया गया है.
इस कोडलैब में, आपको एक ऐसी मल्टी-कंटेनर सेवा डिप्लॉय करनी होगी जो Open WebUI को फ़्रंटएंड इनग्रेस कंटेनर के तौर पर इस्तेमाल करती है. साथ ही, Google Cloud Storage बकेट में सेव किए गए Gemma 2 2B मॉडल को दिखाने के लिए, साइडकार में Ollama का इस्तेमाल करती है.
आपको क्या सीखने को मिलेगा
- Cloud Run में एक से ज़्यादा कंटेनर वाली सेवा बनाने का तरीका
- Gemma 2 2B मॉडल के साथ Ollama को साइडकार के तौर पर डिप्लॉय करने का तरीका
- Open WebUI को फ़्रंटएंड इनग्रेस कंटेनर के तौर पर डिप्लॉय करने का तरीका
2. एनवायरमेंट वैरिएबल सेट करना और एपीआई चालू करना
gcloud सीएलआई को अपग्रेड करना
सबसे पहले, आपको gcloud सीएलआई का नया वर्शन इंस्टॉल करना होगा. सीएलआई को अपडेट करने के लिए, यह कमांड चलाएं:
gcloud components update
एनवायरमेंट वैरिएबल सेट अप करना
ऐसे एनवायरमेंट वैरिएबल सेट किए जा सकते हैं जिनका इस्तेमाल इस कोडलैब में किया जाएगा.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
एपीआई चालू करें
इस कोडलैब का इस्तेमाल करने से पहले, आपको कई एपीआई चालू करने होंगे. इस कोडलैब के लिए, इन एपीआई का इस्तेमाल करना ज़रूरी है. इन एपीआई को चालू करने के लिए, यह कमांड चलाएं:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
इस कोडलैब के लिए एक डायरेक्ट्री बनाएं.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Gemma 2 2B मॉडल को सेव करने के लिए, GCS बकेट बनाना
मॉडल डाउनलोड करने के लिए, सबसे पहले Ollama इंस्टॉल करें. इससे मॉडल, /home/$USER/.ollama/models पर डाउनलोड हो जाएगा
curl -fsSL https://ollama.com/install.sh | sh
अब यह कमांड चलाकर, ollama को चलाएं
ollama serve
Ollama, पोर्ट 11434 पर सुनना शुरू कर देता है.
Gemma 2 2B मॉडल को पुल करने के लिए, दूसरी टर्मिनल विंडो खोलें
ollama pull gemma2:2b
(ज़रूरी नहीं) कमांड लाइन से Gemma के साथ इंटरैक्ट करने के लिए, यह कमांड चलाएं
ollama run gemma2:2b
Gemma से चैट पूरी होने के बाद, चैट से बाहर निकलने के लिए
/bye
4. कोई स्टोरेज बकेट बनाना
मॉडल डाउनलोड हो जाने के बाद, उसे अपने GCS बकेट में ले जाएं.
सबसे पहले, बकेट बनाएं.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
अब मॉडल फ़ोल्डर को GCS में ले जाएं.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Ollama इमेज बनाना
नीचे दिए गए कॉन्टेंट के साथ एक Dockerfile बनाएं
FROM --platform=linux/amd64 ollama/ollama # Listen on all interfaces, port 11434 ENV OLLAMA_HOST 0.0.0.0:11434 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1
अपनी सेवा की इमेज सेव करने के लिए, Artifact Registry रेपो बनाएं.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
ollama साइडकार इमेज बनाएं
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. Open WebUI के फ़्रंटएंड की इमेज बनाना
इस सेक्शन में, Open WebUI का इस्तेमाल करके फ़्रंटएंड इनग्रेस कंटेनर बनाया जाएगा.
Open WebUI इमेज को पुल करने के लिए, Docker का इस्तेमाल करें.
docker pull ghcr.io/open-webui/open-webui:main
इसके बाद, Docker को कॉन्फ़िगर करें, ताकि वह Artifact Registry से पुष्टि करने के लिए आपके Google Cloud क्रेडेंशियल का इस्तेमाल कर सके. इससे, Artifact Registry repo में इमेज पुश करने के लिए, Docker का इस्तेमाल किया जा सकेगा.
gcloud auth configure-docker us-central1-docker.pkg.dev
अपनी इमेज को टैग करें. इसके बाद, इसे Artifact Registry में पुश करें.
docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui
7. मल्टी-कंटेनर सेवा को Cloud Run पर डिप्लॉय करना
एक से ज़्यादा कंटेनर वाली सेवा को डिप्लॉय करने के लिए, YAML फ़ाइल का इस्तेमाल करना
नीचे दिए गए कॉन्टेंट के साथ एक service.yaml बनाएं.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ollama-sidecar-codelab
labels:
cloud.googleapis.com/location: us-central1
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: '5'
run.googleapis.com/cpu-throttling: 'false'
run.googleapis.com/startup-cpu-boost: 'true'
run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
spec:
containerConcurrency: 80
timeoutSeconds: 300
containers:
- name: openwebui
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
ports:
- name: http1
containerPort: 8080
env:
- name: OLLAMA_BASE_URL
value: http://localhost:11434
- name: WEBUI_AUTH
value: 'false'
resources:
limits:
memory: 1Gi
cpu: 2000m
volumeMounts:
- name: in-memory-1
mountPath: /app/backend/data
startupProbe:
timeoutSeconds: 240
periodSeconds: 240
failureThreshold: 1
tcpSocket:
port: 8080
- name: ollama-sidecar
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
env:
- name: OLLAMA_MODELS
value: /root/.ollama/models
resources:
limits:
cpu: '6'
nvidia.com/gpu: '1'
memory: 16Gi
volumeMounts:
- name: gcs-1
mountPath: /root/.ollama
startupProbe:
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
tcpSocket:
port: 11434
volumes:
- name: gcs-1
csi:
driver: gcsfuse.run.googleapis.com
volumeAttributes:
bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
- name: in-memory-1
emptyDir:
medium: Memory
sizeLimit: 10Gi
nodeSelector:
run.googleapis.com/accelerator: nvidia-l4
PROJECT_ID की जगह अपना प्रोजेक्ट आईडी डालने के लिए, service.yaml फ़ाइल को अपडेट करें:
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
यहां दिए गए कमांड का इस्तेमाल करके, Cloud Run पर डिप्लॉय करें.
gcloud beta run services replace service.yaml
Cloud Run सेवा की जांच करना
अब अपने वेब ब्राउज़र में सेवा का यूआरएल खोलें.
यूज़र इंटरफ़ेस (यूआई) के पूरी तरह से लोड हो जाने के बाद, कोई मॉडल चुनें में जाकर, Gemma 2 2B चुनें.
अब Gemma से कोई सवाल पूछें. उदाहरण के लिए, "आसमान नीला क्यों होता है?"
8. बधाई हो!
कोडलैब पूरा करने के लिए बधाई!
हमारा सुझाव है कि Cloud Run फ़ंक्शन से जुड़े दस्तावेज़ देखें
हमने क्या-क्या बताया
- Cloud Run में एक से ज़्यादा कंटेनर वाली सेवा बनाने का तरीका
- Gemma 2 2B मॉडल के साथ Ollama को साइडकार के तौर पर डिप्लॉय करने का तरीका
- Open WebUI को फ़्रंटएंड इनग्रेस कंटेनर के तौर पर डिप्लॉय करने का तरीका
9. व्यवस्थित करें
अनचाहे शुल्क से बचने के लिए, Cloud Run को मिटा दें या दूसरे चरण में बनाए गए प्रोजेक्ट को मिटा दें. उदाहरण के लिए, अगर Cloud Run की सेवाओं को मुफ़्त टियर में Cloud Run के लिए तय की गई सीमा से ज़्यादा बार इस्तेमाल किया जाता है, तो अनचाहे शुल्क लग सकते हैं.
Cloud Run फ़ंक्शन को मिटाने के लिए, Cloud Run Cloud Console पर जाएं. इसके लिए, https://console.cloud.google.com/run पर जाएं और ollama-sidecar-codelab सेवा को मिटाएं.
अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और मिटाएं को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.