RTX 6000 Pro GPU সহ Cloud Run-এ একটি Gemma মডেল ব্যবহার করে অনুমান চালান

১. ভূমিকা

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

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

  • Cloud Run RTX 6000 Pro GPU-তে কীভাবে একটি Gemma মডেল স্থাপন করবেন
  • কন্টেইনার চালু হওয়ার সময় ক্লাউড স্টোরেজ থেকে একযোগে একটি মডেল কীভাবে ডাউনলোড করবেন

২. সেটআপ এবং প্রয়োজনীয়তা

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

export PROJECT_ID=<YOUR_PROJECT_ID>

export REGION=europe-west4
export SERVICE_NAME=gemma-rtx-codelab

# set the project
gcloud config set project $PROJECT_ID

এই কোডল্যাবের জন্য প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন।

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

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

mkdir codelab-rtx
cd codelab-rtx

ক্লাউড স্টোরেজ থেকে এমএল মডেল লোডিং অপ্টিমাইজ করতে আপনার সাবনেটে প্রাইভেট গুগল অ্যাক্সেস সক্ষম করুন। ক্লাউড স্টোরেজ থেকে মডেল লোড করার বিষয়ে আপনি জিপিইউ বেস্ট প্র্যাকটিসেস ডক সেকশনে আরও জানতে পারবেন।

gcloud compute networks subnets update default \
  --region=europe-west4 \
  --enable-private-ip-google-access

৩. ক্লাউড স্টোরেজ সেটআপ করুন

প্রথমে, মডেলের ওয়েটগুলো সংরক্ষণ করার জন্য একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন।

একটি অনন্য বালতি তৈরি করুন

# Generate a unique bucket name
export MODEL_BUCKET="${PROJECT_ID}-rtx-codelab-$(python3 -c 'import uuid; print(str(uuid.uuid4())[:8])')"
echo "Bucket name: $MODEL_BUCKET"

# Create the regional bucket
gcloud storage buckets create gs://$MODEL_BUCKET \
    --location=$REGION \
    --uniform-bucket-level-access

৪. মডেলের ওজন পুনরুদ্ধার করুন

এরপরে, জেমা ৩ মডেলটি একটি স্থানীয় ডিরেক্টরিতে ডাউনলোড করুন এবং তারপরে এটি আপনার ক্লাউড স্টোরেজ বাকেটে আপলোড করুন।

ওলামা ইনস্টল করুন

ওলামা ইনস্টল করতে আপনি এই কমান্ডটি চালাতে পারেন:

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

মডেল ডাউনলোড করুন

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

mkdir model-weights

এই প্রক্রিয়ার জন্য আপনি দুটি টার্মিনাল ট্যাব ব্যবহার করবেন: একটি ওলামা সার্ভার চালানোর জন্য এবং অন্যটি মডেলটি নেওয়ার জন্য।

টার্মিনাল ১ (সার্ভার):

ডাউনলোড করা মডেলের অবস্থান উল্লেখ করে সার্ভারটি চালু করুন। এই কমান্ডটি চলতে থাকবে।

OLLAMA_MODELS=$(pwd)/model-weights ollama serve

টার্মিনাল ২ (ক্লায়েন্ট): একটি নতুন টার্মিনাল ট্যাব খুলুন এবং মডেলটি ডাউনলোড করুন। ক্লায়েন্ট স্বয়ংক্রিয়ভাবে চলমান সার্ভারের সাথে যোগাযোগ করে।

# note if you wish to use a larger model, you can change this to gemma3:27b
ollama pull gemma3:1b

টার্মিনাল ১-এ ফিরে: টার্মিনাল ২-এ ডাউনলোড সম্পূর্ণ হয়ে গেলে, টার্মিনাল ১-এ ফিরে এসে সার্ভারটি বন্ধ করতে Ctrl+C চাপুন।

ক্লাউড স্টোরেজে আপলোড করুন

এখন ওজনগুলো আপনার বাকেটে আপলোড করুন। দ্রুততার জন্য gcloud storage স্বয়ংক্রিয়ভাবে সমান্তরাল আপলোড পরিচালনা করে।

