הפעלת מודלים גדולים של שפה (LLM) בקוד פתוח ב-GKE עם ארכיטקטורה שהוגדרה מראש

בדף הזה מוסבר איך לפרוס במהירות מודלים פופולריים של שפה גדולה (LLM) בקוד פתוח ב-GKE ולמלא בקשות באמצעותם, על ידי שימוש בארכיטקטורת הפניה של GKE למסקנות שהוגדרה מראש ומוכנה לייצור. בגישה הזו נעשה שימוש בתשתית כקוד (IaC), עם Terraform שעטוף בסקריפטים של CLI, כדי ליצור סביבת GKE סטנדרטית, מאובטחת וניתנת להתאמה, שמיועדת לעומסי עבודה של הסקת מסקנות מ-AI.

במדריך הזה נסביר איך לפרוס מודלים של LLM ולהשתמש בהם באמצעות צמתים של GPU במארח יחיד ב-GKE עם מסגרת ההגשה vLLM. במדריך הזה מפורטות הוראות והגדרות לפריסת המודלים הפתוחים הבאים:

המדריך הזה מיועד למהנדסי למידת מכונה (ML) ולמומחים בתחום הנתונים וה-AI שרוצים לבחון את היכולות של Kubernetes לניהול קונטיינרים לצורך הצגת מודלים פתוחים להסקת מסקנות. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שמוזכרים ב Google Cloud תוכן זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.

כדי לנתח באופן מפורט את הביצועים והעלויות של מודלים פתוחים, אפשר גם להשתמש בכלי GKE Inference Quickstart. מידע נוסף זמין במדריך למתחילים בנושא GKE Inference ובנוטבוק של Colab הנלווית.

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

  • נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  • 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

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

  • Enable the required APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • 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

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

  • Enable the required APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • צריך לוודא שיש לכם בפרויקט את התפקיד או התפקידים הבאים: roles/artifactregistry.admin, roles/browser, roles/compute.networkAdmin, roles/container.clusterAdmin, roles/iam.roleAdmin, roles/iam.serviceAccountAdmin, roles/resourcemanager.projectIamAdmin, roles/serviceusage.serviceUsageAdmin, and roles/secretmanager.secretVersionManager

    בדיקת התפקידים

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

      כניסה לדף IAM
    2. בוחרים את הפרויקט.
    3. בעמודה Principal (חשבון המשתמש), מוצאים את כל השורות שבהן מופיע השם שלכם או של קבוצה שאתם נכללים בה. כדי לברר באילו קבוצות אתם נכללים, פנו לאדמין.

    4. בודקים את העמודה Role בכל השורות שבהן מצוין או מופיע השם שלכם, כדי לראות אם רשימת התפקידים כוללת את התפקידים הנדרשים.

    מתן התפקידים

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

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

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

גישה למודל

מאשרים את תנאי הרישיון של כל מודל עם גישה מוגבלת שרוצים להשתמש בו (כמו Gemma או Llama) בדף המודל המתאים ב-Hugging Face.

כדי לגשת למודל דרך Hugging Face, צריך טוקן של Hugging Face.

אם עדיין אין לכם אסימון, אתם יכולים ליצור אסימון חדש באמצעות השלבים הבאים:

  1. לוחצים על הפרופיל שלך > הגדרות > אסימוני גישה.
  2. בוחרים באפשרות New Token (טוקן חדש).
  3. מציינים שם לבחירתכם ותפקיד עם הרשאת קריאה לפחות.
  4. לוחצים על יצירת אסימון.
  5. מעתיקים את הטוקן שנוצר ללוח.

הקצאת סביבת ההסקה של GKE

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

הפעלת Cloud Shell

במדריך הזה נשתמש ב-Cloud Shell כדי להריץ פקודות. ב-Cloud Shell מותקנים מראש הכלים הדרושים, כולל gcloud,‏ kubectl ו-git.

במסוף Google Cloud , מפעילים מכונת Cloud Shell:

פתיחת Cloud Shell

הפעולה הזו מפעילה סשן בחלונית התחתונה של Google Cloud המסוף.

פריסת הארכיטקטורה הבסיסית

