הרצת היקש של LLM ביחידות GPU באמצעות Gemma 4 ו-Ollama

מטרות

‫Gemma 4 היא משפחת המודלים הכי יעילה של Google עם פרמטרים שזמינים לכולם, והיא מספקת יכולות חזקות של הסקת מסקנות ושל סוכנים. היכולות של Gemma 4: הקשר ארוך, מולטי-מודאליות, חשיבה רציונלית והפעלת כלים מאפשרות לו לטפל בלוגיקה מורכבת, בתכנון רב-שלבי, בתכנות ובתהליכי עבודה מבוססי-סוכנים.

במדריך הזה נסביר איך להריץ היקש של LLM ביחידות GPU של Cloud Run באמצעות Gemma ו-Ollama, ומהם היעדים הבאים:

  • פריסת Ollama עם המודל Gemma 4 בשירות Cloud Run עם GPU.
  • שליחת הנחיות לשירות Ollama בנקודת הקצה הפרטית שלו.

כדי ללמוד על דרך חלופית לפריסת מודלים של Gemma 4 בקוד פתוח ב-Cloud Run באמצעות קונטיינר vLLM, אפשר לעיין במאמר הפעלת מודלים של Gemma 4 ב-Cloud Run.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. מפעילים את Cloud Run API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

  7. מתקינים ומפעילים את ה-CLI של gcloud.
  8. כדי להשלים את המדריך הזה, צריך לבקש מכסה של Total Nvidia RTX Pro 6000 GPU allocation, in milli GPU, without zonal redundancy, per project per region ב-Cloud Run Admin API בדף Quotas and system limits.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להשלמת המדריך, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

מתן התפקידים

המסוף

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM
  2. בוחרים את הפרויקט.
  3. לוחצים על Grant access.
  4. בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל מדובר בכתובת האימייל שמשמשת לפריסת שירות Cloud Run.

  5. בוחרים תפקיד מהרשימה Select a role.
  6. כדי להקצות עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
  7. לוחצים על Save.

gcloud

כדי להקצות לחשבון שלכם את תפקידי ה-IAM הנדרשים בפרויקט:

     gcloud projects add-iam-policy-binding PROJECT_ID \
         --member=PRINCIPAL \
         --role=ROLE
     

מחליפים את:

  • PROJECT_NUMBER עם מספר הפרויקט ב- Google Cloud .
  • PROJECT_ID במזהה הפרויקט ב- Google Cloud .
  • PRINCIPAL עם החשבון שאליו אתם מוסיפים את הקישור. בדרך כלל זו כתובת האימייל שמשמשת לפריסת שירות Cloud Run.
  • ROLE עם התפקיד שאתם מוסיפים לחשבון של כלי הפריסה.

פריסת שירות Ollama להסקת מסקנות של LLM

פורסים את השירות ב-Cloud Run:

gcloud beta run deploy SERVICE-NAME \
    --image "ollama/ollama:latest" \
    --project PROJECT_ID \
    --region REGION \
    --no-allow-unauthenticated \
    --cpu 20 \
    --memory 80Gi \
    --gpu 1 \
    --gpu-type nvidia-rtx-pro-6000 \
    --no-gpu-zonal-redundancy \
    --max-instances 1 \
    --concurrency 16 \
    --timeout 600 \
    --set-env-vars=OLLAMA_NUM_PARALLEL=16 \
    --set-env-vars=OLLAMA_HOST=0.0.0.0:8080 \
    --set-env-vars=OLLAMA_DEBUG=false \
    --set-env-vars=OLLAMA_KEEP_ALIVE=-1 \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240 \
    --command "bash" \
    --args="-c,(sleep 15 && ollama pull MODEL_NAME) & ollama serve"

מחליפים את:

  • SERVICE-NAME מחליפים בשם ייחודי לשירות Cloud Run.
  • PROJECT במזהה הפרויקט ב- Google Cloud .
  • REGION באזור Google Cloud שבו יש תמיכה ביחידות GPU ל-Cloud Run, כמו us-central1.nvidia-rtx-pro-6000 רשימה מלאה של האזורים הנתמכים לפריסות עם GPU מופיעה במאמר בנושא הגדרת GPU.

  • MODEL_NAME בשם המלא של וריאציה של Gemma 4.

    • ‫Gemma 4 E2B: gemma4:e2b
    • ‫Gemma 4 E4B: gemma4:e4b

‫Gemma 4 26B ו-31B דורשים הגדרה מתקדמת יותר של Cloud Run ו-vLLM עם Direct VPC Egress ו-Run:ai Model Streamer.

שימו לב לסימונים החשובים הבאים בפקודה הזו:

  • הערך של --concurrency 16 מוגדר בהתאם לערך של משתנה הסביבה OLLAMA_NUM_PARALLEL.
  • --gpu 1 עם --gpu-type nvidia-rtx-pro-6000 מקצה GPU אחד מסוג NVIDIA RTX PRO 6000 Blackwell לכל מופע של Cloud Run בשירות.
  • --max-instances 1 מציין את המספר המקסימלי של מופעים שאליהם יתבצע שינוי הגודל. הערך צריך להיות קטן או שווה למכסת ה-GPU של NVIDIA RTX Pro 6000 בפרויקט (Total NVIDIA RTX Pro 6000 GPU allocation, in milli GPU, without zonal redundancy, per project per region).
  • --no-allow-unauthenticated מגביל את הגישה לשירות ללא אימות. אם השירות פרטי, אפשר להסתמך על אימות ניהול זהויות והרשאות גישה (IAM) המובנה ב-Cloud Run לתקשורת בין שירותים. מידע נוסף זמין במאמר ניהול גישה באמצעות IAM.
  • נדרשת הרשאה ל---no-cpu-throttling כדי להפעיל את ה-GPU.
  • --no-gpu-zonal-redundancy מגדיר אפשרויות של יתירות אזורית בהתאם לדרישות שלכם למעבר לשירות זמין באזור אחר ולמכסה הזמינה. פרטים נוספים מופיעים במאמר אפשרויות ליתירות אזורית של GPU.

