במדריך הזה מוסבר איך לבצע אופטימיזציה של העלויות של עומסי עבודה להפעלת מודלים גדולים של שפה (LLM) ב-GKE. במדריך הזה נעשה שימוש בשילוב של מכונות וירטואליות עם הפעלה גמישה, מכונות וירטואליות זמניות ו-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.
- אתם משלמים לפי השימוש.
רקע
בקטע הזה מוסבר על הטכניקות הזמינות שבהן אפשר להשתמש כדי להשיג משאבי מחשוב, כולל מאיצי GPU, על סמך הדרישות של עומסי העבודה של AI/ML. ב-GKE, הטכניקות האלה נקראות שיטות להשגת מאיצים.
יחידות GPU
מעבדים גרפיים (GPU) מאפשרים להאיץ עומסי עבודה ספציפיים, כמו למידת מכונה ועיבוד נתונים. GKE מציע צמתים שמצוידים במעבדי GPU עוצמתיים כאלה כדי לשפר את הביצועים של משימות למידת מכונה ועיבוד נתונים. GKE מספק מגוון אפשרויות של סוגי מכונות להגדרת צמתים, כולל סוגי מכונות עם GPU מסוג NVIDIA H100, A100 ו-L4.
מידע נוסף זמין במאמר מידע על מעבדים גרפיים (GPU) ב-GKE.
Flex-start
Flex-start, שמבוסס על Dynamic Workload Scheduler, הוא אפשרות לשימוש ב-GPU שבה GKE שומר את בקשת ה-GPU שלכם ומקצה באופן אוטומטי מכונות וירטואליות של Flex-start כשיש קיבולת זמינה. מומלץ להשתמש באפשרות flex-start לעומסי עבודה שזקוקים לקיבולת GPU לזמן מוגבל, עד שבעה ימים, ושאין להם תאריך התחלה קבוע. מידע נוסף זמין במאמר בנושא הפעלה גמישה.
מכונות וירטואליות של Spot
אפשר להשתמש ב-GPU עם מכונות וירטואליות מסוג Spot אם עומסי העבודה יכולים לעמוד בהפרעות תכופות בצמתים. שימוש במכונות וירטואליות מסוג Spot או במכונות וירטואליות עם הפעלה גמישה מפחית את המחיר של הפעלת יחידות GPU. שימוש במכונות וירטואליות מסוג Spot בשילוב עם flex-start מספק אפשרות חלופית אם הקיבולת של מכונות וירטואליות מסוג Spot לא זמינה.
מידע נוסף זמין במאמר בנושא שימוש במכונות וירטואליות מסוג 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 מסוף, מפעילים סשן של Cloud Shell על ידי לחיצה על Activate Cloud Shell בCloud de Confiance מסוף.
סשן נפתח בחלונית התחתונה של מסוף 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 כדי לתת עדיפות למכונות וירטואליות מסוג Spot, ואחר כך למכונות וירטואליות מסוג Flex-start.
פריסת עומס העבודה של ה-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) עבור Text Generation Inference (TGI), במקום הנתיב/dataשמוגדר כברירת מחדל בתמונה של TGI. המודל שהורדתם יישמר בספרייה הזו.פריסת המודל:
kubectl apply -f mixtral-deployment.yamlGKE מתזמן פוד חדש לפריסה, מה שמפעיל את קנה המידה האוטומטי של מאגר הצמתים כדי להוסיף צומת שני לפני פריסת העותק השני של המודל.
מאמתים את הסטטוס של המודל:
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