כדי להקצות את אשכול GKE ואת המשאבים הנדרשים לגישה למודלים מ-Hugging Face, מבצעים את השלבים הבאים:

  1. ב-Cloud Shell, משכפלים את המאגר הבא:

    git clone https://github.com/GoogleCloudPlatform/accelerated-platforms --branch hf-model-vllm-gpu-tutorial && \
    cd accelerated-platforms && \
    export ACP_REPO_DIR="$(pwd)"
    
  2. מגדירים את משתני הסביבה:

    export TF_VAR_platform_default_project_id=PROJECT_ID
    export HF_TOKEN_READ=HF_TOKEN
    

    מחליפים את הערכים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud.
    • HF_TOKEN: אסימון Hugging Face שיצרתם קודם.
  3. כדי להשתמש במדריך הזה, צריך Terraform בגרסה 1.8.0 ואילך. ב-Cloud Shell מותקנת כברירת מחדל גרסה Terraform v1.5.7.

    כדי לעדכן את גרסת Terraform ב-Cloud Shell, אפשר להריץ את הסקריפט הבא. הסקריפט הזה מתקין את הכלי tfswitch ומתקין את Terraform v1.8.0 בספריית הבית. פועלים לפי ההוראות מהסקריפט כדי להגדיר את משתנה הסביבה הנדרש או להעביר את הדגל --modify-rc-file לסקריפט.

    "${ACP_REPO_DIR}/tools/bin/install_terraform.sh" && \
    export PATH=${HOME}/bin:${HOME}/.local/bin:${PATH}
    
  4. מריצים את סקריפט הפריסה הבא. סקריפט הפריסה מפעיל את ממשקי ה-API הנדרשים Google Cloud ומקצה את התשתית הדרושה למדריך הזה. התהליך כולל יצירה של רשת VPC חדשה, אשכול GKE עם צמתים פרטיים ומשאבים תומכים אחרים. השלמת הפעולה של הסקריפט עשויה להימשך כמה דקות.

    אפשר להציג מודלים באמצעות מעבדי GPU באשכול GKE במצב Autopilot או במצב Standard. אשכול Autopilot מספק חוויית Kubernetes מנוהלת לחלוטין. מידע נוסף על בחירת מצב הפעולה של GKE שמתאים ביותר לעומסי העבודה שלכם זמין במאמר מידע על מצבי הפעולה של GKE.

    טייס אוטומטי

    "${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-gpu-model/deploy-ap.sh"
    

    רגילה

    "${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-gpu-model/deploy-standard.sh"
    

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

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

    source "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/terraform/_shared_config/scripts/set_environment_variables.sh"
    
  6. סקריפט הפריסה יוצר סוד ב-Secret Manager כדי לאחסן את אסימון Hugging Face. צריך להוסיף את האסימון הזה לסוד באופן ידני לפני פריסת האשכול. ב-Cloud Shell, מריצים את הפקודה הזו כדי להוסיף את האסימון ל-Secret Manager.

    echo ${HF_TOKEN_READ} | gcloud secrets versions add ${huggingface_hub_access_token_read_secret_manager_secret_name} \
    --data-file=- \
    --project=${huggingface_secret_manager_project_id}
    

פריסת מודל פתוח

עכשיו אפשר להוריד ולפרוס את המודל.

בחירת מודל

  1. מגדירים את משתני הסביבה של המודל שרוצים לפרוס:

    Gemma 4 26B-A4B-it

    # Default: H100
    export ACCELERATOR_TYPE="h100"
    export HF_MODEL_ID="google/gemma-4-26b-a4b-it"
    
    # Alternative: RTX Pro 6000
    # export ACCELERATOR_TYPE="rtx-pro-6000"
    # export HF_MODEL_ID="google/gemma-4-26b-a4b-it"
    

    Gemma 4 31B-it

    # Default: H100
    export ACCELERATOR_TYPE="h100"
    export HF_MODEL_ID="google/gemma-4-31b-it"
    
    # Alternative: RTX Pro 6000
    # export ACCELERATOR_TYPE="rtx-pro-6000"
    # export HF_MODEL_ID="google/gemma-4-31b-it"
    

    Gemma 4 E2B-it

    export ACCELERATOR_TYPE="l4"
    export HF_MODEL_ID="google/gemma-4-e2b-it"
    

    ‫Gemma 4 E4B-it

    export ACCELERATOR_TYPE="l4"
    export HF_MODEL_ID="google/gemma-4-e4b-it"
    

    Gemma 3 27B-it

    export ACCELERATOR_TYPE="h100"
    export HF_MODEL_ID="google/gemma-3-27b-it"
    

    Llama 4 Scout 17B-16E-Instruct

    export ACCELERATOR_TYPE="h100"
    export HF_MODEL_ID="meta-llama/llama-4-scout-17b-16e-instruct"
    

    Qwen3 32B

    export ACCELERATOR_TYPE="h100"
    export HF_MODEL_ID="qwen/qwen3-32b"
    

    gpt-oss 20B

    export ACCELERATOR_TYPE="h100"
    export HF_MODEL_ID="openai/gpt-oss-20b"
    

    הגדרות נוספות, כולל וריאציות אחרות של המודל וסוגי GPU, זמינות במניפסטים במאגר GitHub‏ accelerated-platforms.

