ה-LLM API הראשון שלך ב-Kubernetes

הרצת LLM ב-Kubernetes שונה מהרצת אפליקציית ווב סטנדרטית. אינכם מבצעים Scaling רק לפי בקשות (requests). אתם מבצעים Scaling לפי קיבולת GPU ומשקלי מודל (model weights).

במדריך זה, תפרסו מודל לצומת (node) GPU, תחשפו אותו כ-API ותקראו לו באמצעות בקשת curl.

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

  • מודל: Qwen/Qwen2.5-1.5B-Instruct
  • מנוע: vLLM
  • תשתית: Kubernetes עם תמיכה ב-NVIDIA GPU

Step 1: Check your GPU capacity לפני שמתחילים, ודאו ש-Kubernetes מזהה את החומרה שלכם. הריצו את הפקודה הבאה: kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu

אם עמודת ה-GPU ריקה, עצרו. עליכם לתקן תחילה את ה-NVIDIA device plugin שלכם.

Step 2: Secure your model access גם עבור מודלים ציבוריים, השתמשו ב-Hugging Face token. זה יקל עליכם לעבור למודלים פרטיים בהמשך.

  • צרו namespace: kubectl create namespace llm-demo
  • צרו Secret עבור ה-token שלכם: kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"

Step 3: Deploy the model server אנחנו משתמשים ב-vLLM מכיוון שהוא מבצע את העבודה הכבדה. הוא מנהל batching, tokenization ו-API תואם ל-OpenAI.

צרו קובץ deployment עם הדרישות המרכזיות הבאות:

  • בקשת 1 GPU: nvidia.com/gpu: 1
  • Mount ל-/dev/shm: שרתי מודלים זקוקים לזיכרון משותף (shared memory) כדי למנוע קריסות.
  • שימוש ב-Secrets: העבירו את ה-HF_TOKEN שלכם לקונטיינר.

החילו את הקונפיגורציה שלכם: kubectl apply -f qwen-vllm.yaml

Step 4: Verify the API אל תסמכו על סטטוס ה-"Running". Pod נחשב ל-"Running" גם בזמן שהוא עדיין מוריד קבצי מודל ענקיים. עקבו אחר הלוגים שלכם: kubectl logs -n llm-demo -f deployment/qwen-vllm

המתינו עד שתראו שהשרת מאזין (listening) בפורט 8000.

בדקו זאת באמצעות port-forwarding: kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000

הריצו את בקשת ה-curl שלכם:

curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "Qwen/Qwen2.5-1.5B-Instruct",
  "messages": [{"role": "user", "content": "Explain Kubernetes in two sentences."}],
  "max_tokens": 120
}'

The Goal: עברתם מקיבולת GPU גולמית ל-API עובד. הוכחתם ש:

  • Kubernetes מתזמן (schedules) את עומס העבודה של ה-GPU.
  • הקונטיינר יכול לגשת לחומרה.
  • שרת המודל טוען משקלים (weights) לזיכרון.
  • ה-API מגיב לבקשות סטנדרטיות.

אם הלופ הזה נכשל, scaling ו-routing לא יצילו אתכם. תקנו קודם כל את היסודות.

Source: https://dev.to/the-persistent-engineer/your-first-llm-api-on-kubernetes-from-model-to-curl-request-4l1j

Optional learning community: https://t.me/GyaanSetuAi