ক্লাউড রান জিপিইউ সহ ওল্লামাকে সাইডকার হিসাবে কীভাবে ব্যবহার করবেন এবং ফ্রন্টএন্ড ইনগ্রেস কন্টেইনার হিসাবে ওয়েবইউআই খুলবেন

১. ভূমিকা

সংক্ষিপ্ত বিবরণ

ক্লাউড রান সম্প্রতি জিপিইউ (GPU) সাপোর্ট যুক্ত করেছে। এটি একটি ওয়েটলিস্টভুক্ত পাবলিক প্রিভিউ হিসেবে উপলব্ধ। আপনি যদি এই ফিচারটি ব্যবহার করে দেখতে আগ্রহী হন, তবে ওয়েটলিস্টে যোগ দেওয়ার জন্য এই ফর্মটি পূরণ করুন । ক্লাউড রান হলো গুগল ক্লাউডের একটি কন্টেইনার প্ল্যাটফর্ম, যা আপনাকে কোনো ক্লাস্টার পরিচালনা করার ঝামেলা ছাড়াই খুব সহজে একটি কন্টেইনারে আপনার কোড চালাতে সাহায্য করে।

বর্তমানে, আমরা ২৪ জিবি vRAM সহ Nvidia L4 GPU সরবরাহ করছি। প্রতিটি Cloud Run ইনস্ট্যান্সের জন্য একটি করে GPU রয়েছে এবং Cloud Run-এর অটো স্কেলিং এখনও প্রযোজ্য। এর মধ্যে রয়েছে ৫টি পর্যন্ত ইনস্ট্যান্স স্কেল আউট করা (কোটা বৃদ্ধির সুযোগ সহ), এবং কোনো অনুরোধ না থাকলে ইনস্ট্যান্সের সংখ্যা শূন্যে নামিয়ে আনা।

জিপিইউ ব্যবহারের একটি ক্ষেত্র হলো আপনার নিজস্ব ওপেন লার্জ ল্যাঙ্গুয়েজ মডেল (এলএলএম) চালানো। এই টিউটোরিয়ালটি আপনাকে একটি এলএলএম চালনাকারী সার্ভিস ডেপ্লয় করার পদ্ধতি ধাপে ধাপে দেখাবে।

এই কোডল্যাবে, আপনি একটি মাল্টি-কন্টেইনার সার্ভিস ডেপ্লয় করবেন যা ফ্রন্টএন্ড ইনগ্রেস কন্টেইনার হিসেবে Open WebUI ব্যবহার করে এবং গুগল ক্লাউড স্টোরেজ বাকেটে সংরক্ষিত একটি Gemma 2 2B মডেল সার্ভ করার জন্য সাইডকারে Ollama ব্যবহার করে।

আপনি যা শিখবেন

  • ক্লাউড রানে একাধিক কন্টেইনার পরিষেবা কীভাবে তৈরি করবেন
  • Gemma 2 2B মডেলের সাইডকার হিসেবে Ollama কীভাবে স্থাপন করবেন
  • ফ্রন্টএন্ড ইনগ্রেস কন্টেইনার হিসেবে Open WebUI কীভাবে স্থাপন করবেন

২. এনভায়রনমেন্ট ভেরিয়েবল সেট করুন এবং এপিআই সক্রিয় করুন

gcloud CLI আপগ্রেড করুন

প্রথমত, আপনার gcloud CLI-এর একটি সাম্প্রতিক সংস্করণ ইনস্টল করা থাকতে হবে। আপনি নিম্নলিখিত কমান্ডটি চালিয়ে CLI আপডেট করতে পারেন:

gcloud components update

পরিবেশ ভেরিয়েবল সেটআপ করুন

আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, যা এই কোডল্যাব জুড়ে ব্যবহৃত হবে।

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=us-central1
gcloud config set project $PROJECT_ID

এপিআই সক্ষম করুন

এই কোডল্যাবটি ব্যবহার শুরু করার আগে, আপনাকে কয়েকটি এপিআই (API) সক্রিয় করতে হবে। এই কোডল্যাবটির জন্য নিম্নলিখিত এপিআইগুলো ব্যবহার করা প্রয়োজন। আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সেই এপিআইগুলো সক্রিয় করতে পারেন:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    storage.googleapis.com \
    artifactregistry.googleapis.com

এই কোডল্যাবের জন্য একটি ডিরেক্টরি তৈরি করুন।

mkdir ollama-sidecar-codelab
cd ollama-sidecar-codelab

৩. Gemma 2 2B মডেলটি সংরক্ষণ করার জন্য একটি GCS Bucket তৈরি করুন।

প্রথমে, মডেলটি ডাউনলোড করার জন্য আপনাকে Ollama ইনস্টল করতে হবে। এটি মডেলটিকে /home/$USER/.ollama/models ফোল্ডারে ডাউনলোড করবে।

