ה-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 לא יצילו אתכם. תקנו קודם כל את היסודות.
Optional learning community: https://t.me/GyaanSetuAi
