הצגת מודל LLM באמצעות מעבדי TPU ב-GKE עם JetStream ו-PyTorch

במדריך הזה מוסבר איך להכניס לשימוש בסביבת הייצור מודל שפה גדול (LLM) באמצעות יחידות לעיבוד טנסורים (TPU) ב-Google Kubernetes Engine ‏ (GKE) עם JetStream דרך PyTorch. במדריך הזה מורידים משקלים של מודלים ל-Cloud Storage ופורסים אותם באשכול Autopilot או Standard של GKE באמצעות קונטיינר שמריץ את JetStream.

אם אתם צריכים את יכולת ההתאמה, העמידות והיעילות בעלויות שמציעות תכונות Kubernetes כשאתם פורסים את המודל ב-JetStream, המדריך הזה הוא נקודת התחלה טובה.

המדריך הזה מיועד ללקוחות של AI גנרטיבי שמשתמשים ב-PyTorch, למשתמשים חדשים או קיימים ב-GKE, למהנדסי ML, למהנדסי MLOps (DevOps) או לאדמינים של פלטפורמות שרוצים להשתמש ביכולות של תזמור קונטיינרים ב-Kubernetes כדי להפעיל מודלים גדולים של שפה (LLM).

רקע

כשמפעילים מודל LLM באמצעות TPU ב-GKE עם JetStream, אפשר ליצור פתרון הפעלה חזק ומוכן לייצור עם כל היתרונות של Kubernetes מנוהל, כולל יעילות בעלויות, יכולת הרחבה וזמינות גבוהה יותר. בקטע הזה מתוארות הטכנולוגיות העיקריות שבהן נעשה שימוש במדריך הזה.

מידע על מעבדי TPU

יחידות TPU הן מעגלים משולבים לאפליקציות ספציפיות (ASIC) שפותחו על ידי Google כדי להאיץ למידת מכונה ומודלים של AI שנבנו באמצעות frameworks כמו TensorFlow,‏ PyTorch ו-JAX.

לפני שמשתמשים ב-TPU ב-GKE, מומלץ להשלים את תוכנית הלימודים הבאה:

  1. מידע על הזמינות של גרסאות TPU עדכניות זמין בארכיטקטורת המערכת של Cloud TPU.
  2. מידע נוסף על TPUs ב-GKE

במדריך הזה מוסבר איך להציג מודלים שונים של LLM. ‫GKE פורס את המודל בצומתי TPUv5e של מארח יחיד עם טופולוגיות TPU שהוגדרו על סמך דרישות המודל להצגת הנחיות עם זמן אחזור נמוך.

מידע על JetStream

JetStream הוא מודל קוד פתוח ש-Google פיתחה כדי להסיק מסקנות. ‫JetStream מאפשרת הסקת מסקנות עם ביצועים גבוהים, תפוקה גבוהה ואופטימיזציה של הזיכרון ב-TPU וב-GPU. ‫JetStream מספקת אופטימיזציות מתקדמות של ביצועים, כולל עיבוד רציף של קבוצות נתונים, אופטימיזציות של מטמון KV וטכניקות קוונטיזציה, כדי להקל על פריסת מודלים גדולים של שפה (LLM). ‫JetStream מאפשרת הצגה של PyTorch/XLA ו-JAX TPU כדי להשיג ביצועים אופטימליים.

קיבוץ רציף

אוסף רציף של בקשות הוא טכניקה שמקבצת באופן דינמי בקשות נכנסות להסקת מסקנות, וכך מקטינה את זמן האחזור ומגדילה את קצב העברת הנתונים.

קוונטיזציה של מטמון KV

קוונטיזציה של מטמון KV כוללת דחיסה של מטמון המפתח/ערך שמשמש במנגנוני תשומת לב, וכך מצמצמת את דרישות הזיכרון.

Int8 weight quantization

כימות משקלים ב-Int8 מפחית את הדיוק של משקלי המודל מנקודה צפה של 32 ביט למספרים שלמים של 8 ביט, וכך מוביל לחישוב מהיר יותר ולשימוש מופחת בזיכרון.

מידע נוסף על האופטימיזציות האלה זמין במאגרי הפרויקטים JetStream PyTorch ו-JetStream MaxText.

מידע על PyTorch

‫PyTorch הוא פלטפורמה בקוד פתוח ללמידת מכונה שפותחה על ידי Meta, ועכשיו היא חלק מהארגון Linux Foundation. ‫PyTorch מספק תכונות ברמה גבוהה, כמו חישוב טנסורים ורשתות נוירונים עמוקות.

