1. מבוא
סקירה כללית
לאחרונה נוספה ל-Cloud Run תמיכה ב-GPU. התכונה זמינה ב-Public Preview, אבל צריך להירשם לרשימת המתנה כדי להשתמש בה. אם אתם רוצים לנסות את התכונה, אתם יכולים למלא את הטופס הזה כדי להצטרף לרשימת ההמתנה. Cloud Run היא פלטפורמת קונטיינרים ב-Google Cloud שמאפשרת להריץ את הקוד בקונטיינר בקלות, בלי צורך לנהל אשכול.
היום, מעבדי ה-GPU שאנחנו מציעים הם מעבדי Nvidia L4 עם 24GB של vRAM. יש GPU אחד לכל מכונה של Cloud Run, והתכונה 'התאמה אוטומטית לעומס' של Cloud Run עדיין חלה. היא כוללת הרחבה של עד 5 מופעים (עם אפשרות להגדלת המכסה), וגם צמצום של עד אפס מופעים כשאין בקשות.
אחד מתרחישי השימוש במעבדי GPU הוא הפעלה של מודלים גדולים של שפה (LLM) שהם קוד פתוח. במדריך הזה מוסבר איך פורסים שירות שמריץ מודל שפה גדול (LLM).
ב-codelab הזה תפרסו שירות מרובה-קונטיינרים שמשתמש ב-Open WebUI כקונטיינר כניסה של חזית עורפית, ומשתמש ב-Ollama ב-sidecar כדי להפעיל מודל Gemma 2 2B שמאוחסן בקטגוריית Google Cloud Storage.
מה תלמדו
- איך יוצרים שירות עם כמה קונטיינרים ב-Cloud Run
- איך פורסים את Ollama כ-sidecar שמריץ מודל Gemma 2 2B
- איך פורסים את Open WebUI כקונטיינר של שער כניסה לחלק הקדמי של האתר
2. הגדרה של משתני סביבה והפעלת ממשקי API
שדרוג ה-CLI של gcloud
קודם צריך להתקין גרסה עדכנית של gcloud CLI. כדי לעדכן את ה-CLI, מריצים את הפקודה הבאה:
gcloud components update
הגדרה של משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו אתכם לאורך כל ה-codelab הזה.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
הפעלת ממשקי API
לפני שמתחילים להשתמש ב-codelab הזה, צריך להפעיל כמה ממשקי API. ב-codelab הזה נדרש שימוש בממשקי ה-API הבאים. כדי להפעיל את ממשקי ה-API האלה, מריצים את הפקודה הבאה:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
יוצרים ספרייה בשביל ה-codelab הזה.
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. יצירת קטגוריית אחסון
אחרי שהמודל יורד, אפשר להעביר אותו לדלי GCS.
קודם כול יוצרים את הקטגוריה.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
עכשיו מעבירים את התיקייה models ל-GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. יצירת תמונת Ollama
יוצרים קובץ Docker עם התוכן הבא
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 sidecar
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
עכשיו פותחים את כתובת האתר של השירות בדפדפן האינטרנט.
אחרי שהממשק יסיים להיטען, בקטע Select a model (בחירת מודל), בוחרים באפשרות Gemma 2 2B.
עכשיו שואלים את Gemma שאלה, למשל "למה השמיים כחולים?"
8. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
מומלץ לעיין במסמכי התיעוד בנושא פונקציות Cloud Run
מה למדנו
- איך יוצרים שירות עם כמה קונטיינרים ב-Cloud Run
- איך פורסים את Ollama כ-sidecar שמריץ מודל 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.