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

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

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

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

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

  • נכנסים לחשבון 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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, and roles/serviceusage.serviceUsageAdmin, 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) בדף המודל המתאים ב-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-tpu-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. כדי להשתמש במדריך הזה, נדרשת גרסה 1.8.0 ואילך של Terraform. ב-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 עם צמתים פרטיים ומשאבים תומכים אחרים. הסקריפט יכול להימשך כמה דקות.

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

    טייס אוטומטי

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

    רגילה

    "${ACP_REPO_DIR}/platforms/gke/base/tutorials/hf-tpu-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

    export ACCELERATOR_TYPE="v6e"
    export HF_MODEL_ID="google/gemma-4-26b-a4b-it"
    

    Gemma 4 31B-it

    export ACCELERATOR_TYPE="v6e"
    export HF_MODEL_ID="google/gemma-4-31b-it"
    

    Gemma 3 1B-it

    export ACCELERATOR_TYPE="v5e"
    export HF_MODEL_ID="google/gemma-3-1b-it"
    

    Gemma 3 4B-it

    export ACCELERATOR_TYPE="v5e"
    export HF_MODEL_ID="google/gemma-3-4b-it"
    

    Gemma 3 27B-it

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

    Qwen 3 32B

    export ACCELERATOR_TYPE="v6e"
    export HF_MODEL_ID="Qwen/Qwen3-32B"
    

    למידע על הגדרות נוספות, כולל וריאציות אחרות של מודלים וסוגי TPU, אפשר לעיין במניפסטים שזמינים במאגר 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-tpu/vllm/configure_vllm.sh"
    
  4. פורסים את עומס העבודה של ההסקה באשכול GKE.

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

בדיקת הפריסה

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

    until kubectl --namespace=${ira_online_tpu_kubernetes_namespace_name} wait deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --for=condition=available --timeout=10s >/dev/null; do
        clear
        kubectl --namespace=${ira_online_tpu_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_tpu_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_tpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=inference-server --tail 10
    done
    
  2. מוודאים שפריסת עומס העבודה של ההסקה זמינה.

    kubectl --namespace=${ira_online_tpu_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_tpu_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_tpu_kubernetes_namespace_name} logs deployment/vllm-${ACCELERATOR_TYPE}-${HF_MODEL_NAME} --container=inference-server --tail 10
    
  3. מריצים את הסקריפט הבא כדי להגדיר העברת נתונים דרך יציאה ולשלוח בקשה לדוגמה למודל.

    kubectl --namespace=${ira_online_tpu_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-tpu/vllm/${ACCELERATOR_TYPE}-${HF_MODEL_NAME}"
    
  2. לפנות את המשאבים:

    טייס אוטומטי

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

    רגילה

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

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