מטרות

  1. מכינים אשכול GKE Autopilot או אשכול רגיל עם טופולוגיית TPU מומלצת על סמך מאפייני המודל.
  2. פריסת רכיבי JetStream ב-GKE.
  3. קבלת המודל ופרסום שלו.
  4. הצגה ואינטראקציה עם המודל שפורסם.

ארכיטקטורה

בקטע הזה מתוארת ארכיטקטורת GKE שבה נעשה שימוש במדריך הזה. הארכיטקטורה כוללת אשכול GKE Autopilot או אשכול רגיל שמקצה TPU ומארח רכיבי JetStream כדי לפרוס את המודלים ולהציג אותם.

בתרשים הבא מוצגים רכיבי הארכיטקטורה הזו:

ארכיטקטורה של אשכול GKE עם מאגרי צמתים של TPU עם מארח יחיד, שמכילים את רכיבי JetStream-PyTorch ו-JetStream HTTP.

הארכיטקטורה הזו כוללת את הרכיבים הבאים:

  • אשכול אזורי של GKE Autopilot או Standard.
  • שתי קבוצות של צומתי TPU slice עם מארח יחיד, שמארחות את הפריסה של JetStream.
  • רכיב השירות מפזר את התנועה הנכנסת לכל העותקים המשוכפלים של JetStream HTTP.
  • JetStream HTTP הוא שרת HTTP שמקבל בקשות כעטיפה לפורמט הנדרש של JetStream ושולח אותן ללקוח ה-GRPC של JetStream.
  • JetStream-PyTorch הוא שרת JetStream שמבצע הסקה עם אצווה רציפה.

לפני שמתחילים

  • נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Verify that billing is enabled for your Google Cloud project.

  • Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Verify that billing is enabled for your Google Cloud project.

  • Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • צריך לוודא שיש לכם בפרויקט את התפקיד או התפקידים הבאים: roles/container.admin, roles/iam.serviceAccountAdmin, roles/resourcemanager.projectIamAdmin

    בדיקת התפקידים

    1. נכנסים לדף IAM במסוף Google Cloud .

      כניסה לדף IAM
    2. בוחרים את הפרויקט.
    3. בעמודה Principal (חשבון המשתמש), מוצאים את כל השורות שבהן מופיע השם שלכם או של קבוצה שאתם נכללים בה. כדי לברר באילו קבוצות אתם נכללים, פנו לאדמין.

    4. בודקים את העמודה Role בכל השורות שבהן מצוין או מופיע השם שלכם, כדי לראות אם רשימת התפקידים כוללת את התפקידים הנדרשים.

    מתן התפקידים

    1. נכנסים לדף IAM במסוף Google Cloud .

      כניסה לדף IAM
    2. בוחרים את הפרויקט.
    3. לוחצים על Grant access.
    4. בשדה New principals, מזינים את מזהה המשתמש. ‫ בדרך כלל מזהה המשתמש הוא כתובת האימייל של חשבון Google.

    5. לוחצים על Select a role ומחפשים את התפקיד.
    6. כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
    7. לוחצים על Save.

גישה למודל

קבלת גישה למודלים שונים ב-Hugging Face לפריסה ב-GKE

Gemma 7B-it

כדי לקבל גישה למודל Gemma לצורך פריסה ב-GKE, צריך קודם לחתום על הסכם הרישיון.

  1. גישה אל דף ההסכמה של מודל Gemma ב-Hugging Face
  2. אם עדיין לא עשיתם זאת, מתחברים ל-Hugging Face.
  3. קוראים ומאשרים את התנאים וההגבלות של המודל.

Llama 3 8B

כדי לקבל גישה למודל Llama 3 לצורך פריסה ב-GKE, קודם צריך לחתום על הסכם הרישיון.

  1. נכנסים אל דף ההסכמה של מודל Llama 3 ב-Hugging Face
  2. אם עדיין לא עשיתם זאת, מתחברים ל-Hugging Face.
  3. קוראים ומאשרים את התנאים וההגבלות של המודל.

הכנת הסביבה

במדריך הזה משתמשים ב-Cloud Shell כדי לנהל משאבים שמתארחים ב-Google Cloud. ב-Cloud Shell מותקן מראש התוכנה שצריך למדריך הזה, כולל kubectl ו- gcloud CLI.

