1. परिचय
खास जानकारी
इस कोडलैब में, इवेंट पर आधारित, एसिंक्रोनस एआई प्रोसेसिंग पाइपलाइन बनाने का तरीका बताया गया है. आपको Cloud Run वर्कर पूल पर Ollama का इस्तेमाल करके, एक ओपन-सोर्स मॉडल डिप्लॉय करना होगा. वर्कर पूल, Pub/Sub विषय से मैसेज लेता है और gemma3:4b मॉडल का इस्तेमाल करके उन्हें प्रोसेस करता है.
आपको क्या सीखने को मिलेगा
- Pub/Sub पुल सदस्यता के साथ वर्कर पूल इस्तेमाल करने का तरीका
- वर्कर पूल के तौर पर अनुमान लगाने के लिए, Ollama का इस्तेमाल कैसे करें
2. शुरू करने से पहले
एपीआई चालू करें
इस कोडलैब का इस्तेमाल शुरू करने से पहले, इन एपीआई को चालू करें. इसके लिए, यह कमांड चलाएं:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
pubsub.googleapis.com \
storage.googleapis.com
3. सेटअप और ज़रूरी शर्तें
ज़रूरी संसाधन सेट अप करने के लिए, यह तरीका अपनाएं:
- इस कोडलैब के लिए एनवायरमेंट वैरिएबल सेट करें:
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=<YOUR_REGION>
export BUCKET_NAME=$PROJECT_ID-gemma3-4b
export SERVICE_ACCOUNT_NAME=ollama-worker-sa
export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
export TOPIC_NAME=ollama-prompts
export SUBSCRIPTION_NAME=ollama-prompts-sub
export AR_REPO_NAME=ollama-worker-repo
export PULL_MSG_IMAGE_NAME=pubsub-pull-msg
export OLLAMA_IMAGE_NAME=ollama-coordinator
- वर्कर पूल के लिए सेवा खाता बनाना
gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME} \
--display-name="Ollama Worker Service Account"
- SA को Pub/Sub का ऐक्सेस देना
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
--role="roles/pubsub.subscriber"
- वर्कर पूल इमेज के लिए एआर रिपॉज़िटरी बनाना
gcloud artifacts repositories create ${AR_REPO_NAME} \
--repository-format=docker \
--location=${REGION}
- PubSub विषय और सदस्यता बनाना
gcloud pubsub topics create $TOPIC_NAME
gcloud pubsub subscriptions create $SUBSCRIPTION_NAME --topic $TOPIC_NAME
4. मॉडल को GCS पर डाउनलोड और होस्ट करना
बिल्ड प्रोसेस के दौरान, मॉडल को सीधे कंटेनर में डालने के बजाय, हम Ollama CLI का इस्तेमाल करके मॉडल को लोकल मशीन में डालेंगे. इससे प्रोसेस धीमी और कम असरदार हो सकती है. इसके बाद, मॉडल फ़ाइलों को GCS बकेट में अपलोड करेंगे. इसके बाद, वर्कर पूल इस बकेट को माउंट करेगा, ताकि मॉडल को ऐक्सेस किया जा सके.
- अपने कंप्यूटर पर Ollama इंस्टॉल करें:
Linux पर Ollama को इंस्टॉल करने के लिए, यह कमांड चलाएं. अन्य ऑपरेटिंग सिस्टम के लिए, कृपया Ollama की वेबसाइट पर जाएं.
curl -fsSL https://ollama.com/install.sh | sh
- Ollama सेवा शुरू करें और मॉडल को पुल करें:
सबसे पहले, बैकग्राउंड में Ollama सेवा शुरू करें.
ollama serve &
ollama pull gemma3:4b
- GCS बकेट बनाएं:
पहले सेट किए गए BUCKET_NAME एनवायरमेंट वैरिएबल का इस्तेमाल करके, GCS बकेट बनाएं.
gsutil mb gs://${BUCKET_NAME}
- मॉडल फ़ाइलों को अपने GCS बकेट में अपलोड करें:
Ollama, मॉडल फ़ाइलों को ~/.ollama/models डायरेक्ट्री में सेव करता है. इस डायरेक्ट्री का कॉन्टेंट, अपने GCS बकेट में अपलोड करें. इससे आपके डाउनलोड किए गए सभी मॉडल कॉपी हो जाएंगे.
gsutil -m cp -r ~/.ollama/models/* gs://${BUCKET_NAME}/
- SA को Cloud Storage बकेट का ऐक्सेस देना
gcloud storage buckets add-iam-policy-binding gs://${BUCKET_NAME} \
--member=serviceAccount:${SERVICE_ACCOUNT_EMAIL} \
--role=roles/storage.objectViewer
5. Cloud Run जॉब बनाना
Cloud Run जॉब में दो कंटेनर इस्तेमाल होते हैं:
- ollama-coordinator - इसका इस्तेमाल ollama को होस्ट करने और gemma 3 4B मॉडल को दिखाने के लिए किया जाता है
- pubsub-pull-msg - इसका इस्तेमाल, Pub/Sub सदस्यता से मैसेज पाने और उसे ollama-coordinator कंटेनर को भेजने के लिए किया जाता है
सबसे पहले, आपको ollama-coordinator कंटेनर बनाना होगा.
- कोड लैब के लिए पैरंट डायरेक्ट्री बनाएं:
mkdir codelab-ollama-wp
cd codelab-ollama-wp
- ollama-coordinator कंटेनर के लिए एक डायरेक्ट्री बनाएं
mkdir ollama-coordinator
cd ollama-coordinator
- नीचे दिए गए कॉन्टेंट का इस्तेमाल करके
Dockerfileबनाएं
# Use the official Ollama image as a base image
FROM ollama/ollama
# Expose the port that Ollama listens on
EXPOSE 11434
# Set the entrypoint to start the Ollama server
ENTRYPOINT ["ollama", "serve"]
- ollama कंटेनर बनाना
gcloud builds submit --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}/${OLLAMA_IMAGE_NAME} --timeout=20m
इसके बाद, pubsub-pull-msg कंटेनर बनाएं.
- pubsub-pull-msg कंटेनर के लिए डायरेक्ट्री बनाएं
cd ..
mkdir pubsub-pull-msg
cd pubsub-pull-msg
Dockerfileबनाएं
# Use the official Python image as a base image
FROM python:3.9-slim
# Set the working directory in the container
WORKDIR /app
# Copy the requirements file into the container
COPY requirements.txt .
# Install the required Python packages
RUN pip install --no-cache-dir -r requirements.txt
# Copy the Python script into the container
COPY main.py .
# Set the entrypoint to run the Python script
CMD ["python", "main.py"]
- नीचे दिए गए कॉन्टेंट के साथ
requirements.txtफ़ाइल बनाओ
google-cloud-pubsub
requests
- नीचे दिए गए कॉन्टेंट के साथ
main.pyफ़ाइल बनाओ
import os
import sys
import requests
import json
from google.cloud import pubsub_v1
# --- Main Application Logic ---
print("--- Sidecar container script started ---")
# --- Environment and Configuration ---
project_id = os.environ.get("PROJECT_ID")
subscription_name = os.environ.get("SUBSCRIPTION_NAME")
ollama_api_url = "http://localhost:11434/api/generate"
if not project_id or not subscription_name:
print("FATAL: PROJECT_ID and SUBSCRIPTION_NAME must be set.")
sys.exit(1)
print(f"PROJECT_ID: {project_id}")
print(f"SUBSCRIPTION_NAME: {subscription_name}")
def callback(message):
"""Processes a single Pub/Sub message."""
print(f"Received message ID: {message.message_id}")
try:
prompt = message.data.decode("utf-8")
print(f"Decoded prompt: '{prompt}'")
data = {"model": "gemma3:4b", "prompt": prompt, "stream": False}
print("Sending request to Ollama...")
response = requests.post(ollama_api_url, json=data, timeout=300)
response.raise_for_status()
print("Successfully received response from Ollama.")
ollama_response = response.json()
print(f"Ollama response: {json.dumps(ollama_response)[:200]}...")
message.ack()
print(f"Message {message.message_id} acknowledged.")
except requests.exceptions.RequestException as e:
print(f"Error calling Ollama API: {e}")
message.nack()
print(f"Message {message.message_id} not acknowledged.")
except Exception as e:
print(f"An unexpected error occurred in callback: {e}")
message.nack()
print(f"Message {message.message_id} not acknowledged.")
def main():
"""Starts the Pub/Sub subscriber."""
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_name)
streaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)
print(f"Subscribed to {subscription_path}. Listening for messages...")
try:
# .result() will block indefinitely.
streaming_pull_future.result()
except Exception as e:
print(f"A fatal error occurred in the subscriber: {e}")
streaming_pull_future.cancel()
streaming_pull_future.result()
if __name__ == "__main__":
main()
- अब pubsub-pull-msg कंटेनर बनाएं
gcloud builds submit --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}/${PULL_MSG_IMAGE_NAME}
6. जॉब डिप्लॉय और एक्ज़ीक्यूट करना
इस चरण में, YAML फ़ाइल डिप्लॉय करके Cloud Run जॉब बनाया जाएगा.
yaml फ़ाइल बनाने के लिए, रूट फ़ोल्डर पर जाएं.
cd ..
- नीचे दिए गए कॉन्टेंट के साथ
worker-pool.template.yamlफ़ाइल बनाओ
apiVersion: run.googleapis.com/v1
kind: WorkerPool
metadata:
name: codelab-ollama-wp
labels:
cloud.googleapis.com/location: europe-west1
annotations:
run.googleapis.com/launch-stage: BETA
run.googleapis.com/scalingMode: manual
run.googleapis.com/manualInstanceCount: '1'
run.googleapis.com/gcs-fuse-mounter-enabled: "true"
spec:
template:
metadata:
annotations:
run.googleapis.com/gpu: "1"
run.googleapis.com/gpu-zonal-redundancy-disabled: 'true'
spec:
serviceAccountName: ${SERVICE_ACCOUNT_EMAIL}
nodeSelector:
run.googleapis.com/accelerator: nvidia-l4
volumes:
- name: gcs-bucket
csi:
driver: gcsfuse.run.googleapis.com
readOnly: true
volumeAttributes:
bucketName: ${BUCKET_NAME}
containers:
- image: ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}/${PULL_MSG_IMAGE_NAME}
name: pubsub-pull-msg
env:
- name: PROJECT_ID
value: ${PROJECT_ID}
- name: SUBSCRIPTION_NAME
value: "ollama-prompts-sub"
- name: PYTHONUNBUFFERED
value: "1"
resources:
limits:
cpu: '1'
memory: 1Gi
- image: ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}/${OLLAMA_IMAGE_NAME}
name: ollama-coordinator
env:
- name: OLLAMA_MODELS
value: /mnt/models
volumeMounts:
- name: gcs-bucket
mountPath: /mnt/models
resources:
limits:
cpu: '6'
nvidia.com/gpu: '1'
memory: 16Gi
इसके बाद, पूरी इमेज के यूआरएल तय करें. साथ ही, टेंप्लेट फ़ाइल में मौजूद वैरिएबल को बदलने के लिए sed का इस्तेमाल करें. इससे फ़ाइनल worker-pool.yaml तैयार हो जाएगा.
sed -e "s|\${SERVICE_ACCOUNT_EMAIL}|${SERVICE_ACCOUNT_EMAIL}|g" \
-e "s|\${BUCKET_NAME}|${BUCKET_NAME}|g" \
-e "s|\${PULL_MSG_IMAGE_NAME}|${PULL_MSG_IMAGE_NAME}|g" \
-e "s|\${OLLAMA_IMAGE_NAME}|${OLLAMA_IMAGE_NAME}|g" \
-e "s|\${PROJECT_ID}|${PROJECT_ID}|g" \
-e "s|\${REGION}|${REGION}|g" \
-e "s|\${AR_REPO_NAME}|${AR_REPO_NAME}|g" \
worker-pool.template.yaml > worker-pool.yaml
अब डिप्लॉय किया जा सकता है
gcloud beta run worker-pools replace worker-pool.yaml
और टेस्ट करें
gcloud pubsub topics publish ${TOPIC_NAME} --message="What is 1 + 1?"
इसके बाद, लॉग देखें. आपको एक मिनट इंतज़ार करना पड़ सकता है. इसके अलावा, Cloud Console वर्कर पूल पेज पर जाकर, रीयल टाइम में लॉग देखे जा सकते हैं.
gcloud alpha run worker-pools logs read "codelab-ollama-wp" --limit 10
और आपको इस तरह का मैसेज दिखेगा
Ollama response: {"model": "gemma3:4b", "created_at": "2025-11-06T23:48:39.572079369Z", "response": "1 + 1 = 2\n", ...
7. बधाई हो!
कोडलैब पूरा करने के लिए बधाई!
हमारा सुझाव है कि आप Cloud Run का दस्तावेज़ पढ़ें.
हमने क्या-क्या कवर किया है
- Pub/Sub पुल सदस्यता के साथ Cloud Run वर्कर पूल का इस्तेमाल कैसे करें
- Cloud Run वर्कर पूल के तौर पर अनुमान लगाने के लिए, Ollama का इस्तेमाल कैसे करें
8. व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं. इसके अलावा, प्रोजेक्ट को बनाए रखने और अलग-अलग संसाधनों को मिटाने का विकल्प भी है.
प्रोजेक्ट मिटाना
बिलिंग को बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दें.
प्रोजेक्ट मिटाने के लिए:
- Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे आपको मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.
एक-एक करके संसाधन मिटाना
एक-एक करके संसाधनों को मिटाने के लिए, ये कमांड चलाएं:
- Cloud Run वर्कर पूल मिटाएं:
gcloud beta run worker-pools delete codelab-ollama-wp --region ${REGION}
- GCS बकेट मिटाएं:
gsutil -m rm -r gs://${BUCKET_NAME}
- Pub/Sub सदस्यता और विषय मिटाएं:
gcloud pubsub subscriptions delete ${SUBSCRIPTION_NAME}
gcloud pubsub topics delete ${TOPIC_NAME}
- Artifact Registry की रिपॉज़िटरी मिटाएं:
gcloud artifacts repositories delete ${AR_REPO_NAME} --location=${REGION} --quiet
- सेवा खाता मिटाने के लिए:
gcloud iam service-accounts delete ${SERVICE_ACCOUNT_EMAIL} --quiet
डिवाइस पर मौजूद फ़ाइलें मिटाना
स्थानीय फ़ाइलों को हटाने के लिए, यह तरीका अपनाएं:
- Ollama की लोकल सेवा बंद करना:अगर आपने Ollama को
ollama serve &की मदद से शुरू किया है, तो इसे बंद करने के लिए, इसके प्रोसेस आईडी (पीआईडी) का पता लगाएं. इसके बाद,killकमांड का इस्तेमाल करें.# Find the process ID of the Ollama server pgrep ollama # Replace <PID> with the actual process ID obtained from the previous command kill <PID> - डाउनलोड किए गए मॉडल मिटाने के लिए:
rm -rf ~/.ollama/models
- Ollama को अनइंस्टॉल करने के लिए:
अपने कंप्यूटर से Ollama को अनइंस्टॉल करने के लिए, Ollama की वेबसाइट पर दिए गए निर्देशों का पालन करें.