gcloud storage cp -r ./model-weights/* gs://$MODEL_BUCKET/

(ঐচ্ছিক) স্থানীয় ওজন পরিষ্কার করুন

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

rm -rf model-weights

৫. পরিষেবাটি তৈরি করুন

প্রথমে, সার্ভিসটির জন্য একটি ফোল্ডার তৈরি করুন।

mkdir rtx-service
cd rtx-service

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

FROM ollama/ollama:latest

# Install Google Cloud CLI
RUN apt-get update && apt-get install -y curl gnupg && \
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - && \
    apt-get update && apt-get install -y google-cloud-cli && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 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

# Copy and set up the startup script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Start using the entrypoint script
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh নামে একটি ফাইল তৈরি করুন এবং তাতে নিম্নলিখিত বিষয়বস্তু যোগ করুন:

#!/bin/bash
set -e

# Ensure OLLAMA_MODELS directory exists
mkdir -p $OLLAMA_MODELS

# Download model weights from GCS if MODEL_BUCKET is set
if [ -n "$MODEL_BUCKET" ]; then
  echo "Downloading model weights from gs://$MODEL_BUCKET..."
  # gcloud storage handles concurrent downloads automatically
  gcloud storage cp -r "gs://$MODEL_BUCKET/*" "$OLLAMA_MODELS/"
else
  echo "MODEL_BUCKET not set. Skipping download."
fi

# Start Ollama
exec ollama serve

৬. ক্লাউড রানে স্থাপন করুন

এই অংশে, আপনি gcloud run deploy কমান্ড ব্যবহার করে সার্ভিসটি ডেপ্লয় করবেন। এই কমান্ডটি সোর্স থেকে আপনার কন্টেইনারটি বিল্ড করবে এবং প্রয়োজনীয় জিপিইউ ও নেটওয়ার্ক কনফিগারেশনসহ ক্লাউড রান-এ ডেপ্লয় করবে।

পরিষেবা অ্যাকাউন্ট তৈরি করুন

এই অ্যাপ্লিকেশনটির জন্য একটি নির্দিষ্ট সার্ভিস অ্যাকাউন্ট তৈরি করুন এবং এটিকে শুধুমাত্র প্রয়োজনীয় অনুমতিগুলো প্রদান করুন।

# Create a dedicated service account
gcloud iam service-accounts create rtx-codelab-identity \
    --display-name="RTX Codelab Identity"

# Grant permission to read from the model bucket
gcloud storage buckets add-iam-policy-binding gs://$MODEL_BUCKET \
    --member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/storage.objectViewer"

# Grant access to the Compute Engine network for the Cloud Run service identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com" \
     --role="roles/compute.networkUser"

# Grant access to the Compute Engine network for the default service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
 --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')@serverless-robot-prod.iam.gserviceaccount.com" \
 --role="roles/compute.networkUser"

নেটওয়ার্ক কনফিগারেশন

বড় মডেল ডাউনলোড করার সময় সর্বোত্তম পারফরম্যান্সের জন্য, Direct VPC Egress ব্যবহার করুন। এটি কন্টেইনারকে পাবলিক ইন্টারনেট এবং NAT গেটওয়ে বাইপাস করে গুগল প্রাইভেট নেটওয়ার্কের মাধ্যমে ক্লাউড স্টোরেজ অ্যাক্সেস করার সুযোগ দেয়। gcloud run deploy কমান্ডে নিম্নলিখিত ফ্ল্যাগগুলি ব্যবহৃত হয়:

  • --network : default VPC-এর সাথে সংযোগ স্থাপন করে (নিশ্চিত করুন যে এই নেটওয়ার্কটি বিদ্যমান এবং আপনার অঞ্চলে এর একটি সাবনেট রয়েছে যেখানে প্রাইভেট গুগল অ্যাক্সেস সক্রিয় করা আছে)।
  • --subnet : আপনার অঞ্চলের নির্দিষ্ট সাবনেট (ডিফল্ট নেটওয়ার্ক ব্যবহার করলে এটি সাধারণত default )।
  • --vpc-egress : সমস্ত বহির্গামী ট্র্যাফিককে VPC-এর মধ্য দিয়ে যেতে বাধ্য করতে এটিকে all-traffic এ সেট করুন।

মোতায়েন কমান্ড

gcloud beta run deploy $SERVICE_NAME \
    --source . \
    --region $REGION \
    --project $PROJECT_ID \
    --no-allow-unauthenticated \
    --port 11434 \
    --service-account rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
    --cpu 20 --memory 80Gi \
    --gpu 1 \
    --gpu-type nvidia-rtx-pro-6000 \
    --set-env-vars MODEL_BUCKET=$MODEL_BUCKET \
    --network default \
    --subnet default \
    --vpc-egress all-traffic \
    --no-gpu-zonal-redundancy

৭. পরিষেবাটি পরীক্ষা করুন

একবার স্থাপন করা হয়ে গেলে, আপনি Ollama API ব্যবহার করে আপনার Gemma 3 মডেলের সাথে যোগাযোগ করতে পারবেন।

পরিষেবার URL পান

আপনার ডেপ্লয় করা ক্লাউড রান সার্ভিসের URL-টি পুনরুদ্ধার করুন।

SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
echo "Service URL: $SERVICE_URL"

রান ইনফারেন্স

curl ব্যবহার করে মডেলে একটি প্রম্পট পাঠান। সম্পূর্ণ প্রতিক্রিয়াটি একটি একক JSON অবজেক্টে পেতে আপনি "stream": false সেট করতে পারেন এবং শুধু টেক্সটটি বের করার জন্য jq ব্যবহার করতে পারেন।

দ্রষ্টব্য: আপনি যদি gemma3:27b-এর মতো কোনো বড় মডেল ব্যবহার করেন, তাহলে আপনাকে নিচের json-এ মডেলের নামটি পরিবর্তন করতে হবে।

curl -s "$SERVICE_URL/api/generate" \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "gemma3:1b",
  "prompt": "Why is the sky blue?",
  "stream": false
}' | jq -r '.response'

৮. অভিনন্দন!

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

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

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

  • Cloud Run RTX 6000 Pro GPU-তে কীভাবে একটি Gemma মডেল স্থাপন করবেন
  • কন্টেইনার চালু হওয়ার সময় ক্লাউড স্টোরেজ থেকে একযোগে একটি মডেল কীভাবে ডাউনলোড করবেন

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

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, আপনি প্রজেক্টটি অথবা স্বতন্ত্র রিসোর্সগুলো ডিলিট করে দিতে পারেন।

বিকল্প ১: রিসোর্স মুছে ফেলুন

ক্লাউড রান পরিষেবাটি মুছে ফেলুন

gcloud run services delete $SERVICE_NAME \
      --region $REGION \
      --quiet

সার্ভিস অ্যাকাউন্টটি মুছে ফেলুন

gcloud iam service-accounts delete \
      rtx-codelab-identity@$PROJECT_ID.iam.gserviceaccount.com \
      --quiet

ক্লাউড স্টোরেজ বাকেটটি মুছে ফেলুন

gcloud storage rm --recursive gs://$MODEL_BUCKET

কন্টেইনার ইমেজটি মুছে ফেলুন

এই বিল্ডটি আর্টিফ্যাক্ট রেজিস্ট্রি-তে একটি কন্টেইনার ইমেজ তৈরি করেছে। আপনি ইমেজটির নাম খুঁজে নিয়ে তা মুছে ফেলতে পারেন।

সঠিক নামটি খুঁজে পেতে ছবিগুলো তালিকাভুক্ত করুন (সাধারণত gcr.io/PROJECT_ID/SERVICE_NAME)

gcloud container images list --filter="name:$SERVICE_NAME"

ছবিটি মুছে ফেলুন (উপরের ফলাফল দিয়ে IMAGE_NAME প্রতিস্থাপন করুন)।

gcloud container images delete <IMAGE_NAME> --force-delete-tags

বিকল্প ২: প্রজেক্টটি মুছে ফেলুন

সম্পূর্ণ প্রজেক্টটি ডিলিট করতে, 'Manage Resources'- এ যান, ধাপ ২-এ তৈরি করা প্রজেক্টটি সিলেক্ট করুন এবং 'Delete' বেছে নিন। প্রজেক্টটি ডিলিট করলে, আপনাকে আপনার Cloud SDK-তে প্রজেক্ট পরিবর্তন করতে হবে। gcloud projects list চালিয়ে আপনি সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।