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

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 कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.