1. مقدمة
نظرة عامة
أضافت Cloud Run مؤخرًا إمكانية استخدام وحدات معالجة الرسومات. وهي متاحة كمعاينة عامة ضمن قائمة الانتظار. إذا كنت مهتمًا بتجربة الميزة، يُرجى ملء هذا النموذج للانضمام إلى قائمة الانتظار. Cloud Run هي منصة حاويات على Google Cloud تسهّل تشغيل الرموز البرمجية في حاوية بدون الحاجة إلى إدارة مجموعة.
في الوقت الحالي، وحدات معالجة الرسومات التي نوفّرها هي وحدات معالجة الرسومات Nvidia L4 التي تتضمّن ذاكرة وصول عشوائي للفيديو (vRAM) بسعة 24 غيغابايت. تتوفّر وحدة معالجة رسومات واحدة لكل مثيل من 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
الآن، انقل مجلد النماذج إلى خدمة التخزين السحابي من Google.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5- إنشاء صورة Ollama
أنشئ ملفًا شاملاً يتضمّن المحتوى التالي
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.