Cloud Run जीपीयू के साथ साइडकार के तौर पर Ollama को और फ़्रंटएंड इन्ग्रेस कंटेनर के तौर पर Open WebUI का इस्तेमाल करने का तरीका

1. परिचय

खास जानकारी

Cloud Run में हाल ही में जीपीयू की सुविधा जोड़ी गई है. यह वेटलिस्ट में शामिल लोगों के लिए उपलब्ध झलक के तौर पर उपलब्ध है. अगर आपको इस सुविधा का इस्तेमाल करना है, तो वेटलिस्ट में शामिल होने के लिए यह फ़ॉर्म भरें. Cloud Run, Google Cloud पर मौजूद एक कंटेनर प्लैटफ़ॉर्म है. इसकी मदद से, क्लस्टर को मैनेज किए बिना, कंटेनर में अपना कोड आसानी से चलाया जा सकता है.

फ़िलहाल, हम 24 जीबी के vRAM वाले Nvidia L4 जीपीयू उपलब्ध कराते हैं. हर Cloud Run इंस्टेंस में एक जीपीयू होता है. साथ ही, Cloud Run की ऑटो स्केलिंग की सुविधा अब भी लागू होती है. इसमें कोटा बढ़ाने के साथ-साथ, कोई अनुरोध न होने पर शून्य इंस्टेंस तक स्केल करना शामिल है.

जीपीयू के लिए इस्तेमाल का एक उदाहरण, अपने ओपन लार्ज लैंग्वेज मॉडल (एलएलएम) का इस्तेमाल करना है. इस ट्यूटोरियल में, एलएलएम चलाने वाली सेवा को डिप्लॉय करने का तरीका बताया गया है.

इस कोडलैब में, आपको एक मल्टी-कंटेनर सेवा डिप्लॉय करनी होगी. यह सेवा, Open WebUI का इस्तेमाल फ़्रंटएंड इन्ग्रेस कंटेनर के तौर पर करती है. साथ ही, Google Cloud Storage बकेट में स्टोर किए गए Gemma 2 2B मॉडल को इस्तेमाल करने के लिए, साइडकार में ओलामा का इस्तेमाल करती है.

आपको इनके बारे में जानकारी मिलेगी

  • Cloud Run में एक से ज़्यादा कंटेनर वाली सेवा बनाने का तरीका
  • Gemma 2 2B मॉडल की सेवा देने वाली साइडकार के तौर पर ओलामा को कैसे डिप्लॉय करें
  • 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 serve

ओलामा ने पोर्ट 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 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 

# Store the model weights in the container image
ENV MODEL gemma2:2b
RUN ollama serve & sleep 5 && ollama pull $MODEL 

# Start Ollama
ENTRYPOINT ["ollama", "serve"]

अपनी सेवा की इमेज सेव करने के लिए, आर्टफ़ैक्ट रजिस्ट्री का एक रिपॉज़िटरी बनाएं.

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

इसके बाद, Artifact Registry से पुष्टि करने के लिए, अपने Google Cloud क्रेडेंशियल का इस्तेमाल करने के लिए Docker को कॉन्फ़िगर करें. इससे आपको Artifact Registry के रेपो में इमेज को पुश करने के लिए डॉकर का इस्तेमाल करने की सुविधा मिल जाएगी.

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
        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 मॉडल की सेवा देने वाली साइडकार के तौर पर ओलामा को कैसे डिप्लॉय करें
  • Open WebUI को फ़्रंटएंड इन्ग्रेस कंटेनर के तौर पर डिप्लॉय करने का तरीका

9. व्यवस्थित करें

अनजाने में लगने वाले शुल्कों से बचने के लिए, (उदाहरण के लिए, अगर Cloud Run सेवाओं का अनुरोध अनजाने में फ़्री टियर में हर महीने Cloud Run ऐप्लिकेशन के लिए असाइन किए जाने की संख्या से ज़्यादा हो), तो आप या तो Cloud Run को मिटा सकते हैं या दूसरे चरण में बनाए गए प्रोजेक्ट को मिटा सकते हैं.

Cloud Run फ़ंक्शन को मिटाने के लिए, https://console.cloud.google.com/run पर Cloud Run Cloud Console पर जाएं और ollama-sidecar-codelab सेवा को मिटाएं.

अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं और दूसरे चरण में बनाया गया प्रोजेक्ट चुनें. इसके बाद, 'मिटाएं' चुनें. अगर प्रोजेक्ट मिटाया जाता है, तो आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.