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

1. مقدمة

نظرة عامة

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

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

من حالات استخدام وحدات معالجة الرسومات تشغيل النماذج اللغوية الكبيرة المفتوحة (LLM). يُطلعك هذا الدليل التوجيهي على خطوات تفعيل خدمة تعمل على تشغيل نموذج لغوي كبير.

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

المعلومات التي ستطّلع عليها

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

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

ترقية gcloud CLI

يجب أولاً تثبيت إصدار حديث من واجهة سطر الأوامر 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- إنشاء حزمة 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

(اختياري) يمكنك التفاعل مع "جيما" من سطر الأوامر من خلال تشغيل

ollama run gemma2:2b

عند الانتهاء من المحادثة مع "جيما"، يمكنك الخروج من المحادثة عن طريق كتابة

/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 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 

# Store the model weights in the container image
ENV MODEL gemma2:2b
RUN ollama serve & sleep 5 && ollama pull $MODEL 

# Start Ollama
ENTRYPOINT ["ollama", "serve"]

أنشئ مستودعًا في Artifact Registry لتخزين صور خدماتك.

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

إنشاء صورة "الجانب الإضافي" في Olama

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

اختبار خدمة تشغيل السحابة الإلكترونية

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

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

اطرح سؤالاً الآن على جيما، على سبيل المثال: "لماذا لون السماء أزرق؟"

8. تهانينا!

تهانينا على إكمال الدرس التطبيقي حول الترميز.

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

النقاط التي تناولناها

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

9. تَنظيم

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

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

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