כדי להגדיר את הסביבה באמצעות Cloud Shell:

  1. ב Google Cloud מסוף, מפעילים סשן של Cloud Shell על ידי לחיצה על Activate Cloud Shell בGoogle Cloud מסוף.סמל ההפעלה של Cloud Shell תופעל סשן בחלונית התחתונה של Google Cloud המסוף.

  2. מגדירים את משתני הסביבה שמוגדרים כברירת מחדל:

    gcloud config set project PROJECT_ID
    gcloud config set billing/quota_project PROJECT_ID
    export PROJECT_ID=$(gcloud config get project)
    export CLUSTER_NAME=CLUSTER_NAME
    export CONTROL_PLANE_LOCATION=CONTROL_PLANE_LOCATION
    export NODE_LOCATION=NODE_LOCATION
    export CLUSTER_VERSION=CLUSTER_VERSION
    export BUCKET_NAME=BUCKET_NAME
    

    מחליפים את הערכים הבאים:

    • PROJECT_ID: Google Cloud מזהה הפרויקט.
    • CLUSTER_NAME: השם של אשכול GKE.
    • CONTROL_PLANE_LOCATION: האזור של Compute Engine במישור הבקרה של האשכול. באזור צריך להיות אזורים שבהם זמינים סוגי מכונות TPU v5e (לדוגמה, us-west1,‏ us-west4,‏ us-central1,‏ us-east1,‏ us-east5 או europe-west4). באשכולות Autopilot, צריך לוודא שיש לכם מספיק משאבי TPU v5e אזוריים באזור שבחרתם.
    • (אשכול רגיל בלבד) NODE_LOCATION: האזור שבו משאבי ה-TPU זמינים (לדוגמה, us-west4-a). באשכולות Autopilot אין צורך לציין את הערך הזה.
    • CLUSTER_VERSION: גרסת GKE, שצריכה לתמוך בסוג המכונה שרוצים להשתמש בו. שימו לב: יכול להיות שהגרסה של GKE שמוגדרת כברירת מחדל לא תהיה זמינה ל-TPU שלכם. רשימה של גרסאות GKE מינימליות שזמינות לפי סוג מכונת TPU מופיעה במאמר זמינות של TPU ב-GKE.
    • BUCKET_NAME: השם של קטגוריית Cloud Storage שמשמשת לאחסון מטמון של קומפילציית JAX.

יצירה והגדרה של Google Cloud משאבים

כדי ליצור את המשאבים הנדרשים, פועלים לפי ההוראות הבאות.

יצירת אשכול GKE

אפשר להפעיל את Gemma ב-TPU באשכול GKE Autopilot או באשכול רגיל. מומלץ להשתמש באשכול Autopilot כדי ליהנות מחוויית Kubernetes מנוהלת באופן מלא. כדי לבחור את מצב הפעולה של GKE שהכי מתאים לעומסי העבודה שלכם, אפשר לעיין במאמר בחירת מצב פעולה של GKE.

טייס אוטומטי

יוצרים אשכול GKE במצב Autopilot:

gcloud container clusters create-auto CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=CONTROL_PLANE_LOCATION \
    --cluster-version=CLUSTER_VERSION

מחליפים את CLUSTER_VERSION בגרסת האשכול המתאימה. באשכול GKE Autopilot, צריך להשתמש בגרסה רגילה של ערוץ הפצה.

רגילה

  1. יוצרים אשכול GKE Standard אזורי שמשתמש באיחוד זהויות של עומסי עבודה ל-GKE:

    gcloud container clusters create CLUSTER_NAME \
        --enable-ip-alias \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --cluster-version=CLUSTER_VERSION \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --location=CONTROL_PLANE_LOCATION
    

    יצירת האשכול עשויה להימשך כמה דקות.

    מחליפים את CLUSTER_VERSION בגרסת האשכול המתאימה.

  2. יוצרים מאגר צמתים של TPU v5e עם טופולוגיה של 2x4 ושני צמתים:

    gcloud container node-pools create tpu-nodepool \
      --cluster=CLUSTER_NAME \
      --machine-type=ct5lp-hightpu-8t \
      --project=PROJECT_ID \
      --num-nodes=2 \
      --location=CONTROL_PLANE_LOCATION \
      --node-locations=NODE_LOCATION
    

יצירת טוקן של Hugging Face CLI ב-Cloud Shell