הגדרות של פעולות בו-זמניות לביצועים אופטימליים

בקטע הזה מוסבר על הגדרות הבו-זמניות המומלצות. כדי להשיג זמן אחזור אופטימלי של בקשות, צריך לוודא שההגדרה --concurrency שווה למשתנה הסביבה OLLAMA_NUM_PARALLEL של Ollama.

  • OLLAMA_NUM_PARALLEL קובע כמה משבצות לבקשות זמינות לכל מודל כדי לטפל בבקשות הסקה בו-זמנית.
  • האפשרות --concurrency קובעת כמה בקשות Cloud Run שולח למופע Ollama בו-זמנית.

אם הערך של --concurrency גדול מהערך של OLLAMA_NUM_PARALLEL, ‏ Cloud Run יכול לשלוח יותר בקשות למודל ב-Ollama מאשר מספר משבצות הבקשות שזמינות לו. כתוצאה מכך, הבקשות נכנסות לתור ב-Ollama, וזמן האחזור של הבקשות בתור מתארך. בנוסף, התאמה אוטומטית לעומס תהיה פחות רספונסיבית, כי הבקשות בתור לא יפעילו את Cloud Run להרחבת קנה המידה ולהפעלת מופעים חדשים.

‫Ollama תומך גם בהצגת כמה מודלים מ-GPU אחד. כדי למנוע הוספה של בקשות לתור במופע Ollama, צריך להגדיר את --concurrency כך שיתאים ל-OLLAMA_NUM_PARALLEL.

הגדלת הערך של OLLAMA_NUM_PARALLEL גם מאריכה את משך הזמן של בקשות מקבילות.

אופטימיזציה של השימוש ב-GPU

כדי להשיג ניצול אופטימלי של ה-GPU, צריך להגדיל את --concurrency, אבל לשמור אותו בטווח של עד פי שניים מהערך של OLLAMA_NUM_PARALLEL. למרות שהדבר מוביל להוספת בקשות לתור ב-Ollama, הוא יכול לעזור לשפר את הניצול: מופעי Ollama יכולים לעבד באופן מיידי בקשות מהתור שלהם, והתורים עוזרים לספוג עליות פתאומיות בתנועה.

בדיקה של שירות Ollama שנפרס באמצעות curl

אחרי שפורסים את שירות Ollama, אפשר לשלוח אליו בקשות. עם זאת, אם שולחים בקשה ישירות, Cloud Run מגיב עם HTTP 401 Unauthorized. זה מכוון, כי ממשק API של הסקת מסקנות של LLM מיועד לשירותים אחרים לקריאה, כמו אפליקציית frontend. מידע נוסף על אימות בין שירותים ב-Cloud Run זמין במאמר אימות בין שירותים.

כדי לשלוח בקשות לשירות Ollama, מוסיפים לכל בקשה כותרת עם אסימון OIDC תקין. לדוגמה, אפשר להשתמש בשרת proxy למפתחים של Cloud Run:

  1. מפעילים את ה-Proxy, וכשמוצגת בקשה להתקין את הרכיב cloud-run-proxy, בוחרים באפשרות Y:

    gcloud run services proxy SERVICE-NAME \
       --project PROJECT_ID \
       --region REGION \
       --port=9090
  2. שולחים אליו בקשה בכרטיסיית טרמינל נפרדת, ומשאירים את ה-proxy פועל. שימו לב ששרת ה-Proxy פועל בכתובת localhost:9090:

    curl http://localhost:9090/api/generate -d '{
       "model": "MODEL_NAME",
       "prompt": "Why is the sky blue?",
       "stream": false
    }' | jq -r '.response'

    הפקודה הזו אמורה לספק פלט סטרימינג דומה לזה:

    This is one of the most beautiful and fundamental questions in physics! The reason the sky appears blue is due to a phenomenon called **Rayleigh Scattering**.
    ...
    

הסרת המשאבים

כדי להימנע מחיובים נוספים בחשבון Google Cloud , מוחקים את כל המשאבים שהצבתם באמצעות המדריך הזה.

מחיקת הפרויקט

אם יצרתם פרויקט חדש בשביל המדריך הזה, מוחקים את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שהוספתם במדריך הזה, תצטרכו למחוק את המשאבים שיצרתם לצורך המדריך.

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.

כדי למחוק את הפרויקט:

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת משאבי הדרכה

  1. מוחקים את שירות Cloud Run שפרסתם במדריך הזה. שירותי Cloud Run לא צוברים עלויות עד שהם מקבלים בקשות.

    כדי למחוק את שירות Cloud Run, מריצים את הפקודה הבאה:

    gcloud run services delete SERVICE-NAME

    מחליפים את SERVICE-NAME בשם השירות.

    אפשר גם למחוק שירותים של Cloud Run מGoogle Cloud המסוף.

  2. מסירים את הגדרת ברירת המחדל של האזור gcloud שהוספתם במהלך ההגדרה של המדריך:

     gcloud config unset run/region
    
  3. מסירים את הגדרות הפרויקט:

     gcloud config unset project
    

המאמרים הבאים