كيفية استخدام Ollama كتطبيق جانبي مع وحدات معالجة الرسومات التي تعمل على السحابة الإلكترونية وOpen WebUI كحاوية إدخال بيانات في الواجهة الأمامية

1. مقدمة

نظرة عامة

أضافت خدمة Cloud Run مؤخرًا إمكانية استخدام وحدات معالجة الرسومات. وهي متاحة كمعاينة عامة ضمن قائمة الانتظار. إذا كنت مهتمًا بتجربة هذه الميزة، يُرجى ملء هذا النموذج للانضمام إلى قائمة الانتظار. ‫Cloud Run هي منصة حاويات على Google Cloud تسهّل تشغيل الرمز البرمجي في حاوية بدون الحاجة إلى إدارة مجموعة.

في الوقت الحالي، وحدات معالجة الرسومات التي نوفّرها هي وحدات معالجة رسومات Nvidia L4 بسعة 24 غيغابايت من ذاكرة الوصول العشوائي للفيديو (vRAM). تتوفّر وحدة معالجة رسومات واحدة لكل مثيل من Cloud Run، ويظلّ التوسيع التلقائي لنطاق Cloud Run ساريًا. ويشمل ذلك توسيع النطاق إلى ما يصل إلى 5 مثيلات (مع إمكانية زيادة الحصة)، بالإضافة إلى تقليل النطاق إلى صفر مثيل عندما لا تكون هناك أي طلبات.

أحد استخدامات وحدات معالجة الرسومات هو تشغيل نماذج اللغة الكبيرة (LLM) المفتوحة الخاصة بك. يرشدك هذا البرنامج التعليمي إلى كيفية نشر خدمة تشغّل نموذج لغة كبيرًا.

في هذا الدرس العملي، ستنشر خدمة متعددة الحاويات تستخدم Open WebUI كحاوية دخول للواجهة الأمامية، وتستخدم Ollama في حاوية جانبية لعرض نموذج Gemma 2 2B المخزّن في حزمة Google Cloud Storage.

ما ستتعلمه

  • كيفية إنشاء خدمة حاويات متعددة في Cloud Run
  • كيفية نشر Ollama كحاوية مشتركة تعرض نموذج Gemma 2 2B
  • كيفية نشر Open WebUI كحاوية دخول للواجهة الأمامية

‫2. ضبط متغيرات البيئة وتفعيل واجهات برمجة التطبيقات

ترقية gcloud CLI

أولاً، يجب تثبيت إصدار حديث من gcloud CLI. يمكنك تعديل واجهة سطر الأوامر من خلال تنفيذ الأمر التالي:

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- إنشاء حزمة في GCS لتخزين نموذج Gemma 2 2B

أولاً، عليك تثبيت 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. إنشاء حزمة Storage

بعد تنزيل النموذج، يمكنك نقله إلى حزمة 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.

استخدِم Docker لسحب صورة Open WebUI.

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

بعد ذلك، يمكنك إعداد Docker لاستخدام بيانات اعتماد Google Cloud للمصادقة باستخدام Artifact Registry. سيسمح لك ذلك باستخدام 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
        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

عدِّل ملف service.yaml لاستبدال PROJECT_ID برقم تعريف مشروعك:

sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml

يمكنك نشر التطبيق على Cloud Run باستخدام الأمر التالي.

gcloud beta run services replace service.yaml

اختبار خدمة Cloud Run

افتح الآن عنوان URL الخاص بالخدمة في متصفّح الويب.

بعد اكتمال تحميل واجهة المستخدم، اختَر Gemma 2 2B ضمن اختيار نموذج.

اطرح على Gemma سؤالاً، مثلاً "لماذا السماء زرقاء؟"

8. تهانينا!

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

ننصحك بمراجعة المستندات حول وظائف Cloud Run.

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

  • كيفية إنشاء خدمة حاويات متعددة في Cloud Run
  • كيفية نشر Ollama كحاوية مشتركة تعرض نموذج Gemma 2 2B
  • كيفية نشر Open WebUI كحاوية دخول للواجهة الأمامية

9- تَنظيم

لتجنُّب الرسوم غير المقصودة (على سبيل المثال، إذا تم استدعاء خدمات Cloud Run مرات أكثر من مخصص استدعاء Cloud Run الشهري في المستوى المجاني)، يمكنك إما حذف Cloud Run أو حذف المشروع الذي أنشأته في الخطوة 2.

لحذف دالة Cloud Run، انتقِل إلى Cloud Run Cloud Console على الرابط https://console.cloud.google.com/run واحذف خدمة ollama-sidecar-codelab.

إذا اخترت حذف المشروع بأكمله، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager، واختيار المشروع الذي أنشأته في الخطوة 2، ثم النقر على "حذف". إذا حذفت المشروع، عليك تغيير المشاريع في Cloud SDK. يمكنك الاطّلاع على قائمة بجميع المشاريع المتاحة من خلال تنفيذ gcloud projects list.