יוצרים טוקן חדש של Hugging Face אם עדיין אין לכם טוקן:

  1. לוחצים על הפרופיל שלך > הגדרות > טוקנים של גישה.
  2. לוחצים על New Token (טוקן חדש).
  3. מציינים שם לבחירתכם ותפקיד ברמה של Read לפחות.
  4. לוחצים על יצירת אסימון.
  5. עורכים את ההרשאות של אסימון הגישה כדי לקבל גישת קריאה למאגר Hugging Face של המודל.
  6. מעתיקים את הטוקן שנוצר ללוח.

יצירת סוד של Kubernetes לפרטי הכניסה של Hugging Face

ב-Cloud Shell, מבצעים את הפעולות הבאות:

  1. מגדירים את kubectl לתקשורת עם האשכול:

    gcloud container clusters get-credentials CLUSTER_NAME --location=CONTROL_PLANE_LOCATION
    
  2. יוצרים סוד כדי לאחסן את פרטי הכניסה של Hugging Face:

    kubectl create secret generic huggingface-secret \
        --from-literal=HUGGINGFACE_TOKEN=HUGGINGFACE_TOKEN
    

    מחליפים את HUGGINGFACE_TOKEN באסימון של Hugging Face.

הגדרת גישה לעומסי עבודה באמצעות איחוד שירותי אימות הזהות של עומסי עבודה ב-GKE

מקצים Kubernetes ServiceAccount לאפליקציה ומגדירים את Kubernetes ServiceAccount כך שיפעל כחשבון שירות של IAM.

  1. יוצרים חשבון שירות ב-IAM לאפליקציה:

    gcloud iam service-accounts create wi-jetstream
    
  2. מוסיפים קישור למדיניות IAM לחשבון השירות ב-IAM כדי לנהל את Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:wi-jetstream@PROJECT_ID.iam.gserviceaccount.com" \
        --role roles/storage.objectUser
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:wi-jetstream@PROJECT_ID.iam.gserviceaccount.com" \
        --role roles/storage.insightsCollectorService
    
  3. כדי לאפשר ל-ServiceAccount של Kubernetes להתחזות לחשבון השירות של IAM, מוסיפים קשר בין כללי מדיניות של IAM בין שני חשבונות השירות. הקישור הזה מאפשר לחשבון השירות של Kubernetes לפעול בתור חשבון שירות של IAM:

    gcloud iam service-accounts add-iam-policy-binding wi-jetstream@PROJECT_ID.iam.gserviceaccount.com \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[default/default]"
    
  4. מוסיפים הערה לחשבון השירות ב-Kubernetes עם כתובת האימייל של חשבון השירות ב-IAM:

    kubectl annotate serviceaccount default \
        iam.gke.io/gcp-service-account=wi-jetstream@PROJECT_ID.iam.gserviceaccount.com
    

פריסת JetStream

פורסים את מאגר JetStream כדי להפעיל את המודל. במדריך הזה נעשה שימוש במניפסטים של פריסת Kubernetes. פריסה היא אובייקט Kubernetes API שמאפשר להפעיל כמה רפליקות של Pods שמפוזרות בין הצמתים באשכול.

שומרים את קובץ המניפסט הבא בשם jetstream-pytorch-deployment.yaml:

Gemma 7B-it

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jetstream-pytorch-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: jetstream-pytorch-server
  template:
    metadata:
      labels:
        app: jetstream-pytorch-server
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-topology: 2x4
        cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
      containers:
      - name: jetstream-pytorch-server
        image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-pytorch-server:v0.2.4
        args:
        - --model_id=google/gemma-7b-it
        - --override_batch_size=30
        - --enable_model_warmup=True
        volumeMounts:
        - name: huggingface-credentials
          mountPath: /huggingface
          readOnly: true
        ports:
        - containerPort: 9000
        resources:
          requests:
            google.com/tpu: 8
          limits:
            google.com/tpu: 8
        startupProbe:
          httpGet:
            path: /healthcheck
            port: 8000
            scheme: HTTP
          periodSeconds: 60
          initialDelaySeconds: 90
          failureThreshold: 50
        livenessProbe:
          httpGet:
            path: /healthcheck
            port: 8000
            scheme: HTTP
          periodSeconds: 60
          failureThreshold: 30
        readinessProbe:
          httpGet:
            path: /healthcheck
            port: 8000
            scheme: HTTP
          periodSeconds: 60
          failureThreshold: 30
      - name: jetstream-http
        image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-http:v0.2.3
        ports:
        - containerPort: 8000
      volumes:
      - name: huggingface-credentials
        secret:
          defaultMode: 0400
          secretName: huggingface-secret
---
apiVersion: v1
kind: Service
metadata:
  name: jetstream-svc
spec:
  selector:
    app: jetstream-pytorch-server
  ports:
  - protocol: TCP
    name: jetstream-http
    port: 8000
    targetPort: 8000

Llama 3 8B

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jetstream-pytorch-server
spec:
  replicas: 2
  selector:
    matchLabels:
      app: jetstream-pytorch-server
  template:
    metadata:
      labels:
        app: jetstream-pytorch-server
    spec:
      nodeSelector:
        cloud.google.com/gke-tpu-topology: 2x4
        cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
      containers:
      - name: jetstream-pytorch-server
        image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-pytorch-server:v0.2.4
        args:
        - --model_id=meta-llama/Meta-Llama-3-8B
        - --override_batch_size=30
        - --enable_model_warmup=True
        volumeMounts:
        - name: huggingface-credentials
          mountPath: /huggingface
          readOnly: true
        ports:
        - containerPort: 9000
        resources:
          requests:
            google.com/tpu: 8
          limits:
            google.com/tpu: 8
        startupProbe:
          httpGet:
            path: /healthcheck
            port: 8000
            scheme: HTTP
          periodSeconds: 60
          initialDelaySeconds: 90
          failureThreshold: 50
        livenessProbe:
          httpGet:
            path: /healthcheck
            port: 8000
            scheme: HTTP
          periodSeconds: 60
          failureThreshold: 30
        readinessProbe:
          httpGet:
            path: /healthcheck
            port: 8000
            scheme: HTTP
          periodSeconds: 60
          failureThreshold: 30
      - name: jetstream-http
        image: us-docker.pkg.dev/cloud-tpu-images/inference/jetstream-http:v0.2.3
        ports:
        - containerPort: 8000
      volumes:
      - name: huggingface-credentials
        secret:
          defaultMode: 0400
          secretName: huggingface-secret
---
apiVersion: v1
kind: Service
metadata:
  name: jetstream-svc
spec:
  selector:
    app: jetstream-pytorch-server
  ports:
  - protocol: TCP
    name: jetstream-http
    port: 8000
    targetPort: 8000

בקובץ המניפסט מוגדרים מאפייני המפתח הבאים:

  • model_id: שם המודל מ-Hugging Face‏ (google/gemma-7b-it, ‏ meta-llama/Meta-Llama-3-8B) (ראו מודלים נתמכים).
  • override_batch_size: גודל אצווה הפענוח לכל מכשיר, כאשר שבב TPU אחד שווה למכשיר אחד. ערך ברירת המחדל הוא 30.
  • enable_model_warmup: ההגדרה הזו מאפשרת אתחול של המודל אחרי שהשרת של המודל הופעל. ערך ברירת המחדל הוא False.

אפשר להגדיר את המאפיינים האלה:

  • max_input_length: אורך רצף הקלט המקסימלי. ערך ברירת המחדל הוא 1024.
  • max_output_length: אורך הפלט המקסימלי של הפענוח. ערך ברירת המחדל הוא 1024.
  • quantize_weights: האם נקודת הביקורת עברה קוונטיזציה. ערך ברירת המחדל הוא 0. כדי להפעיל את הכימות int8, צריך להגדיר את הערך ל-1.
  • internal_jax_compilation_cache: הספרייה של מטמון הקומפילציה של JAX. ערך ברירת המחדל הוא ~/jax_cache. כדי להשתמש בשמירה במטמון מרחוק, צריך להגדיר את הערך ל-gs://BUCKET_NAME/jax_cache.

