1. מבוא
סקירה כללית
לאחרונה נוספה ל-Cloud Run תמיכה ב-GPU. היא זמינה כגרסת טרום-השקה ציבורית של רשימת ההמתנה. אם אתם רוצים לנסות את התכונה, מלאו את הטופס הזה כדי להצטרף לרשימת ההמתנה. Cloud Run היא פלטפורמת קונטיינרים ב-Google Cloud שמאפשרת להריץ קוד בקונטיינר בקלות, בלי שתצטרכו לנהל אשכול.
נכון לעכשיו, מעבדי ה-GPU שאנחנו מציעים הם מעבדי Nvidia L4 עם 24GB של זיכרון VRAM. יש GPU אחד לכל מכונה של Cloud Run, והתאמה לעומס (autoscaling) של Cloud Run עדיין חלה. האפשרויות האלה כוללות התאמה לעומס (outscale) עד 5 מכונות (אם יש אפשרות להגדיל את המכסה), וגם התאמה לאחור (inscale) לאפס מכונות כשאין בקשות.
אחד מתרחישי השימוש ב-GPU הוא הפעלה של מודלים גדולים של שפה (LLM) פתוחים משלכם. במדריך הזה נסביר איך פורסים שירות שמריץ מודל שפה גדול (LLM).
ב-codelab הזה פורסים שירות עם כמה קונטיינרים שמשתמש ב-Open WebUI כקונטיינר של תעבורת נתונים נכנסת (ingress) בחזית, וב-Ollama ב-sidecar כדי להציג מודל Gemma 2 2B שמאוחסן בקטגוריה של Google Cloud Storage.
מה תלמדו
- איך יוצרים שירות עם כמה קונטיינרים ב-Cloud Run
- איך לפרוס את Ollama כרכב משני שמשרת מודל Gemma 2 2B
- איך לפרוס את Open WebUI כקונטיינר של נתיב קלט (ingress) לקצה הקדמי
2. הגדרת משתני סביבה והפעלת ממשקי API
שדרוג ה-CLI של gcloud
קודם כול, צריכה להיות מותקנת גרסה עדכנית של ה-CLI של gcloud. אפשר לעדכן את ה-CLI על ידי הרצת הפקודה הבאה:
gcloud components update
הגדרת משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו ב-Codelab הזה.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
הפעלת ממשקי API
לפני שתוכלו להתחיל להשתמש ב-Codelab הזה, יש כמה ממשקי API שתצטרכו להפעיל. כדי להשתמש בקוד הפתוח הזה, צריך להשתמש בממשקי ה-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 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
עכשיו מעבירים את תיקיית המודלים אל 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
יצירת קובץ האימג' של הצדדית של 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
בקטע הזה תיצרו את הקונטיינר של תעבורת הנתונים הנכנסת (ingress) בקצה הקדמי באמצעות 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
בדיקת שירות Cloud Run
עכשיו פותחים את כתובת ה-URL של השירות בדפדפן האינטרנט.
אחרי שסיימתם לטעון את ממשק המשתמש, בקטע בחירת מודל בוחרים באפשרות Gemma 2 2B.
עכשיו אפשר לשאול את Gemma שאלה, למשל: "למה השמיים כחולים?"
8. מעולה!
מזל טוב, השלמת את Codelab!
מומלץ לעיין במסמכים בנושא פונקציות של Cloud Run
אילו נושאים דיברנו?
- איך יוצרים שירות קונטיינרים מרובים ב-Cloud Run
- איך לפרוס את Ollama כרכב משני שמשרת מודל Gemma 2 2B
- איך לפרוס את Open WebUI כקונטיינר של תעבורת נתונים נכנסת (ingress) בחזית
9. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם שירותי Cloud Run מופעלים בטעות יותר פעמים מהקצאת ההפעלה החודשית של Cloud Run בתוכנית ללא תשלום), אפשר למחוק את Cloud Run או למחוק את הפרויקט שיצרתם בשלב 2.
כדי למחוק את הפונקציה של Cloud Run, נכנסים למסוף Cloud של Cloud Run בכתובת https://console.cloud.google.com/run ומוחקים את השירות ollama-sidecar-codelab
.
אם בוחרים למחוק את הפרויקט כולו, אפשר לעבור אל https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 ולבחור באפשרות Delete (מחיקה). אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי להציג את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list
.