במאמר הזה נסביר איך להגדיר זמינות גבוהה אלסטית בין אזורים לעומסי עבודה של הסקת מסקנות מ-AI באמצעות Multi-Cluster Inference Gateway (שער הסקת מסקנות מרובה אשכולות) של Google Kubernetes Engine (GKE) והתכונה 'שינוי גודל אוטומטי' של GKE. ההגדרה הזו מאפשרת לכם לאזן עומסי עבודה בצורה חכמה בין כמה אשכולות GKE באזורים שונים.
מידע נוסף על GKE Multi-Cluster Inference Gateway זמין במאמר מידע על GKE Multi-Cluster Inference Gateway.
לפני שמתחילים
מפעילים את Google Kubernetes Engine API.
אם אתם מתכננים להשתמש ב-Google Cloud CLI למשימה הזו, אתם צריכים להתקין ולהפעיל אותו.
מוודאים שיש בפרויקט מכסה מספיקה לשימוש ב-GPU מדגם H100. מידע נוסף זמין במאמרים בנושא מכסת GPU והקצאת משאבים.
משתמשים בגרסה 1.34.1-gke.1127000 של GKE ואילך.
משתמשים ב-CLI של gcloud בגרסה 480.0.0 ואילך.
מוודאים שלחשבון השירות שבו משתמשים הצמתים יש את ההרשאות
roles/monitoring.metricWriterו-roles/stackdriver.resourceMetadata.writer.מוודאים שיש לכם תפקידים ב-IAM (המערכת לניהול הזהויות והרשאות הגישה)
roles/container.adminוroles/iam.serviceAccountAdminבפרויקט.צריך להשלים את הדרישות המוקדמות הבאות של Hugging Face:
- יוצרים חשבון ב-Hugging Face.
- שליחת בקשה וקבלת אישור לגישה למודל Llama 3.1 ב-Hugging Face.
- חותמים על הסכם הרישיון בדף של המודל ב-Hugging Face.
- יוצרים אסימון גישה ל-Hugging Face עם הרשאות קריאה לפחות.
יצירת אשכולות ומאגרי צמתים
כדי ליצור שני אשכולות GKE באזורים שונים ולהגדיר את מאגרי הצמתים שלהם, מבצעים את השלבים הבאים:
יוצרים את האשכול הראשון:
gcloud container clusters create gke-west --zone \ CLUSTER_1_ZONE \ --project=PROJECT_ID \ --gateway-api=standard \ --cluster-version=GKE_VERSION \ --machine-type="MACHINE_TYPE" \ --disk-type="DISK_TYPE" \ --enable-managed-prometheus --monitoring=SYSTEM,DCGM \ --hpa-profile=performance \ --workload-pool=PROJECT_ID.s3ns.svc.id.goog \ --asyncמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_1_ZONE: האזור של האשכול הראשון, לדוגמהeurope-west3-c -
GKE_VERSION: גרסת GKE לשימוש, לדוגמה1.34.1-gke.1127000 -
MACHINE_TYPE: סוג המכונה של צמתי האשכול, לדוגמהc2-standard-16 -
DISK_TYPE: סוג הדיסק של צמתי האשכול, לדוגמהpd-standard
-
יוצרים מאגר צמתים מסוג H100 באשכול הראשון:
gcloud container node-pools create h100 \ --accelerator "type=nvidia-h100-80gb,count=2,gpu-driver-version=latest" \ --project=PROJECT_ID \ --location=CLUSTER_1_ZONE \ --node-locations=CLUSTER_1_ZONE \ --cluster=CLUSTER_1_NAME \ --machine-type=NODE_POOL_MACHINE_TYPE \ --num-nodes=NUM_NODES \ --spot \ --min-nodes=MIN_NUM_NODES \ --max-nodes=MAX_NUM_NODES \ --enable-autoscaling \ --asyncמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_1_ZONE: האזור של האשכול הראשון, לדוגמהeurope-west3-c -
CLUSTER_1_NAME: השם של האשכול הראשון, למשלgke-west -
NODE_POOL_MACHINE_TYPE: סוג המכונה של מאגר הצמתים, לדוגמהa3-highgpu-2g -
NUM_NODES: מספר הצמתים במאגר הצמתים, לדוגמה3 -
MIN_NUM_NODES: מספר הצמתים המינימלי להרחבה אוטומטית במאגר הצמתים, לדוגמה1 -
MAX_NUM_NODES: המספר המקסימלי של הצמתים להרחבה אוטומטית במאגר הצמתים, לדוגמה10
-
מקבלים פרטי כניסה ויוצרים סוד של טוקן Hugging Face באשכול הראשון:
gcloud container clusters get-credentials CLUSTER_1_NAME \ --location CLUSTER_1_ZONE \ --project=PROJECT_ID kubectl create secret generic hf-token \ --from-literal=token=HF_TOKENמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_1_NAME: השם של האשכול הראשון, למשלgke-west -
CLUSTER_1_ZONE: האזור של האשכול הראשון, לדוגמהeurope-west3-c -
HF_TOKEN: טוקן הגישה שלכם ל-Hugging Face
-
יוצרים את האשכול השני באזור אחר מהאזור של האשכול הראשון:
gcloud container clusters create gke-east --zone CLUSTER_2_ZONE \ --project=PROJECT_ID \ --gateway-api=standard \ --cluster-version=GKE_VERSION \ --machine-type="MACHINE_TYPE" \ --disk-type="DISK_TYPE" \ --enable-managed-prometheus \ --monitoring=SYSTEM,DCGM \ --hpa-profile=performance \ --workload-pool=PROJECT_ID.s3ns.svc.id.goog \ --asyncמחליפים את
CLUSTER_2_ZONEבאזור של האשכול השני, לדוגמהus-east4-a.יוצרים מאגר צמתים מסוג H100 עבור האשכול השני:
gcloud container node-pools create h100 \ --accelerator "type=nvidia-h100-80gb,count=2,gpu-driver-version=latest" \ --project=PROJECT_ID \ --location=CLUSTER_2_ZONE \ --node-locations=CLUSTER_2_ZONE \ --cluster=CLUSTER_2_NAME \ --machine-type=NODE_POOL_MACHINE_TYPE \ --num-nodes=NUM_NODES \ --spot \ --min-nodes=MIN_NUM_NODES \ --max-nodes=MAX_NUM_NODES \ --enable-autoscaling \ --asyncמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_2_ZONE: האזור של האשכול השני, למשלus-east4-a -
CLUSTER_2_NAME: השם של האשכול השני, למשלgke-east -
NODE_POOL_MACHINE_TYPE: סוג המכונה של מאגר הצמתים, לדוגמהa3-highgpu-2g -
NUM_NODES: מספר הצמתים במאגר הצמתים, לדוגמה3 -
MIN_NUM_NODES: מספר הצמתים המינימלי להרחבה אוטומטית במאגר הצמתים, לדוגמה1 -
MAX_NUM_NODES: המספר המקסימלי של הצמתים להרחבה אוטומטית במאגר הצמתים, לדוגמה10
-
מקבלים פרטי כניסה ויוצרים סוד עבור אסימון Hugging Face באשכול השני:
gcloud container clusters get-credentials CLUSTER_2_NAME \ --location CLUSTER_2_ZONE \ --project=PROJECT_ID kubectl create secret generic hf-token --from-literal=token=HF_TOKENמחליפים את הפרטים הבאים. הגדרות של משתנים אחרים מופיעות בשלבים הקודמים:
-
HF_TOKEN: טוקן הגישה שלכם ל-Hugging Face
-
רישום אשכולות ב-Fleet
רושמים את האשכולות ב-Fleet של הפרויקט:
gcloud container fleet memberships register CLUSTER_1_NAME \ --gke-cluster CLUSTER_1_ZONE/CLUSTER_1_NAME \ --location=global \ --project=PROJECT_ID gcloud container fleet memberships register CLUSTER_2_NAME \ --gke-cluster CLUSTER_2_ZONE/CLUSTER_2_NAME \ --location=global \ --project=PROJECT_IDמחליפים את הערכים הבאים, ונעזרים בהגדרות של משתנים אחרים מהשלבים הקודמים:
-
CLUSTER_1_NAME: השם של האשכול הראשון, למשלgke-west -
CLUSTER_2_NAME: השם של האשכול השני, למשלgke-east
-
מפעילים את התכונה Multi-Cluster Ingress ומגדירים אשכול תצורה:
gcloud container fleet ingress enable \ --config-membership=projects/PROJECT_ID/locations/global/memberships/CLUSTER_1_NAMEמחליפים את הפרטים הבאים. הגדרות של משתנים אחרים מופיעות בשלבים הקודמים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_1_NAME: השם של האשכול הראשון, למשלgke-west
-
יצירת רשתות משנה לשרתי proxy בלבד
אזהרה: Cloud de Confiance by S3NS מאפשרת לכל רשת VPC להכיל רק תת-רשת אחת של שרת proxy בלבד לכל אזור. אם אזור היעד כבר מכיל רשת משנה (subnet) עם הגדרה של purpose=REGIONAL_MANAGED_PROXY שמוגדרת כפרוקסי בלבד, יצירת רשת המשנה GLOBAL_MANAGED_PROXY תיכשל. קודם צריך למחוק את רשת המשנה הקיימת של פרוקסי אזורי בלבד. מחיקה של רשת משנה אזורית מסוג proxy-only משפיעה על כל מאזני העומסים האזוריים שמבוססים על Envoy באותו אזור שמשתמשים בה, ולכן חשוב לתכנן את השינוי בהתאם.
יוצרים רשת משנה באזור של האשכול הראשון:
gcloud compute networks subnets create CLUSTER_1_REGION-subnet \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=CLUSTER_1_REGION \ --network=default \ --range=SUBNET_RANGE_1 \ --project=PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_1_REGION: האזור של האשכול הראשון, למשלeurope-west3 -
SUBNET_RANGE_1: טווח כתובות ה-IP של רשת המשנה של הפרוקסי באזור של האשכול הראשון, לדוגמה10.0.0.0/23
-
יוצרים תת-רשת באזור של האשכול השני:
gcloud compute networks subnets create CLUSTER_2_REGION-subnet \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=CLUSTER_2_REGION \ --network=default \ --range=SUBNET_RANGE_2 \ --project=PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_2_REGION: האזור של האשכול השני, למשלus-east4 -
SUBNET_RANGE_2: טווח כתובות ה-IP של רשת המשנה של הפרוקסי בלבד באזור של האשכול השני, לדוגמה10.5.0.0/23
-
התקנה של משאבים מותאמים אישית נדרשים
מגדירים משתני הקשר עבור האשכולות:
CLUSTER1_CONTEXT="gke_PROJECT_ID_CLUSTER_1_ZONE_CLUSTER_1_NAME" CLUSTER2_CONTEXT="gke_PROJECT_ID_CLUSTER_2_ZONE_CLUSTER_2_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CLUSTER_1_ZONE: האזור של האשכול הראשון, לדוגמהeurope-west3-c -
CLUSTER_1_NAME: השם של האשכול הראשון, למשלgke-west -
CLUSTER_2_ZONE: האזור של האשכול השני, למשלus-east4-a -
CLUSTER_2_NAME: השם של האשכול השני, למשלgke-east
-
מתקינים את המשאב המותאם אישית InferencePool ואת המשאב המותאם אישית InferenceObjective בשני האשכולות:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.0.1/manifests.yaml --context=$CLUSTER1_CONTEXT kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.0.1/manifests.yaml --context=$CLUSTER2_CONTEXT
פריסת משאבים באשכולות היעד
פורסים את שרתי המודלים לשני האשכולות:
kubectl apply -f \ https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/release-1.0/config/manifests/vllm/gpu-deployment.yaml \ --context=$CLUSTER1_CONTEXT kubectl apply -f \ https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/release-1.0/config/manifests/vllm/gpu-deployment.yaml \ --context=$CLUSTER2_CONTEXTשומרים את המניפסט הבא בקובץ בשם
inference-objective.yaml:apiVersion: inference.networking.x-k8s.io/v1alpha2 kind: InferenceObjective metadata: name: food-review spec: priority: 10 poolRef: name: llama3-8b-instruct group: "inference.networking.k8s.io"מחילים את המניפסט על שני האשכולות:
kubectl apply -f inference-objective.yaml --context=$CLUSTER1_CONTEXT kubectl apply -f inference-objective.yaml --context=$CLUSTER2_CONTEXTפורסים את משאבי InferencePool לשני האשכולות באמצעות Helm:
helm install vllm-llama3-8b-instruct \ --kube-context $CLUSTER1_CONTEXT \ --set inferencePool.modelServers.matchLabels.app=vllm-llama3-8b-instruct \ --set provider.name=gke \ --set inferenceExtension.monitoring.gke.enabled=true \ --version v1.0.1 \ oci://registry.k8s.io/gateway-api-inference-extension/charts/inferencepool helm install vllm-llama3-8b-instruct \ --kube-context $CLUSTER2_CONTEXT \ --set inferencePool.modelServers.matchLabels.app=vllm-llama3-8b-instruct \ --set provider.name=gke \ --set inferenceExtension.monitoring.gke.enabled=true \ --version v1.0.1 \ oci://registry.k8s.io/gateway-api-inference-extension/charts/inferencepoolבשני האשכולות, מסמנים את המשאבים
InferencePoolכמיוצאים בשני האשכולות:kubectl annotate inferencepool vllm-llama3-8b-instruct networking.gke.io/export="True" \ --context=$CLUSTER1_CONTEXT kubectl annotate inferencepool vllm-llama3-8b-instruct networking.gke.io/export="True" \ --context=$CLUSTER2_CONTEXT
פריסת שער היקשים חוצה אזורים
שומרים את קובץ המניפסט הבא בשם
mygateway.yaml:--- kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: cross-region-gateway namespace: default spec: gatewayClassName: gke-l7-cross-regional-internal-managed-mc addresses: - type: networking.gke.io/ephemeral-ipv4-address/europe-west3 value: "europe-west3" - type: networking.gke.io/ephemeral-ipv4-address/us-east4 value: "us-east4" listeners: - name: http protocol: HTTP port: 80 allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: All --- apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: vllm-llama3-8b-instruct-default spec: parentRefs: - name: cross-region-gateway kind: Gateway rules: - backendRefs: - group: networking.gke.io kind: GCPInferencePoolImport name: vllm-llama3-8b-instruct --- kind: HealthCheckPolicy apiVersion: networking.gke.io/v1 metadata: name: health-check-policy namespace: default spec: targetRef: group: "networking.gke.io" kind: GCPInferencePoolImport name: vllm-llama3-8b-instruct default: config: type: HTTP httpHealthCheck: requestPath: /health port: 8000מחילים את המניפסט על אשכול ההגדרות:
kubectl apply -f mygateway.yaml --context=CLUSTER1_CONTEXTמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER1_CONTEXT: ההקשר של האשכול הראשון, לדוגמהgke_my-project_europe-west3-c_gke-west
-
הפעלת דיווח על מדדים מותאמים אישית
יוצרים קובץ בשם
metrics.yamlעם התוכן הבא:apiVersion: autoscaling.gke.io/v1beta1 kind: AutoscalingMetric metadata: name: gpu-cache namespace: default spec: selector: matchLabels: app: vllm-llama3-8b-instruct endpoints: - port: 8000 path: /metrics metrics: - name: vllm:kv_cache_usage_perc exportName: kv-cache - name: vllm:gpu_cache_usage_perc exportName: kv-cache-oldלכל אשכול, מחילים את הגדרת המדדים:
kubectl apply -f metrics.yaml --context=CLUSTER1_CONTEXT kubectl apply -f metrics.yaml --context=CLUSTER2_CONTEXTהגדרות של
CLUSTER1_CONTEXTו-CLUSTER2_CONTEXTמפורטות במאמר התקנת משאבים מותאמים אישית נדרשים.
הגדרת מדיניות איזון העומסים
בקטע הזה מוסבר איך להגדיר את מדיניות איזון העומסים. במדיניות הזו מוגדרת שיטת חלוקת התנועה בין מאגרי ההסקות על סמך מדדים מותאמים אישית והעדפות אזוריות. ההגדרה הבאה קובעת את us-east4 כאזור המועדף. התנועה עוברת לאזורים אחרים רק כשgke.named_metrics.kv-cache המדד המותאם אישית באזור us-east4 מגיע ל-80% ניצול.
- בגרסאות vLLM v0.10.2 ואילך, משתמשים במדד
gke.named_metrics.kv-cache. - בגרסאות קודמות, משתמשים במדד
gke.named_metrics.kv-cache-old.
יוצרים קובץ בשם
backend-policy.yamlעם התוכן הבא:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "networking.gke.io" kind: GCPInferencePoolImport name: vllm-llama3-8b-instruct default: timeoutSec: 600 balancingMode: CUSTOM_METRICS trafficDuration: LONG customMetrics: - name: gke.named_metrics.kv-cache maxUtilizationPercent: 80 dryRun: false scopes: - selector: gke.io/region: "us-east4" backendPreference: PREFERREDהחלת המדיניות החדשה:
kubectl apply -f backend-policy.yaml --context=CLUSTER1_CONTEXTמחליפים את
CLUSTER1_CONTEXTבהקשר של האשכול הראשון, לדוגמהgke_my-project_europe-west3-c_gke-west
הגדרת התאמה אוטומטית לעומס
כדי לוודא שכל אשכול יכול להתמודד עם עומס גדל והולך לפני שהתנועה עוברת לאזורים אחרים, צריך להגדיר את Horizontal-Pod-Autoscaler (HPA) לפריסות של שרת המודל.
עקרונות מרכזיים להגדרה
שימוש באותם מדדים בהתאמה אישית: צריך להגדיר את ה-HPA כך שהוא יתבסס על אותם מדדים בהתאמה אישית שבהם משתמשים ב-
GCPBackendPolicyעבור Multi-Cluster Inference Gateway (לדוגמה,vllm:kv_cache_usage_perc). הגישה הזו עוזרת לוודא שהאיזון בעומס וההחלטות לגבי שינוי הגודל מבוססים על אותו אות משרתי ההסקה. הערך של המדדים שבוחרים צריך להיות בין 0 ל-1 כדי לייצג את רמת הניצול. אם ערך המדד גדול מ-1, הוא מתפרש כניצול של 100% על ידי מאזן העומסים, וזה עלול לגרום להתנהגויות לא צפויות של ניתוב.הגדרת יעד HPA נמוך יותר: ערך היעד של המדד בהגדרת ה-HPA צריך להיות נמוך יותר מההגדרה
maxUtilizationPercentשמוגדרת ב-GCPBackendPolicy. אם מגדירים את יעד הניצול של HPA לערך נמוך יותר (לדוגמה, HPA מבצע מידרוג ב-50% ניצול ממוצע), מאפשרים לאשכול להוסיף עוד רפליקות לפני שמגיעים לסף של מאזן העומסים (לדוגמה, 80% ניצול). הגישה הזו עוזרת למקסם את הקיבולת באזור המועדף. הגדרת יעד ניצול נמוך יותר עוזרת גם למנוע מעבר תנועה מוקדם מדי, כי היא מאפשרת לשמור את הזמינות הגבוהה האלסטית בין אזורים למקרים שבהם האזור הנוכחי באמת מתקרב למגבלות שלו.
נותנים למשתמש את היכולת ליצור את תפקידי ההרשאה הנדרשים:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin --user "$(gcloud config get-value account)" --context=CLUSTER1_CONTEXT kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin --user "$(gcloud config get-value account)" --context=CLUSTER2_CONTEXTהמשתנים
CLUSTER1_CONTEXTו-CLUSTER2_CONTEXTמוגדרים בקטע התקנה של משאבים מותאמים אישית נדרשים.לכל אשכול, מפעילים את המניפסט:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml --context=CLUSTER1_CONTEXT kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml --context=CLUSTER2_CONTEXTמתן הרשאה לחשבון השירות
custom-metrics-stackdriver-adapterלקרוא מדדים של Cloud Monitoring:PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding projects/PROJECT_ID \ --role roles/monitoring.viewer \ --member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.s3ns.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapterמחליפים את
PROJECT_IDבמזהה הפרויקט.שומרים את המניפסט הבא בקובץ בשם
pod-monitoring.yaml:apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: inference-server-podmon spec: selector: matchLabels: app: vllm-llama3-8b-instruct endpoints: - port: 8000 path: /metrics interval: 5sמחילים את המניפסט על שני האשכולות:
kubectl apply -f pod-monitoring.yaml --context=CLUSTER1_CONTEXT kubectl apply -f pod-monitoring.yaml --context=CLUSTER2_CONTEXTשומרים את המניפסט הבא בקובץ בשם
hpa.yaml:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: inference-server-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: vllm-llama3-8b-instruct minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: prometheus.googleapis.com|vllm:gpu_cache_usage_perc|gauge target: type: AverageValue averageValue: "0.5"מחילים את המניפסט על שני האשכולות:
kubectl apply -f hpa.yaml --context=CLUSTER1_CONTEXT kubectl apply -f hpa.yaml --context=CLUSTER2_CONTEXT
אימות הפריסה
משיגים את כתובת ה-IP של השער:
export GW_IP=$(kubectl get gateway/cross-region-gateway -n default --context=CLUSTER1_CONTEXT -o jsonpath='{.status.addresses[0].value}') echo ${GW_IP}המשתנה
CLUSTER1_CONTEXTמוגדר בקטע התקנת משאבים מותאמים אישית נדרשים.איך מתחילים סשן אינטראקטיבי ב-Pod זמני:
shkubectl run -it --rm --image=curlimages/curl curly --context=CLUSTER1_CONTEXT -- /bin/shהמשתנה
CLUSTER1_CONTEXTמוגדר בקטע התקנת משאבים מותאמים אישית נדרשים.מתוך
curlyPod, שולחים בקשת בדיקה:curl -i -X POST <var>GW_IP</var>:80/v1/completions \ -H 'Content-Type: application/json' \ -d '{ "model": "food-review-1", "prompt": "What is the best pizza in the world?", "max_tokens": 100, "temperature": 0 }'מחליפים את
GW_IPבכתובת ה-IP של השער מהשלב הקודם.
בדיקת עומס של השער
מפעילים עומס מתמשך על כתובת ה-IP של שער הרשת באמצעות מחולל עומסים באותה רשת VPC.
מתחילים עם עומס בינוני שצפוי שהאזור המועדף (
us-east4) יטפל בו.להגדיל בהדרגה את קצב הבקשות או את מספר הבקשות המקבילות בבדיקת העומס.
בזמן הפעלת בדיקת העומס, עוקבים אחרי המערכת במסוף Cloud de Confiance או באמצעות
kubectl:- Pod scaling (HPA): check the number of Pods in the
vllm-llama3-8b-instructDeployment in both clusters. - שינוי גודל הצמתים (Cluster Autoscaler): מעקב אחרי מספר הצמתים ב-
h100מאגרי הצמתים בשני האשכולות. - מדדים בהתאמה אישית: כדאי לעקוב אחרי המדד
vllm:kv_cache_usage_perc(בגרסה v0.10.2 ואילך של vllm) או אחרי המדדvllm:gpu_cache_usage_perc(בגרסה נמוכה מ-v.0.10.2 של vllm) ב-Monitoring לגבי פריסות של שרת מודלים בשני האשכולות. - מדדים של מאזן עומסים: בודקים את המדדים של מאזן העומסים שמשויך ל-
cross-region-gatewayב-Monitoring.
- Pod scaling (HPA): check the number of Pods in the
ככל שתגדילו את העומס, הניצול ב-us-east4 יגדל. כש-HPA באשכול gke-east מתרחב והניצול הממוצע מתקרב לערך maxUtilization (80%) שמוגדר ב-GCPBackendPolicy, מאזן העומסים מתחיל לנתב בקשות לאשכול gke-west ב-europe-west3.
המאמרים הבאים
- מידע נוסף על GKE Gateway API
- מידע נוסף על GKE Multi-Cluster Inference Gateway
- מידע נוסף על תעבורת נתונים נכנסת (ingress) של אשכול מרובה