curl -fsSL https://ollama.com/install.sh | sh

এখন দৌড়ে ওলামাকে চালাও।

ollama serve

ওলামা ১১৪৩৪ পোর্টে শোনা শুরু করে।

Gemma 2 2B মডেলটি ডাউনলোড করতে একটি দ্বিতীয় টার্মিনাল উইন্ডো খুলুন।

ollama pull gemma2:2b

(ঐচ্ছিক) আপনি কমান্ড লাইন থেকে এটি চালিয়ে জেমার সাথে ইন্টারঅ্যাক্ট করতে পারেন।

ollama run gemma2:2b

জেমার সাথে আপনার চ্যাটিং শেষ হলে, টাইপ করে বেরিয়ে যেতে পারেন।

/bye

৪. একটি স্টোরেজ বাকেট তৈরি করুন

মডেলটি ডাউনলোড হয়ে গেলে, আপনি এটিকে আপনার GCS বাকেটে স্থানান্তর করতে পারেন।

প্রথমে বাকেটটি তৈরি করুন।

gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab

এখন, models ফোল্ডারটি GCS-এ সরান।

gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab

৫. ওল্লামার ছবিটি তৈরি করুন।

নিম্নলিখিত বিষয়বস্তু সহ একটি ডকারফাইল তৈরি করুন।

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

আপনার সার্ভিস ইমেজগুলো সংরক্ষণ করার জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপো তৈরি করুন।

gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
    --location=us-central1 --description="Ollama + OpenWebUI website demo" \
    --project=$PROJECT_ID

ওলামা সাইডকারের ছবিটি তৈরি করুন

gcloud builds submit \
   --tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
   --machine-type e2-highcpu-32

৬. ওপেন ওয়েবইউআই ফ্রন্টএন্ড ইমেজ তৈরি করুন

এই অংশে, আপনি Open WebUI ব্যবহার করে ফ্রন্টএন্ড ইনগ্রেস কন্টেইনার তৈরি করবেন।

ডকার ব্যবহার করে Open WebUI ইমেজটি পুল ডাউন করুন।

docker pull ghcr.io/open-webui/open-webui:main

এরপর, আর্টিফ্যাক্ট রেজিস্ট্রির সাথে প্রমাণীকরণের জন্য আপনার গুগল ক্লাউড ক্রেডেনশিয়াল ব্যবহার করতে ডকারকে কনফিগার করুন। এর ফলে আপনি ডকার ব্যবহার করে আর্টিফ্যাক্ট রেজিস্ট্রি রিপোতে একটি ইমেজ পুশ করতে পারবেন।

gcloud auth configure-docker us-central1-docker.pkg.dev

আপনার ছবিতে ট্যাগ যুক্ত করুন এবং তারপর আর্টিফ্যাক্ট রেজিস্ট্রি-তে আপলোড করুন।

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

৭. মাল্টি-কন্টেইনার পরিষেবাটি ক্লাউড রান-এ স্থাপন করুন।

মাল্টি-কন্টেইনার সার্ভিসটি ডিপ্লয় করতে একটি 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

নিম্নলিখিত কমান্ড ব্যবহার করে ক্লাউড রান-এ ডিপ্লয় করুন।

gcloud beta run services replace service.yaml

ক্লাউড রান পরিষেবাটি পরীক্ষা করুন

এখন আপনার ওয়েব ব্রাউজারে সার্ভিস ইউআরএলটি খুলুন।

UI লোড হওয়া সম্পন্ন হলে, 'Select a model'-এর অধীনে Gemma 2 2B বেছে নিন।

এবার জেমাকে একটি প্রশ্ন করুন, যেমন, "আকাশ নীল কেন?"

৮. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!

আমরা ক্লাউড রান ফাংশনগুলির ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।

আমরা যা আলোচনা করেছি

  • ক্লাউড রানে একাধিক কন্টেইনার পরিষেবা কীভাবে তৈরি করবেন
  • Gemma 2 2B মডেলের সাইডকার হিসেবে Ollama কীভাবে স্থাপন করবেন
  • ফ্রন্টএন্ড ইনগ্রেস কন্টেইনার হিসেবে Open WebUI কীভাবে স্থাপন করবেন

৯. পরিষ্কার করুন

অনিচ্ছাকৃত চার্জ এড়াতে (উদাহরণস্বরূপ, যদি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড রান ব্যবহারের বরাদ্দের চেয়ে ক্লাউড রান পরিষেবাগুলো অনিচ্ছাকৃতভাবে বেশিবার চালু করা হয়), আপনি হয় ক্লাউড রানটি অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।

ক্লাউড রান ফাংশনটি ডিলিট করতে, https://console.cloud.google.com/run-এ অবস্থিত ক্লাউড রান ক্লাউড কনসোলে যান এবং ollama-sidecar-codelab সার্ভিসটি ডিলিট করে দিন।

আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।