تشغيل الاستنتاج باستخدام نموذج Gemma على Cloud Run مع وحدة معالجة الرسومات RTX 6000 Pro

1. مقدمة

نظرة عامة

أهداف الدورة التعليمية

  • كيفية نشر نموذج Gemma على وحدة معالجة رسومات RTX 6000 Pro في Cloud Run
  • كيفية تنزيل نموذج بشكل متزامن من Cloud Storage أثناء بدء تشغيل الحاوية

2. الإعداد والمتطلبات

اضبط متغيّرات البيئة التي سيتم استخدامها في هذا الدرس التطبيقي:

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

فعِّل Private Google Access على شبكتك الفرعية لتحسين تحميل نماذج تعلُّم الآلة من Cloud Storage. يمكنك الاطّلاع على مزيد من المعلومات في قسم مستند أفضل الممارسات المتعلّقة بوحدات معالجة الرسومات حول تحميل النماذج من Cloud Storage.

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

3- إعداد Cloud Storage

أولاً، أنشئ حزمة في Cloud Storage لتخزين أوزان النموذج.

إنشاء مجموعة فريدة

# 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

4. استرداد أوزان النموذج

بعد ذلك، نزِّل نموذج Gemma 3 إلى دليل محلي ثم حمِّله إلى حزمة Cloud Storage.

تثبيت Ollama

يمكنك تنفيذ هذا الأمر لتثبيت Ollama:

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

تنزيل النموذج

أنشئ مجلدًا للنموذج الذي تم تنزيله.

mkdir model-weights

ستستخدم علامتَي تبويب في نافذة Terminal لإجراء هذه العملية: إحداهما لتشغيل خادم Ollama والأخرى لاسترداد النموذج.

الوحدة الطرفية 1 (الخادم):

ابدأ تشغيل الخادم من خلال تمرير الموقع الجغرافي للنموذج الذي تم تنزيله. سيستمر تنفيذ هذا الأمر.

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

وحدة التحكّم 2 (العميل): افتح علامة تبويب جديدة في وحدة التحكّم ونزِّل النموذج. يتواصل العميل تلقائيًا مع الخادم الذي يتم تشغيله.

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

العودة إلى الوحدة الطرفية 1: بعد اكتمال التنزيل في الوحدة الطرفية 2، ارجع إلى الوحدة الطرفية 1 واضغط على Ctrl+C لإيقاف الخادم.

التحميل إلى Cloud Storage

الآن حمِّل الأوزان إلى الحزمة. تتعامل أداة gcloud storage تلقائيًا مع عمليات التحميل المتوازية لضمان السرعة.

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

(اختياري) تنظيف الأوزان المحلية

بما أنّ النموذج أصبح الآن في Cloud Storage، عليك إزالة النسخة المحفوظة على الجهاز.

rm -rf model-weights

5- إنشاء الخدمة

أولاً، أنشئ مجلدًا للخدمة.

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

6. النشر على Cloud Run

في هذا القسم، ستنشر الخدمة باستخدام gcloud run deploy. سينشئ هذا الأمر الحاوية من المصدر وينشرها على Cloud Run مع إعدادات وحدة معالجة الرسومات والشبكة اللازمة.

إنشاء حساب خدمة

أنشِئ حساب خدمة مخصّصًا لهذا التطبيق وامنحه الأذونات المطلوبة فقط.

# 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"

إعدادات الشبكة

للحصول على أفضل أداء عند تنزيل نماذج كبيرة، استخدِم الخروج المباشر من سحابة VPC. يتيح ذلك للحاوية الوصول إلى Cloud Storage من خلال شبكة Google الخاصة، ما يؤدي إلى تجاوز الإنترنت المتاح للجميع وبوابات NAT. يتم استخدام العلامات التالية في الأمر gcloud run deploy:

  • --network: تتصل بشبكة default VPC (تأكَّد من توفّر هذه الشبكة وأنّها تتضمّن شبكة فرعية في منطقتك مع تفعيل ميزة "الوصول الخاص إلى Google").
  • --subnet: الشبكة الفرعية المحدّدة في منطقتك (عادةً default في حال استخدام الشبكة التلقائية).
  • --vpc-egress: اضبط القيمة على all-traffic لفرض توجيه جميع الزيارات الخارجة عبر شبكة VPC.

أمر النشر

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

7. اختبار الخدمة

بعد نشر النموذج، يمكنك التفاعل مع نموذج Gemma 3 باستخدام واجهة برمجة التطبيقات Ollama API.

الحصول على عنوان URL للخدمة

استرداد عنوان URL لخدمة Cloud Run التي تم نشرها

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

تشغيل الاستدلال

أرسِل طلبًا إلى النموذج باستخدام curl. يمكنك ضبط "stream": false للحصول على الردّ الكامل في عنصر JSON واحد واستخدام 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'

8. تهانينا!

تهانينا على إكمال هذا الدرس العملي.

ننصحك بمراجعة مستندات Cloud Run.

المواضيع التي تناولناها

  • كيفية نشر نموذج Gemma على وحدة معالجة رسومات RTX 6000 Pro في Cloud Run
  • كيفية تنزيل نموذج بشكل متزامن من Cloud Storage أثناء بدء تشغيل الحاوية

9- تَنظيم

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، يمكنك حذف المشروع أو حذف الموارد الفردية.

الخيار 1: حذف المراجع

حذف خدمة Cloud Run

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

حذف حساب الخدمة

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

حذف حزمة Cloud Storage

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

حذف صورة الحاوية

أنشأ هذا الإصدار صورة حاوية في Artifact Registry. يمكنك العثور على اسم الصورة وحذفها.

أدرِج الصور للعثور على الاسم الدقيق (عادةً 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

الخيار 2: حذف المشروع

لحذف المشروع بأكمله، انتقِل إلى إدارة المراجع، واختَر المشروع الذي أنشأته في الخطوة 2، ثم انقر على "حذف". إذا حذفت المشروع، عليك تغيير المشاريع في Cloud SDK. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تنفيذ gcloud projects list.