ביצוע פעולות השקה עבור GKE Inference Gateway

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

הדף הזה מיועד לאדמינים של זהויות וחשבונות ב-GKE ולמפתחים שרוצים לבצע פעולות השקה של GKE Inference Gateway.

התרחישים הבאים נתמכים:

עדכון של השקת צומת

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

  1. יצירת InferencePool חדש: פריסת InferencePool שהוגדר עם המפרטים המעודכנים של הצומת או החומרה.

  2. פיצול התנועה באמצעות HTTPRoute: מגדירים HTTPRoute כדי לחלק את התנועה בין משאבי InferencePool קיימים לבין משאבי InferencePool חדשים. משתמשים בשדה weight ב-backendRefs כדי לנהל את אחוז התנועה שמופנה לצמתים החדשים.

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

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

לדוגמה, אפשר ליצור InferencePool חדש בשם llm-new. מגדירים את המאגר הזה עם אותן הגדרות מודל כמו ב-llm InferencePool הקיים. פורסים את המאגר על קבוצה חדשה של צמתים באשכול. אפשר להשתמש באובייקט HTTPRoute כדי לפצל את התנועה בין llm המקורי לבין llm-new InferencePool החדש. הטכניקה הזו מאפשרת לעדכן את צמתי המודל באופן מצטבר.

הדיאגרמה הבאה ממחישה איך GKE Inference Gateway מבצע השקה של עדכון צומת.

תהליך ההשקה של עדכון הצומת
איור: תהליך הפריסה של עדכון צומת

כדי לבצע השקה של עדכון צומת, פועלים לפי השלבים הבאים:

  1. שומרים את קובץ המניפסט לדוגמה הבא בשם routes-to-llm.yaml:

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: routes-to-llm
    spec:
      parentRefs:
        - name: my-inference-gateway
          group: gateway.networking.k8s.io
          kind: Gateway
      rules:
      - backendRefs:
        - name: llm
          group: inference.networking.k8s.io
          kind: InferencePool
          weight: 90
        - name: llm-new
          group: inference.networking.k8s.io
          kind: InferencePool
          weight: 10
    
  2. מחילים את קובץ המניפסט לדוגמה על האשכול:

    kubectl apply -f routes-to-llm.yaml
    

הגרסה המקורית llm InferencePool מקבלת את רוב התנועה, והגרסה llm-new InferencePool מקבלת את השאר. מגדילים בהדרגה את משקל התנועה של llm-new InferencePool כדי להשלים את פריסת העדכון של הצומת.

השקת מודל בסיס

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

כדי להשיק עדכון של מודל בסיסי:

  1. Deploy new infrastructure: יצירת צמתים חדשים ו-InferencePool חדש שהוגדר עם המודל הבסיסי החדש שבחרתם.
  2. הגדרת חלוקת התעבורה: שימוש ב-HTTPRoute כדי לפצל את התעבורה בין InferencePool הקיים (שמשתמש במודל הבסיסי הישן) לבין InferencePool החדש (שמשתמש במודל הבסיסי החדש). השדה backendRefs weight קובע את אחוז התנועה שמוקצה לכל מאגר.
  3. שמירה על שלמות InferenceObjective: ההגדרה של InferenceObjective לא משתנה. הגישה הזו עוזרת להבטיח שהמערכת תחיל את אותם מתאמי LoRA באופן עקבי על שתי הגרסאות של מודל הבסיס.
  4. שמירה על יכולת הביטול: כדאי לשמור את הצמתים המקוריים ואת InferencePool במהלך ההשקה כדי לאפשר ביטול אם יהיה צורך בכך.

יוצרים InferencePool חדש בשם llm-pool-version-2. מאגר המודלים הזה פורס גרסה חדשה של המודל הבסיסי על קבוצה חדשה של צמתים. על ידי הגדרת HTTPRoute, כמו בדוגמה שבהמשך, אפשר לפצל את התנועה באופן הדרגתי בין llm-pool המקורי לבין llm-pool-version-2. כך תוכלו לשלוט בעדכונים של מודל הבסיס באשכול שלכם.

כדי לבצע השקה של עדכון של מודל בסיסי:

  1. שומרים את קובץ המניפסט לדוגמה הבא בשם routes-to-llm.yaml:

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: routes-to-llm
    spec:
      parentRefs:
        - name: my-inference-gateway
          group: gateway.networking.k8s.io
          kind: Gateway
      rules:
      - backendRefs:
        - name: llm-pool
          group: inference.networking.k8s.io
          kind: InferencePool
          weight: 90
        - name: llm-pool-version-2
          group: inference.networking.k8s.io
          kind: InferencePool
          weight: 10
    
  2. מחילים את קובץ המניפסט לדוגמה על האשכול:

    kubectl apply -f routes-to-llm.yaml
    

הגרסה המקורית llm-pool InferencePool מקבלת את רוב התנועה, והגרסה llm-pool-version-2 InferencePool מקבלת את השאר. כדי להשלים את השקת העדכון של מודל הבסיס, צריך להגדיל בהדרגה את משקל התנועה של llm-pool-version-2 InferencePool.

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