במדריך הזה מוסבר איך לבצע אופטימיזציה של העלויות של עומסי עבודה להפעלת מודלים גדולים של שפה (LLM) ב-GKE. במדריך הזה נעשה שימוש בשילוב של Flex-start VM, VM במודל Spot ו-ComputeClasses כדי להסיק מסקנות בצורה חסכונית.
במדריך הזה נעשה שימוש ב-Mixtral 8x7b כדוגמה למודל LLM שאפשר לפרוס.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), למנהלי פלטפורמות ולמפעילים, ולמומחי נתונים ו-AI שרוצים להשתמש ביכולות של תזמור קונטיינרים של Kubernetes כדי להציג מודלים גדולים של שפה (LLM). מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Cloud de Confiance by S3NS זמין במאמר תפקידים ומשימות נפוצים של משתמשי GKE.
תמחור Flex-start
מומלץ להשתמש ב-Flex-start אם נפח העבודה שלכם דורש הקצאה דינמית של משאבים לפי הצורך, למשך עד שבעה ימים עם הזמנות לטווח קצר, בלי ניהול מורכב של מכסות ובגישה חסכונית. התכונה 'התחלה גמישה' מבוססת על Dynamic Workload Scheduler והחיוב מתבצע לפי התמחור של Dynamic Workload Scheduler:
- אפשר לקבל הנחה (עד 53%) על vCPU, GPU, TPU וכל דיסק SSD מקומי שמחובר.
- תשלום לפי שימוש (PAYG).
רקע
בקטע הזה מפורטות התכונות הזמינות שבהן אפשר להשתמש כדי לקבל משאבי מחשוב, כולל מעבדי GPU או TPU, על סמך הדרישות של עומסי העבודה של AI/ML. התכונות האלה עוזרות לכם ליישם אסטרטגיות למיקסום הגמישות, היעילות והזמינות של קיבולת המחשוב.
GPUs
מעבדים גרפיים (GPU) מאפשרים להאיץ עומסי עבודה ספציפיים, כמו למידת מכונה ועיבוד נתונים. GKE מציע צמתים שמצוידים במעבדי GPU עוצמתיים כאלה כדי לשפר את הביצועים של משינות למידה ומשימות עיבוד נתונים. GKE מספק מגוון אפשרויות של סוגי מכונות להגדרת צמתים, כולל סוגי מכונות עם GPU מסוג NVIDIA H100, A100 ו-L4.
מידע נוסף זמין במאמר מידע על מעבדים גרפיים (GPU) ב-GKE.
Flex-start
התחלה גמישה, שמבוססת על Dynamic Workload Scheduler, היא אפשרות לשימוש ב-GPU שבה GKE שומר את בקשת ה-GPU שלכם ומקצה באופן אוטומטי Flex-start VM כשהקיבולת הופכת לזמינה. מומלץ להשתמש ב-flex-start לעומסי עבודה שזקוקים לקיבולת GPU לזמן מוגבל, עד שבעה ימים, ושאין להם תאריך התחלה קבוע. מידע נוסף זמין במאמר בנושא הפעלה גמישה.
VMs במודל Spot
אפשר להשתמש ב-GPU עם VM במודל Spot אם עומסי העבודה יכולים לעמוד בהפרעות תכופות בצמתים. שימוש ב-VM במודל Spot או ב-flex-start מפחית את העלות של הפעלת יחידות GPU. שימוש ב-VM במודל Spot בשילוב עם התחלה גמישה מספק אפשרות חלופית כשהקיבולת של ה-VM במודל Spot לא זמינה.
מידע נוסף זמין במאמר שימוש ב-VM במודל Spot עם מאגרי צמתים של GPU.
ComputeClasses
אפשר לבקש יחידות GPU באמצעות ComputeClasses. התכונה ComputeClasses מאפשרת להגדיר היררכיה של הגדרות צמתים ב-GKE, כדי לתת עדיפות להחלטות לגבי שינוי גודל הצמתים במהלך הפעלת עומסי עבודה על החומרה שבחרתם. מידע נוסף זמין במאמר בנושא מידע על ComputeClasses בהתאמה אישית.
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- מוודאים שיש לכם אשכול GKE Autopilot או Standard שפועלת בו גרסה 1.32.2-gke.1652000 ואילך. בקטע הפעלה של הקצאת משאבים אוטומטית של צמתים והגדרת מגבלות GPU מוסבר איך לעשות את זה.
- יוצרים חשבון ב-Hugging Face, אם עדיין אין לכם חשבון.
- מוודאים שיש בפרויקט מכסה מספקת של יחידות GPU מסוג NVIDIA L4 שניתנות להפסקת פעולה. מידע נוסף מופיע במאמר בנושא מכסות של מכונות שאפשר להפסיק.
גישה למודל
אם עדיין אין לכם, יוצרים טוקן חדש של Hugging Face:
- לוחצים על הפרופיל שלך > הגדרות > טוקנים של גישה.
- לוחצים על New Token (אסימון חדש).
- מציינים שם לבחירתכם ותפקיד של לפחות
Read. - לוחצים על יצירת אסימון.
יצירת ComputeClass
בקטע הזה, יוצרים ComputeClass בהתאמה אישית. ComputeClasses מגדירים את הסוגים והקשרים בין כמה משאבי מחשוב שמשמשים את עומס העבודה.
- במסוף Cloud de Confiance , לוחצים על Activate Cloud Shell בCloud de Confiance מסוף כדי להפעיל סשן של Cloud Shell.
סשן ייפתח בחלונית התחתונה של המסוף Cloud de Confiance .
יוצרים קובץ מניפסט
dws-flex-start.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: dws-model-inference-class spec: priorities: - machineType: g2-standard-24 spot: true - machineType: g2-standard-24 flexStart: enabled: true nodeRecycling: leadTimeSeconds: 3600 nodePoolAutoCreation: enabled: trueהחלת מניפסט
dws-flex-start.yaml:kubectl apply -f dws-flex-start.yaml
GKE פורס מכונות g2-standard-24 עם מאיצי L4.
GKE משתמש ב-ComputeClasses כדי לתת עדיפות ל-VM במודל Spot, ואחר כך ל-Flex-start VM.
פריסת עומס העבודה של ה-LLM
יוצרים סוד של Kubernetes שמכיל את הטוקן של Hugging Face באמצעות הפקודה הבאה:
kubectl create secret generic model-inference-secret \ --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \ --dry-run=client -o yaml | kubectl apply -f -מחליפים את
HUGGING_FACE_TOKENבאסימון הגישה שלכם ל-Hugging Face.יוצרים קובץ בשם
mixtral-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: inference-mixtral-ccc spec: replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class containers: - name: llm image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu124.2-3.ubuntu2204.py311 resources: requests: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" limits: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" env: - name: MODEL_ID value: mistralai/Mixtral-8x7B-Instruct-v0.1 - name: NUM_SHARD value: "2" - name: PORT value: "8080" - name: QUANTIZE value: bitsandbytes-nf4 - name: HUGGING_FACE_HUB_TOKEN valueFrom: secretKeyRef: name: model-inference-secret key: HUGGING_FACE_TOKEN volumeMounts: - mountPath: /dev/shm name: dshm - mountPath: /tmp name: ephemeral-volume volumes: - name: dshm emptyDir: medium: Memory - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "premium-rwo" resources: requests: storage: 100Giבמניפסט הזה, השדה
mountPathמוגדר ל-/tmp, כי זה הנתיב שמשתנה הסביבהHF_HOMEב-Deep Learning Container (DLC) להסקת מסקנות לגבי יצירת טקסט (TGI) מוגדר אליו, במקום הנתיב/dataשמוגדר כברירת מחדל בתוך קובץ האימג' של TGI. המודל שהורדתם יישמר בספרייה הזו.פורסים את המודל:
kubectl apply -f mixtral-deployment.yamlמערכת GKE מתזמנת פריסה של Pod חדש, מה שמפעיל את המידרוג האוטומטי של מאגר הצמתים כדי להוסיף צומת שני לפני פריסת הרפליקה השנייה של המודל.
מאמתים את הסטטוס של המודל:
watch kubectl get deploy inference-mixtral-cccאם פריסת המודל הושלמה בהצלחה, הפלט ייראה כך:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10mכדי לצאת מהשעון, לוחצים על
CTRL + C.מחכים שהקונטיינר יוריד את המודל ויתחיל להפעיל אותו:
watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"כדי לצאת מהשעון, לוחצים על
CTRL + C.מציגים את מאגרי הצמתים ש-GKE הקצה:
kubectl get nodes -L cloud.google.com/gke-nodepoolהפלט אמור להיראות כך:
NAME STATUS ROLES AGE VERSION GKE-NODEPOOL gke-flex-na-nap-g2-standard--0723b782-fg7v Ready <none> 10m v1.32.3-gke.1152000 nap-g2-standard-24-spot-gpu2-1gbdlbxz gke-flex-nap-zo-default-pool-09f6fe53-fzm8 Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-lv2v Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-pq6m Ready <none> 32m v1.32.3-gke.1152000 default-poolהשם של מאגר הצמתים שנוצר מציין את סוג המכונה. במקרה הזה, GKE הקצה מכונות וירטואליות במודל Spot.
חושפים את המודל:
kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
אינטראקציה עם המודל באמצעות curl
בקטע הזה מוסבר איך לבצע בדיקת הסקה בסיסית כדי לוודא שהמודל שנפרס פועל.
מגדירים העברה ליציאה אחרת למודל:
kubectl port-forward service/llm-service 8080:8080הפלט אמור להיראות כך:
Forwarding from 127.0.0.1:8080 -> 8080בסשן חדש בטרמינל, משוחחים עם המודל באמצעות
curl:curl http://localhost:8080/v1/completions \ -X POST \ -H "Content-Type: application/json" \ -d '{ "model": "mixtral-8x7b-instruct-gptq", "prompt": "<s>[INST]Who was the first president of the United States?[/INST]", "max_tokens": 40}'הפלט אמור להיראות כך:
George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
הסרת המשאבים
כדי להימנע מצבירת חיובים בחשבון Cloud de Confiance by S3NS על המשאבים שבהם השתמשתם בדף הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים הנפרדים.
מחיקת הפרויקט
- במסוף Cloud de Confiance , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת המשאב הספציפי
מוחקים את משאבי Kubernetes שנוצרו בעזרת המדריך הזה:
kubectl delete deployment inference-mixtral-ccc kubectl delete service llm-service kubectl delete computeclass dws-model-inference-class kubectl delete secret model-inference-secretמחיקת האשכול:
gcloud container clusters delete CLUSTER_NAME