במדריך הזה נסביר איך לפרוס ולהפעיל את מודל שילוב המומחים (MoE) המולטימודלי Gemma 4 26B (google/gemma-4-26B-A4B-it) ב-Google Kubernetes Engine (GKE) באמצעות מאיצי Cloud TPU v6e (Trillium) עם כמה מארחים ו-vLLM TorchTPU.
מכיוון שעומס העבודה מתפרס על פני כמה מארחי TPU בטופולוגיה של 2x4, אתם משתמשים ב-Kubernetes LeaderWorkerSet API וב-Ray כדי לתאם הסקת מסקנות מבוזרת במקביל לטנזור על פני שמונה שבבי TPU.
מטרות
- מגדירים את אשכול GKE ואת מאגר הצמתים של TPU v6e עם כמה מארחים.
- פורסים את שרת ה-vLLM עם כמה מארחים באמצעות LeaderWorkerSet.
- לשלוח בקשות להסקת מסקנות מטקסט וממולטי-מודאליות.
- מריצים עומס עבודה להערכת ביצועים של מילוי בקשות.
- לפנות מקום.
עלויות
במסמך הזה משתמשים ברכיבים הבאים שלGoogle Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את העלויות בהתאם לשימוש הצפוי, אתם יכולים להשתמש במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
כדי להשתמש במדריך הזה, אתם צריכים טוקן גישה ל-Hugging Face. אפשר להירשם לחשבון בחינם ב-Hugging Face. אחרי שיוצרים חשבון, יוצרים אסימון גישה:
- בדף Welcome to Hugging Face, לוחצים על הדמות של החשבון ובוחרים באפשרות טוקן גישה.
- בדף טוקני גישה, לוחצים על יצירת טוקן חדש.
- בוחרים את סוג הטוקן Read ומזינים שם לטוקן.
- טוקן הגישה שלכם יוצג. שומרים את הטוקן במקום בטוח.
- מתקינים ומפעילים את Google Cloud CLI, ומתקינים את
kubectl. אם אתם משתמשים ב-Cloud Shell, שני הכלים מותקנים מראש.
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:
- אדמין ב-Kubernetes Engine (
roles/container.admin) - אדמין ב-Compute (
roles/compute.admin) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הגדרת משתני הסביבה
מגדירים את משתני הסביבה:
מחליפים את מה שכתוב בשדות הבאים:
-
YOUR_PROJECT_ID: מזהה הפרויקט ב- Google Cloud. -
YOUR_RESERVATION_NAME: שם ההזמנה. -
YOUR_REGION: האזור שבו רוצים לפרוס את אשכול GKE. -
YOUR_ZONE: האזור שבו רוצים לפרוס את מאגר הצמתים של TPU v6e. -
YOUR_CLUSTER_NAME: השם של אשכול GKE. -
YOUR_HF_TOKEN: טוקן הגישה ל-Hugging Face. -
YOUR_VLLM_TPU_IMAGE: קובץ האימג' של vLLM TPU שבו רוצים להשתמש. לגבי קובצי אימג' ציבוריים, עיינו במאגר vLLM TorchTPU.
יצירת אשכול GKE
כדי ליצור את אשכול GKE ולצרף מאגר של צומתי TPU v6e עם כמה מארחים:
יוצרים אשכול GKE אזורי שמשתמש ב-
e2-standard-4צמתים למאגר הצמתים שמוגדר כברירת מחדל, ובמאגר צמתים של TPU v6e עם שני צמתים מסוגct6e-standard-4tשמסודרים בטופולוגיה של2x4(סה"כ שמונה שבבי TPU). סוג המכונה שמוגדר כברירת מחדל ב-GKE (e2-medium) לא מספק מספיק משאבי מעבד (CPU) לבקר LeaderWorkerSet, ולכן במדריך הזה מצויןe2-standard-4:במקום להשתמש בהזמנה ספציפית, אתם יכולים גם ליצור את מאגר הצמתים באמצעות קיבולת של Spot או מכונות וירטואליות מסוג Flex-start, על ידי העברת הדגלים הבאים:
- VM במודל Spot: מחליפים את הדגלים
--reservation-affinityו---reservationבדגל--spotכדי להשתמש בקיבולת של Spot. יכול להיות שייקח זמן ליצור מכונות שמשתמשות בקיבולת של Spot אחרי שנוצר מאגר הצמתים, ויכול להיות שהן יופסקו במהלך הרצת עומסי העבודה. אם לוקח זמן ליצור את ה-Pods, או שעומסי העבודה מפסיקים באמצע הריצה, יכול להיות שזו הסיבה. - Flex-start VMs: מעבירים את הערך
--flex-startכדי להקצות את מאגר הצמתים באמצעות אפשרות הצריכה Flex-start. מידע נוסף זמין במאמר הרצת עומס עבודה קטן של אצווה באמצעות יחידות TPU ומכונות וירטואליות מסוג Flex-start.
- VM במודל Spot: מחליפים את הדגלים
מגדירים את פרטי הכניסה של
kubectlכדי לתקשר עם האשכול:
הגדרת פרטי כניסה והתקנת LeaderWorkerSet
כדי להכין את האשכול לפריסה בכמה מארחים, מבצעים את השלבים הבאים:
מייצאים את הטוקן של Hugging Face ויוצרים Kubernetes Secret בשם
hf-secret:מתקינים את ה-CustomResourceDefinition והבקר של LeaderWorkerSet באשכול:
פריסת שרת vLLM עם כמה מארחים
במניפסט של עומס העבודה (gemma4-26b-multihost-v6e-2x4.yaml) מוגדרים שני משאבים:
- משאב LeaderWorkerSet (
vllm-tpu-gemma4-26b) עםsize: 2(Pod אחד של Leader ו-Pod אחד של Worker) מתוזמן בשני הצמתים שלct6e-standard-4tבפרוסת ה-TPU של2x4. כל Pod מריץ InitContainer שמאחזר מראש את משקלי המודלgoogle/gemma-4-26B-A4B-itמ-Hugging Face לנפח בזיכרון לפני הפעלת Ray ושרת ה-API של vLLM OpenAI עם הדגלים--tensor-parallel-size=8,--kv-cache-dtype=fp8,--max-model-len=5248ו---max-num-seqs=128. - שירות ClusterIP (
vllm-service) שחושף את יציאה8000ב-Pod הראשי.
כדי לפרוס את עומס העבודה ולעקוב אחריו:
מורידים את המניפסט של LeaderWorkerSet מ-GitHub:
אפשר גם ליצור קובץ בשם
gemma4-26b-multihost-v6e-2x4.yamlעם התוכן הבא:מחילים את המניפסט של LeaderWorkerSet:
עוקבים אחרי הסטטוס והיומנים של ה-Pod הראשי עד שהאפליקציה מסיימת את תהליך ההפעלה:
ההפעלה הראשונית של השירות נמשכת כ-9 דקות, בזמן שה-Pods מאחזרים מראש את משקלי המודל, יוצרים את אשכול Ray עם שני הצמתים בכל שמונת שבבי ה-TPU ומקמפלים את המודל. לפני ששולחים תנועה, צריך להמתין עד שמופיע ביומנים הדיווח
Application startup complete.בסשן מסוף שני, מעבירים את היציאה המקומית
8000אלvllm-service:משאירים את ההעברה ליציאה אחרת פועלת בסשן הטרמינל הזה.
שליחת בקשות להסקת מסקנות
חוזרים לסשן הראשון בטרמינל ובודקים את המודל שנפרס באמצעות בקשות להשלמת צ'אט עם טקסט ובקשות מולטי-מודאליות:
שולחים בקשה להשלמת צ'אט טקסט לנקודת הקצה (endpoint) של
/v1/chat/completions:שליחת בקשה מולטי-מודאלית שמכילה גם כתובת URL של תמונה וגם פרומפט טקסטואלי:
הרצת עומס עבודה להערכת ביצועים
כדי לבצע השוואה לשוק של המודל שנפרס, מריצים את הפקודה הבאה:
הסרת המשאבים
כדי להימנע מחיובים שוטפים נוספים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם צריכים למחוק את עומסי העבודה ב-Kubernetes, את מאגר הצמתים של ה-TPU ואת אשכול ה-GKE:
מוחקים את פריסת שרת ה-vLLM ואת הסוד של Hugging Face:
מוחקים את מאגר הצמתים של TPU v6e ואת אשכול GKE:
חוזרים לסשן השני בטרמינל ומפסיקים את העברה ליציאה אחרת.