הפעלת סוכנים עם מודלים של Gemma 4 ב-Cloud Run

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

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

הקשר ארוך, מולטימודליות, הסקת מסקנות וקריאה לפונקציות מאפשרים ל-Gemma 4 לטפל בלוגיקה מורכבת, בתכנון בכמה שלבים, בתכנות ו-Agentic Workflows.

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

  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 בפרויקט ב- Google Cloud .
  7. מתקינים ומפעילים את ה-CLI של gcloud.
  8. מוודאים שהוקצו לחשבון שלכם תפקידי ה-IAM הבאים:
  9. איך מקצים את התפקידים

    המסוף

    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 בתפקיד שאתם מוסיפים לחשבון הפריסה.
  10. כברירת מחדל, פרויקטים חדשים מקבלים באופן אוטומטי מכסה של 3,000 milliGPU בפריסה הראשונית. אם אתם צריכים להגדיל את המכסה, אתם יכולים לבקש מכסה של 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.
  11. למחירון של Cloud Run כדי להעריך את העלויות בהתאם לשימוש הצפוי, אתם יכולים להשתמש במחשבון העלויות.

פריסת מודל Gemma 4 עם קונטיינר vLLM

ל-Gemma 4 יש יכולות אג'נטיות מתקדמות, כולל הסקת מסקנות, קריאה להפעלת פונקציות, יצירת קוד ופלט מובנה.

הערכה לפיתוח סוכנים (ADK) עוזרת לכם ליצור סוכני AI פונקציונליים לחלוטין באמצעות Gemma 4.

אתם יכולים להשתמש ב-vLLM כדי להציג את Gemma כנקודת קצה ל-API של OpenAI. vLLM מספק הצגה מהירה ויעילה של מודלים גנרטיביים בקנה מידה נרחב, עם תפוקת הצגה מתקדמת, ניהול זיכרון יעיל באמצעות PagedAttention, יצירת אצוות רציפה של בקשות נכנסות, תמיכה בקוונטיזציה וליבות CUDA שעברו אופטימיזציה.

כדי לפרוס מודלים של Gemma ב-Cloud Run, משתמשים בפקודה הבאה של ה-CLI של gcloud עם ההגדרות המומלצות:

CONTAINER_ARGS=(
    "serve"
    "MODEL_NAME"
    "--enable-chunked-prefill"
    "--enable-prefix-caching"
    "--generation-config=auto"
    "--enable-auto-tool-choice"
    "--tool-call-parser=gemma4"
    "--reasoning-parser=gemma4"
    "--dtype=bfloat16"
    "--max-num-seqs=64"
    "--gpu-memory-utilization=0.95"
    "--tensor-parallel-size=1"
    "--port=8080"
    "--host=0.0.0.0"
)
gcloud beta run deploy SERVICE_NAME \
    --image "us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4" \
    --project PROJECT \
    --region REGION \
    --execution-environment gen2 \
    --no-allow-unauthenticated \
    --cpu 20 \
    --memory 80Gi \
    --gpu 1 \
    --gpu-type nvidia-rtx-pro-6000 \
    --no-gpu-zonal-redundancy \
    --no-cpu-throttling \
    --max-instances 3 \
    --concurrency 64 \
    --timeout 600 \
    --startup-probe tcpSocket.port=8080,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240 \
    --command "vllm" \
    --args=$(IFS=','; echo "${CONTAINER_ARGS[*]}")

מחליפים את:

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

  • ‫MODEL_NAME בשם המלא של גרסת Gemma 4.

    • ‫Gemma 4 2B: google/gemma-4-E2B-it
    • ‫Gemma 4 4B: google/gemma-4-E4B-it

ההגדרות האחרות הן:

אפשרות תיאור
--concurrency

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

--cpu

כמות המעבדים שהוקצו לשירות, למשל 20.

--set-env-vars

משתני הסביבה שמוגדרים לשירות. לדוגמה, HF_TOKEN="...".

--gpu

ערך ה-GPU של השירות, למשל 1.

--gpu-type

סוג ה-GPU שבו רוצים להשתמש בשירות, למשל nvidia-rtx-pro-6000.

--max-instances

המספר המקסימלי של מכונות קונטיינרים לשירות, למשל 1.

--memory

כמות הזיכרון שהוקצה לשירות, למשל 80Gi.

--no-invoker-iam-check

השבתת בדיקות IAM של הגורם המפעיל. במדריך אבטחת שירותי Cloud Run מפורטות המלצות לאבטחת האפליקציה.

--no-cpu-throttling

ההגדרה הזו משביתה את ויסות ה-CPU כשהקונטיינר לא מטפל בבקשות באופן פעיל.

--timeout

הזמן שבו צריך להחזיר תשובה, למשל 600 שניות.

--startup-probe

הגדרות מופרדות בפסיקים לבדיקת אתחול בפורמט KEY=VALUE. פרטים נוספים זמינים במאמר בדיקת סטארט-אפ ב-Cloud Run. בגדלים של מודל Gemma 4, אם אתם לא משתמשים בתעבורת נתונים יוצאת ישירה של VPC, מומלץ להגדיר את זמן הקצוב לתפוגה של בדיקת ההפעלה ל-240 שניות לפחות.

אם אתם צריכים לשנות את הגדרות ברירת המחדל או להוסיף הגדרות מותאמות אישית לשירות Cloud Run, קראו את המאמר הגדרת שירותים.

בסיום פריסת השירות, תוצג הודעת הצלחה עם כתובת ה-URL של נקודת הקצה של Cloud Run שמסתיימת ב-run.app.

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

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

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

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

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

    curl http://localhost:9090/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "MODEL_NAME",
        "messages": [{"role": "user", "content": "Why is the sky blue?"}],
        "chat_template_kwargs": {
             "enable_thinking": true
         },
         "skip_special_tokens": false
      }'

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

    {
     "id": "chatcmpl-9cf1ab1450487047",
     "object": "chat.completion",
     "created": 1774904187,
     "model": "google/gemma-4-E2B-it",
     "choices": [
       {
         "index": 0,
         "message": {
           "role": "assistant",
           "content": "The short answer is a phenomenon called **Rayleigh scattering**...",
           "function_call": null,
           "tool_calls": [],
           "reasoning": "*   Question: \"Why is the sky blue?\"\n..."
         },
         "finish_reason": "stop",
         "stop_reason": 106
       }
     ],
     "usage": {
       "prompt_tokens": 21,
       "total_tokens": 877,
       "completion_tokens": 856
     }
    }
    

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

בקטע הזה מוסבר ההקשר של הגדרות בו-זמניות מומלצות. כדי לקבל זמן אחזור אופטימלי של בקשות, ודאו שההגדרה --concurrency זהה לארגומנט שורת הפקודה --max-num-seqs של vLLM.

  • --max-num-seqs קובע כמה רצפים (בקשות) זמינים לכל מכונה של vLLM כדי לטפל בהסקת מסקנות בו-זמנית.
  • ‫--concurrency קובע כמה בקשות Cloud Run שולח למכונה של vLLM בו-זמנית.

אם הערך של --concurrency גדול מהערך של --max-num-seqs, יכול להיות ש-Cloud Run ישלח למכונה של vLLM יותר בקשות ממספר המשבצות הפנויות לבקשות. כתוצאה מכך, הבקשות נכנסות לתור ב-vLLM, וזמן האחזור של הבקשות בתור מתארך. זה גם מוביל להתאמה פחות רספונסיבית לעומס (autoscaling), כי הבקשות בתור לא גורמות ל-Cloud Run להרחיב אופקית (scale out) ולהפעיל מכונות חדשות.

כדי להימנע לחלוטין מתור בקשות במכונה של vLLM, צריך להגדיר את --concurrency כך שיתאים ל---max-num-seqs.

חשוב לציין שהגדלת הערך של --max-num-seqs גם מאריכה את משך הזמן של בקשות מקבילות, ודורשת יותר זיכרון GPU למטמון KV.

אופטימיזציה של הניצולת

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

איך יוצרים סוכני AI באמצעות הערכה לפיתוח סוכנים (ADK) ו-Gemma 4

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

לפני שמשתמשים בערכה לפיתוח סוכנים (ADK), צריך לוודא שהבקשות הנכנסות מעבירות את אסימון הזהות המתאים. למידע נוסף על השימוש באימות IAM וב-Cloud Run, קראו את המאמר אימות בין שירותים.

בדוגמה הבאה מוסבר איך להשתמש בערכה לפיתוח סוכנים ב-Python עם אימות IAM:

import subprocess
from google.adk.models.lite_llm import LiteLlm
from google.adk.agents import Agent

# Get the identity token using gcloud
id_token = subprocess.run(
    ["gcloud", "auth", "print-identity-token"],
    capture_output=True, text=True
).stdout.strip()

gemma_model = LiteLlm(
    model=f'openai/MODEL_NAME',
    base_url='https://YOUR_CLOUD_RUN_SERVICE_URL/v1',
    extra_body={
        "chat_template_kwargs": {
            "enable_thinking": True
        },
        "skip_special_tokens": False
    },
    extra_headers={
        "Authorization": f"Bearer {id_token}",
    },
)

root_agent = Agent(
    model=gemma_model,
    name='assistant',
    instruction="You are a helpful assistant",
)

הסרת המשאבים

מוחקים את המשאבים הבאים שנוצרו ב- Google Cloud :

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