בקובץ המניפסט, מוגדר בקשה לבדיקת תקינות אתחול כדי לוודא ששרת המודל מסומן בתווית Ready אחרי שהמודל נטען והחימום הסתיים. בדיקות פעילות ומוכנות מוגדרות כדי לוודא שהשרת של המודל תקין.

  1. החלת המניפסט:

    kubectl apply -f jetstream-pytorch-deployment.yaml
    
  2. אימות הפריסה:

    kubectl get deployment
    

    הפלט אמור להיראות כך:

    NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
    jetstream-pytorch-server          0/2     2            0           ##s
    

    במקרים של אשכולות Autopilot, יכול להיות שיחלפו כמה דקות עד שהמשאבים הנדרשים של TPU יוקצו.

  3. בודקים את יומני השרת של JetStream-PyTorch כדי לוודא שמשקלי המודל נטענו ושהחימום המקדים של המודל הושלם. יכול להיות שיחלפו כמה דקות עד שהשרת ישלים את הפעולה.

    kubectl logs deploy/jetstream-pytorch-server -f -c jetstream-pytorch-server
    

    הפלט אמור להיראות כך:

    Started jetstream_server....
    2024-04-12 04:33:37,128 - root - INFO - ---------Generate params 0 loaded.---------
    
  4. מוודאים שהפריסה מוכנה:

    kubectl get deployment
    

    הפלט אמור להיראות כך:

    NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
    jetstream-pytorch-server          2/2     2            2           ##s
    

    יכול להיות שיחלפו כמה דקות עד שנקודת הקצה healthcheck תירשם.

פרסום המודל

בקטע הזה אתם מנהלים אינטראקציה עם המודל.

הגדרת העברה ליציאה אחרת

אפשר לגשת לפריסת JetStream דרך שירות ClusterIP שיצרתם בשלב הקודם. אפשר להגיע לשירותי ClusterIP רק מתוך האשכול. לכן, כדי לגשת לשירות מחוץ לאשכול, צריך לבצע את השלבים הבאים:

כדי ליצור הפניית יציאה, מריצים את הפקודה הבאה:

kubectl port-forward svc/jetstream-svc 8000:8000

אינטראקציה עם המודל באמצעות curl

  1. כדי לוודא שיש לכם גישה לשרת ה-HTTP של JetStream, פותחים טרמינל חדש ומריצים את הפקודה הבאה:

    curl --request POST \
    --header "Content-type: application/json" \
    -s \
    localhost:8000/generate \
    --data \
    '{
        "prompt": "What are the top 5 programming languages",
        "max_tokens": 200
    }'
    

    יכול להיות שיחלפו כמה שניות עד שהבקשה הראשונית תושלם, כי המודל צריך להתחמם. הפלט אמור להיראות כך:

    {
        "response": " for data science in 2023?\n\n**1. Python:**\n- Widely used for data science due to its readability, extensive libraries (pandas, scikit-learn), and integration with other tools.\n- High demand for Python programmers in data science roles.\n\n**2. R:**\n- Popular choice for data analysis and visualization, particularly in academia and research.\n- Extensive libraries for statistical modeling and data wrangling.\n\n**3. Java:**\n- Enterprise-grade platform for data science, with strong performance and scalability.\n- Widely used in data mining and big data analytics.\n\n**4. SQL:**\n- Essential for data querying and manipulation, especially in relational databases.\n- Used for data analysis and visualization in various industries.\n\n**5. Scala:**\n- Scalable and efficient for big data processing and machine learning models.\n- Popular in data science for its parallelism and integration with Spark and Spark MLlib."
    }
    
    

הפעולות הבאות בוצעו בהצלחה:

  1. פריסת שרת מודלים של JetStream-PyTorch ב-GKE באמצעות מעבדי TPU.
  2. הוצג למשתמש והייתה לו אינטראקציה עם המודל.

מעקב אחר ביצועי המודל

כדי לעקוב אחרי ביצועי המודל, אפשר להשתמש בשילוב של לוח הבקרה של JetStream ב-Cloud Monitoring. לוח הבקרה הזה מאפשר לכם לראות מדדי ביצועים קריטיים כמו קצב העברת נתונים של טוקנים, זמן האחזור של הבקשות ושיעורי השגיאות.

כדי להשתמש בלוח הבקרה של JetStream, צריך להפעיל את השירות המנוהל של Google Cloud ל-Prometheus באשכול GKE. השירות הזה אוסף את מדדי JetStream.

לאחר מכן תוכלו לראות את המדדים באמצעות לוח הבקרה של JetStream. מידע על שימוש בשירות מנוהל של Google Cloud ל-Prometheus כדי לאסוף מדדים מהמודל זמין במאמר JetStream בנושא יכולת צפייה במסמכי Cloud Monitoring.

פתרון בעיות

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת המשאבים שנפרסו

כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שיצרתם במדריך הזה, מריצים את הפקודות הבאות ופועלים לפי ההנחיות:

gcloud container clusters delete CLUSTER_NAME --location=CONTROL_PLANE_LOCATION

gcloud iam service-accounts delete wi-jetstream@PROJECT_ID.iam.gserviceaccount.com

המאמרים הבאים