במדריך הזה נסביר איך לפרוס ולהפעיל את מודל שילוב המומחים (MoE) Qwen3-30B-A3B (Qwen/Qwen3-30B-A3B-FP8) ב-Google Kubernetes Engine (GKE) באמצעות מאיץ TPU v6e (Trillium) במארח יחיד, ומסגרת vLLM TPU להפעלת מודלים עם TorchTPU (torchtpu). עומס העבודה פועל בצומת ct6e-standard-4t יחיד שמכיל ארבעה שבבי TPU v6e בטופולוגיה 2x2, עם מקבילוּת נתונים ומקבילוּת מומחים.
כדי להריץ תהליך עבודה דומה של הצגת מודל vLLM TorchTPU במארח יחיד במאיצי TPU7x (Ironwood) עם המודל הגדול יותר Qwen3.5-397B, קראו את המאמר הצגת המודל Qwen3.5-397B ב-GKE באמצעות vLLM TorchTPU במאיצי TPU7x.
מטרות
- מגדירים את אשכול ה-GKE ואת מאגר הצמתים של TPU v6e במארח יחיד.
- פורסים את שרת vLLM TorchTPU במארח יחיד ב-GKE.
- שולחים בקשת הסקה לשרת vLLM TorchTPU.
- מריצים עומס עבודה להערכת ביצועים של מילוי בקשות.
- מנקים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים שלGoogle Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את העלויות בהתאם לשימוש הצפוי, אתם יכולים להשתמש במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
מגדירים את הסביבה למדריך:
מפעילים את Kubernetes Engine API בפרויקט ב- Google Cloud :
מפעילים את Artifact Registry API בפרויקט ב- Google Cloud :
מתקינים ומפעילים את Google Cloud CLI, ומתקינים את
kubectl. אם אתם משתמשים ב-Cloud Shell, שני הכלים מותקנים מראש.מוודאים שבפרויקט יש מספיק מכסת SSD ומכסת כתובות IP חיצוניות באזור שבו נמצאת קיבולת ה-TPU:
במסוף Google Cloud , נכנסים לדף Quotas & System Limits.
מסננים לפי Persistent Disk SSD (GB) ומוודאים שיש לכם מכסה זמינה של לפחות 500GB לנפח המטמון של המודל.
מסננים לפי In-use regional external IPv4 addresses ומוודאים שיש לכם מספיק מכסה של כתובות IP באזור היעד.
איך מקבלים טוקן גישה ל-Hugging Face
כדי להשתמש במדריך הזה, אתם צריכים טוקן גישה ל-Hugging Face. אפשר להירשם לחשבון בחינם ב-Hugging Face. אחרי שיוצרים חשבון, יוצרים אסימון גישה:
- בדף Welcome to Hugging Face, לוחצים על הדמות של החשבון ובוחרים באפשרות טוקן גישה.
- בדף טוקני גישה, לוחצים על Create new token.
- בוחרים את סוג הטוקן Read ומזינים שם לטוקן.
- טוקן הגישה שלכם יוצג. שומרים את הטוקן במקום בטוח.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:
- אדמין ב-Kubernetes Engine (
roles/container.admin) - אדמין ב-Compute (
roles/compute.admin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הגדרת משתני הסביבה
מגדירים את האימות:
מגדירים את משתני הסביבה:
מחליפים את מה שכתוב בשדות הבאים:
-
YOUR_PROJECT_ID: מזהה הפרויקט ב- Google Cloud. -
YOUR_REGION: האזור שבו רוצים לפרוס את האשכול, למשלus-central1. -
YOUR_ZONE: האזור שבו רוצים לפרוס את מאגר הצמתים של TPU v6e, למשלus-central1-c. -
YOUR_CLUSTER_NAME: השם של אשכול GKE, למשלtpu-v6e-tutorial-cluster. -
YOUR_RESERVATION_NAME: אם אתם משתמשים בהזמנה, השם של ההזמנה של TPU v6e. -
YOUR_HF_TOKEN: טוקן הגישה שלכם ל-Hugging Face. -
YOUR_NETWORK_NAME: השם של רשת ה-Google Cloud . אם יצרתם רשת בהתאמה אישית, ציינו את הרשת הזו. אחרת, צריך לציין אתdefault. -
YOUR_SUBNETWORK_NAME: השם של רשת המשנה ב-Google Cloud . אם יצרתם רשת משנה בהתאמה אישית, ציינו אותה. אחרת, צריך לציין אתdefault. -
YOUR_VLLM_TPU_IMAGE: קובץ האימג' של vLLM TorchTPU שבו משתמשים. לגבי קובצי אימג' ציבוריים, עיינו במאגר vLLM TorchTPU.
יצירת אשכול GKE
כדי ליצור אשכול GKE במצב Standard ולצרף מאגר של צומתי TPU v6e במארח יחיד:
יוצרים אשכול GKE אזורי:
סוג המכונה שמוגדר כברירת מחדל לאשכולות GKE (
e2-medium) לא כולל מספיק קיבולת מעבד (CPU) לבקרי עומסי עבודה, ולכן הפקודה הזו מציינת אתe2-standard-4.הפלט אמור להיראות כך:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS tpu-v6e-tutorial-cluster us-central1 1.35.7-gke.1027000 34.63.222.246 e2-standard-4 1.35.7-gke.1027000 3 RUNNINGיוצרים מאגר צמתים של TPU v6e במארח יחיד עם צומת
ct6e-standard-4tאחד (ארבעה שבבי TPU v6e בטופולוגיה2x2) באמצעות ההזמנה:במקום להשתמש במקום שמור ספציפי, אתם יכולים גם ליצור את מאגר הצמתים באמצעות קיבולת Spot או Flex-start VMs, על ידי העברת הדגלים הבאים:
- Spot VMs: מחליפים את הדגלים
--reservation-affinityו---reservationבדגל--spotכדי להשתמש בקיבולת של Spot. יכול להיות שיעבור זמן מהרגע שיוצרים את מאגר הצמתים ועד שנוצרים המופעים שמשתמשים בקיבולת של Spot, ויכול להיות שהם יופסקו בזמן שעומסי העבודה פועלים. אם לוקח זמן ליצור את ה-Pods, או שעומסי העבודה נעצרים באמצע הריצה, יכול להיות שזו הסיבה. - Flex-start VMs: כדי להקצות את מאגר הצמתים באמצעות אפשרות הצריכה Flex-start, מעבירים את הדגל
--flex-start. מידע נוסף זמין במאמר הרצת עומס עבודה קטן של אצווה באמצעות יחידות TPU ומכונות וירטואליות מסוג Flex-start.
הפלט אמור להיראות כך:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION np-0 ct6e-standard-4t 100 1.35.7-gke.1027000- Spot VMs: מחליפים את הדגלים
מגדירים את פרטי הכניסה של
kubectlכדי לתקשר עם האשכול:
הגדרת פרטי כניסה
יוצרים סוד של Kubernetes בשם hf-secret כדי לאחסן את טוקן הגישה של Hugging Face:
פריסת שרת vLLM TorchTPU
במניפסט של עומס העבודה (qwen3_5_server.yaml) מוגדרים המשאבים הבאים:
StorageClass (
hyperdisk-balanced-qwen3) ו-PersistentVolumeClaim (hd-claim-qwen3) בנפח 500GiB שמגובה באחסון Google Cloud Hyperdisk Balanced, כדי לאחסן את משקלי המודל שהורדו, את מטמון הקימפול של XLA ואת מטמון הקימפול של PyTorch.פריסה (
vllm-qwen3) שמתוזמנת בצומת TPU v6e יחיד עם טופולוגיה של2x2(google.com/tpu: '4'). הקונטיינר מריץ אתvllm serveבשבילQwen/Qwen3-30B-A3B-FP8עם הדגלים הבאים:--data-parallel-size=4--tensor-parallel-size=1--enable-expert-parallel--kv-cache-dtype=fp8--max-model-len=9236--max-num-seqs=64.
שירות
ClusterIP(vllm-qwen3-service) שחושף את יציאה8000.
כדי לפרוס את עומס העבודה ולעקוב אחריו:
אחזור המניפסט של השרת:
אפשר גם ליצור קובץ בשם
qwen3_5_server.yamlעם התוכן הבא:מחילים את המניפסט של שרת vLLM TorchTPU על האשכול:
עוקבים אחרי יומני הפריסה של השרת עד שהאפליקציה מסיימת את ההפעלה:
ההפעלה הראשונית של השירות עשויה להימשך כ-15 עד 30 דקות, בזמן שה-Pod מוריד את משקלי המודל ומקמפל את המודל.
אם אתם משתמשים בקיבולת שניתנת להפקעה כמו Spot או Flex-start, יכול להיות שייקח יותר זמן ליצור את הצמתים של פרוסות ה-TPU אחרי שתיצרו את מאגר הצמתים, ושהם יופקעו בזמן הרצת עומסי העבודה. אם לוקח לפודים יותר זמן מהצפוי להתחיל, או אם עומסי העבודה נעצרים באמצע, יכול להיות שזו הסיבה. מידע נוסף זמין במאמר הפקעה של VM במודל Spot. כדי לבדוק אם נוצרו צומתי פרוסות ה-TPU, קראו את המאמר בדיקת הסטטוס והתנאים של הצומת.
לפני ששולחים תנועה, צריך להמתין עד שמופיעה ההודעה
Application startup completeביומנים:(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.פותחים סשן שני בטרמינל.
בסשן השני של הטרמינל, מעבירים את היציאה המקומית
8000אלvllm-qwen3-service:משאירים את ההעברה ליציאה אחרת פועלת בסשן הטרמינל הזה.
שליחת בקשות להסקת מסקנות
חוזרים לסשן הראשון בטרמינל ושולחים בקשה להשלמת צ'אט לנקודת הקצה (endpoint) של /v1/chat/completions:
הרצת עומס עבודה להערכת ביצועים
כדי להשוות את המודל Qwen3-30B-A3B שנפרס באמצעות עומס עבודה של קלט של 8,192 טוקנים ופלט של 1,024 טוקנים (8k/1k) עם חבילת ההשוואה InferenceX, מבצעים את השלבים הבאים:
אחזור המניפסט של הערכת הביצועים:
אפשר גם ליצור קובץ בשם
qwen3_5-benchmark-8k1k.yamlעם התוכן הבא:מפעילים את המניפסט של Pod להערכת ביצועים:
עוקבים אחרי יומני הערכת הביצועים:
השלמת הבדיקה נמשכת כ-25 עד 30 דקות.
אחרי שהבדיקה מסתיימת, מחפשים פלט שמכיל מדדים כמו:
Output token throughputTotal token throughputTTFTTPOT
הסרת המשאבים
כדי להימנע מחיובים שוטפים נוספים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם צריכים למחוק את עומסי העבודה ב-Kubernetes, את מאגר הצמתים של ה-TPU ואת אשכול ה-GKE:
מוחקים את הפריסה, השירות, PersistentVolumeClaim והסוד של Hugging Face בשרת vLLM TorchTPU:
מוחקים את מאגר הצמתים של TPU v6e ואת אשכול GKE: