אתם יכולים להגדיר התאמה אוטומטית לעומס (autoscaling) לעומסי עבודה של מודלים גדולים של שפה (LLM) שפועלים במעבדים גרפיים (GPU) ב-Google Kubernetes Engine (GKE). התכונה 'שינוי גודל אוטומטי' משנה באופן אוטומטי את המשאבים כדי להתמודד עם תנודות בביקוש, לשפר את הביצועים ולהפחית את עלויות התפעול. התהליך הזה כולל פריסה של Gemma LLM ושימוש ב-Horizontal Pod Autoscaler (HPA) של GKE כדי לשנות את גודל הפודים באופן אוטומטי. הפריסה משלבת גם את ממשק יצירת הטקסט של Hugging Face (TGI), שהוא מסגרת להסקת מסקנות יעילה.
מידע נוסף על בחירת מדדים להתאמה אוטומטית לעומס זמין במאמר שיטות מומלצות להתאמה אוטומטית לעומס של עומסי עבודה של מודלים גדולים של שפה (LLM) באמצעות GPU ב-GKE.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מומלץ לעיין בתהליך העבודה במאמר פרסום מודלים פתוחים של Gemma באמצעות GPUs ב-GKE עם Hugging Face TGI.
התאמה אוטומטית של הקיבולת באמצעות מדדי שרת
אתם יכולים להשתמש במדדי הביצועים הספציפיים לעומס העבודה שמופקים על ידי שרת ההיסקים של TGI כדי לכוון את שינוי הגודל האוטומטי של ה-Pods. מידע נוסף על המדדים האלה זמין במאמר מדדים של השרת.
כדי להגדיר שינוי אוטומטי של קנה מידה של מדדים מותאמים אישית באמצעות מדדי שרת:
ייצוא המדדים משרת ה-TGI אל Cloud Monitoring. אתם משתמשים בשירות המנוהל של Google Cloud ל-Prometheus, שמפשט את הפריסה וההגדרה של כלי האיסוף של Prometheus. השירות המנוהל של Google Cloud ל-Prometheus מופעל כברירת מחדל באשכול GKE שלכם. אפשר גם להפעיל אותו באופן ידני.
בקובץ המניפסט שמוצג בדוגמה הבאה מוגדר משאב PodMonitoring שמורה לשירות המנוהל של Google Cloud ל-Prometheus לבצע סקריפט של מדדים מה-Pods במרווחי זמן חוזרים של 15 שניות:
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: gemma-pod-monitoring spec: selector: matchLabels: app: gemma-server endpoints: - port: 8000 interval: 15sמתקינים את Custom Metrics Stackdriver Adapter. המתאם הזה מאפשר לבקר HPA לראות את המדד המותאם אישית שייצאתם ל-Monitoring. פרטים נוספים זמינים במאמר בנושא שינוי אוטומטי של מספר העותקים של פודים במאמרי העזרה של השירות המנוהל של Google Cloud ל-Prometheus.
בדוגמה הבאה אפשר לראות איך להתקין את המתאם:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yamlמגדירים את משאב ה-HPA שמבוסס על מדד מותאם אישית. פריסת משאב HPA שמבוסס על המדד המותאם אישית המועדף. פרטים נוספים זמינים במאמר בנושא שינוי אוטומטי של מספר העותקים של פודים במאמרי העזרה של השירות המנוהל של Google Cloud ל-Prometheus.
בוחרים באחת מהכרטיסיות האלה כדי לראות דוגמאות להגדרת המשאב HorizontalPodAutoscaler במניפסט:
גודל התור
בדוגמה הזו נעשה שימוש במדדים של שרת
tgi_queue_sizeTGI, שמייצגים את מספר הבקשות בתור.כדי לקבוע את ערך הסף הנכון של גודל התור ל-HPA, אפשר לעיין במאמר בנושא שיטות מומלצות להרחבת קנה מידה אוטומטית של עומסי עבודה של הסקת מסקנות של מודלים גדולים של שפה (LLM) באמצעות מעבדי GPU.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-server spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: prometheus.googleapis.com|tgi_queue_size|gauge target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGETגודל האצווה
בדוגמה הזו נעשה שימוש במדד השרת
tgi_batch_sizeTGI, שמייצג את מספר הבקשות באצווה הנוכחית.כדי לקבוע את ערך הסף הנכון של גודל האצווה ל-HPA, אפשר לעיין במאמר שיטות מומלצות להרחבת קנה מידה אוטומטית של עומסי עבודה של הסקת מסקנות של מודלים גדולים של שפה (LLM) באמצעות מעבדי GPU.
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-server spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: prometheus.googleapis.com|tgi_batch_current_size|gauge target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGET
התאמה אוטומטית של הקיבולת באמצעות מדדי GPU
אתם יכולים להשתמש במדדי השימוש והביצועים שמופקים מה-GPU כדי להגדיר שינוי אוטומטי של גודל הקבוצות של ה-Pods. מידע נוסף על המדדים האלה זמין במאמר מדדי GPU.
כדי להגדיר שינוי אוטומטי של קנה מידה של מדדים מותאמים אישית באמצעות מדדי GPU, פועלים לפי השלבים הבאים:
ייצוא מדדי ה-GPU ל-Cloud Monitoring אם הפעלתם מדדים של המערכת באשכול GKE, המדד של ניצול ה-GPU נשלח אוטומטית אל Cloud Monitoring דרך
container/accelerator/duty_cycleהמדד של המערכת, כל 60 שניות.- כדי ללמוד איך להפעיל מדדי מערכת של GKE, אפשר לעיין במאמר בנושא הגדרת איסוף מדדים.
- כדי להגדיר איסוף מנוהל, אפשר לעיין במאמר תחילת העבודה עם איסוף מנוהל במסמכי התיעוד של השירות המנוהל של Google Cloud ל-Prometheus.
- טכניקות נוספות למעקב אחרי ביצועי עומסי העבודה של ה-GPU ב-GKE מפורטות במאמר הפעלת מעבדי GPU במאגרי צמתים רגילים ב-GKE.
בקובץ המניפסט הבא לדוגמה אפשר לראות איך מגדירים את הגדרת המשאב PodMonitoring כדי להטמיע מדדים מעומס העבודה של NVIDIA DCGM:
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: nvidia-dcgm-exporter-for-hpa namespace: gke-managed-system labels: app.kubernetes.io/name: nvidia-dcgm-exporter app.kubernetes.io/part-of: google-cloud-managed-prometheus spec: selector: matchLabels: app.kubernetes.io/name: gke-managed-dcgm-exporter endpoints: - port: metrics interval: 15s metricRelabeling: - action: keep sourceLabels: [__name__] - action: replace sourceLabels: [__name__] targetLabel: __name__ regex: DCGM_FI_DEV_GPU_UTIL replacement: dcgm_fi_dev_gpu_utilבקוד, חשוב לשנות את שם המדד של DCGM שבו משתמשים ב-HPA לאותיות קטנות. הסיבה לכך היא בעיה מוכרת שבה HPA לא פועל עם שמות מדדים חיצוניים באותיות רישיות. במקרה של אשכולות שלא נעשה בהם שימוש בייצוא DCGM מנוהל, צריך לוודא שההגדרות
metadata.namespaceו-spec.selector.matchLabelsשל HPA זהות להגדרות של ייצוא DCGM.ההתאמה המדויקת הזו חיונית כדי ש-HPA יוכל לגלות ולשאול שאילתות לגבי מדדים מותאמים אישית.מתקינים את Custom Metrics Stackdriver Adapter. המתאם הזה מאפשר לבקר HPA לראות את המדד המותאם אישית שייצאתם ל-Monitoring. פרטים נוספים זמינים במאמר בנושא שינוי אוטומטי של מספר העותקים של פודים במאמרי העזרה של השירות המנוהל של Google Cloud ל-Prometheus.
בדוגמת הפקודה הבאה אפשר לראות איך מבצעים את ההתקנה:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yamlמגדירים את משאב ה-HPA שמבוסס על מדד מותאם אישית. פורסים משאב HPA על סמך המדד המותאם אישית המועדף. פרטים נוספים זמינים במאמר בנושא שינוי אוטומטי של מספר העותקים של פודים במאמרי העזרה של השירות המנוהל של Google Cloud ל-Prometheus.
- מגדירים יעד ערך ממוצע ל-HPA כדי להפעיל שינוי גודל אוטומטי. אפשר לעשות את זה באופן ניסיוני. לדוגמה, אפשר ליצור עומס הולך וגובר על השרת ולראות איפה השימוש ב-GPU מגיע לשיא. חשוב לשים לב לסבילות של HPA, שמוגדרת כברירת מחדל כטווח של 0.1 ללא פעולה סביב ערך היעד כדי למנוע תנודות.
- מומלץ להשתמש בכלי locust-load-inference לבדיקה. אפשר גם ליצור לוח בקרה מותאם אישית ב-Cloud Monitoring כדי להציג את התנהגות המדד.
בוחרים באחת מהכרטיסיות האלה כדי לראות דוגמה להגדרת המשאב HorizontalPodAutoscaler במניפסט:
דיוטי סייקל (מערכת GKE)
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: External external: metric: name: kubernetes.io|container|accelerator|duty_cycle selector: matchLabels: resource.labels.container_name: inference-server resource.labels.namespace_name: default target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGETדיוטי סייקל (DCGM)
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gemma-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: tgi-gemma-deployment minReplicas: 1 maxReplicas: 5 metrics: - type: External external: metric: name: prometheus.googleapis.com|dcgm_fi_dev_gpu_util|unknown selector: matchLabels: metric.labels.exported_container: inference-server metric.labels.exported_namespace: default target: type: AverageValue averageValue: $HPA_AVERAGEVALUE_TARGET
המאמרים הבאים
- איך חושפים מדדים מותאמים אישית לצורך שינוי אוטומטי של קנה המידה
- מידע נוסף על התאמה אופקית של קבוצות Pod לעומס זמין במסמכי התיעוד של Kubernetes בקוד פתוח.