הורדת המודל

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

    source "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/terraform/_shared_config/scripts/set_environment_variables.sh"
    
  2. מריצים את הסקריפט הבא כדי להגדיר את משאבי ההורדה של מודל Hugging Face שמוריד את המודל ל-Cloud Storage:

    "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/model-download/configure_huggingface.sh"
    
  3. החלת משאבי ההורדה של מודל Hugging Face:

    kubectl apply --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/model-download/huggingface"
    
  4. עוקבים אחרי פעולת ההורדה של המודל של Hugging Face עד שהיא מסתיימת.

    until kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} wait job/${HF_MODEL_ID_HASH}-hf-model-to-gcs --for=condition=complete --timeout=10s >/dev/null; do
        clear
        kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} get job/${HF_MODEL_ID_HASH}-hf-model-to-gcs | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e 'Complete'
        echo -e "\nhf-model-to-gcs logs(last 10 lines):"
        kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} logs job/${HF_MODEL_ID_HASH}-hf-model-to-gcs --container=hf-model-to-gcs --tail 10
    done
    
  5. מוודאים שמשימת ההורדה של מודל Hugging Face הושלמה.

    kubectl --namespace=${huggingface_hub_downloader_kubernetes_namespace_name} get job/${HF_MODEL_ID_HASH}-hf-model-to-gcs | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e 'Complete'
    
  6. מוחקים את משאבי ההורדה של המודל של Hugging Face.

    kubectl delete --ignore-not-found --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/model-download/huggingface"
    

פריסת המודל

  1. מקור משתני הסביבה מהפריסה.

    source "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/terraform/_shared_config/scripts/set_environment_variables.sh"
    
  2. מוודאים ששם המודל של Hugging Face מוגדר.

    echo "HF_MODEL_NAME=${HF_MODEL_NAME}"
    
  3. מגדירים את משאבי vLLM.

    "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/online-inference-gpu/vllm/configure_vllm.sh"
    
  4. פורסים את עומס העבודה של ההסקה באשכול GKE.

    kubectl apply --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/online-inference-gpu/vllm/${ACCELERATOR_TYPE}-${HF_MODEL_NAME}"
    

בדיקת הפריסה

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

    until kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} wait deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --for=condition=available --timeout=10s >/dev/null; do
        clear
        kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} get deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e '1/1     1            1'
        echo -e "\nfetch-safetensors logs(last 10 lines):"
        kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=fetch-safetensors --tail 10
        echo -e "\ninference-server logs(last 10 lines):"
        kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=inference-server --tail 10
    done
    
  1. מוודאים שפריסת עומס העבודה של ההסקה זמינה.

    kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} get deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} | GREP_COLORS='mt=01;92' egrep --color=always -e '^' -e '1/1     1            1'
    echo -e "\nfetch-safetensors logs(last 10 lines):"
    kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=fetch-safetensors --tail 10
    echo -e "\ninference-server logs(last 10 lines):"
    kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=inference-server --tail 10
    
  2. מריצים את הסקריפט הבא כדי להגדיר העברת נתונים דרך יציאה ולשלוח בקשת לדוגמה למודל.

    kubectl --namespace=${ira_online_gpu_kubernetes_namespace_name} port-forward service/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} 8000:8000 >/dev/null &
    PF_PID=$!
    while ! echo -e '\x1dclose\x0d' | telnet localhost 8000 >/dev/null 2>&1; do
        sleep 0.1
    done
    curl http://127.0.0.1:8000/v1/chat/completions \
    --data '{
    "model": "/gcs/'${HF_MODEL_ID}'",
    "messages": [ { "role": "user", "content": "What is GKE?" } ]
    }' \
    --header "Content-Type: application/json" \
    --request POST \
    --show-error \
    --silent | jq
    kill -9 ${PF_PID}
    

    אמורה להתקבל תגובת JSON מהמודל עם תשובה לשאלה.

הסרת המשאבים

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

  1. מחיקת עומס העבודה של ההסקה:

    kubectl delete --ignore-not-found --kustomize "${ACP_REPO_DIR}/platforms/gke/base/use-cases/inference-ref-arch/kubernetes-manifests/online-inference-gpu/vllm/${ACCELERATOR_TYPE}-${HF_MODEL_NAME}"
    
  2. לפנות את המשאבים:

    טייס אוטומטי

    "${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-gpu-model/teardown-ap.sh"
    

    רגילה

    "${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-gpu-model/teardown-standard.sh"
    

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