أول واجهة برمجة تطبيقات (API) لنماذج اللغة الكبيرة (LLM) الخاصة بك على Kubernetes
تشغيل نموذج لغة كبير (LLM) على Kubernetes يختلف عن تشغيل تطبيق ويب قياسي. فأنت لا تقوم بالتوسع بناءً على عدد الطلبات فحسب، بل بناءً على سعة وحدة معالجة الرسومات (GPU) وأوزان النموذج (model weights).
في هذا الدليل، ستعمل على نشر نموذج على عقدة GPU، وتوفيره كواجهة برمجة تطبيقات (API)، واستدعائه باستخدام طلب curl.
نستخدم هذه الأدوات:
- النموذج: Qwen/Qwen2.5-1.5B-Instruct
- المحرك: vLLM
- البنية التحتية: Kubernetes مع دعم NVIDIA GPU
الخطوة 1: تحقق من سعة الـ GPU الخاصة بك
قبل البدء، تأكد من أن Kubernetes يرى الأجهزة الخاصة بك. قم بتشغيل هذا الأمر:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
إذا كان عمود GPU فارغاً، توقف. يجب عليك إصلاح NVIDIA device plugin أولاً.
الخطوة 2: قم بتأمين الوصول إلى نموذجك
حتى بالنسبة للنماذج العامة، استخدم رمز (token) من Hugging Face. هذا يسهل عملية الانتقال إلى النماذج الخاصة لاحقاً.
- إنشاء مساحة اسم (namespace):
kubectl create namespace llm-demo - إنشاء Secret لرمزك:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
الخطوة 3: نشر خادم النموذج
نستخدم vLLM لأنه يتولى المهام الشاقة؛ فهو يدير عمليات الدفعات (batching)، والترميز (tokenization)، وواجهة برمجة التطبيقات المتوافقة مع OpenAI.
أنشئ ملف نشر (deployment file) بالمتطلبات الأساسية التالية:
- طلب 1 GPU:
nvidia.com/gpu: 1 - ربط (Mount) مسار
/dev/shm: تحتاج خوادم النماذج إلى ذاكرة مشتركة لتجنب الانهيارات. - استخدام الـ Secrets: قم بتمرير HF_TOKEN الخاص بك إلى الحاوية (container).
تطبيق الإعدادات الخاصة بك:
kubectl apply -f qwen-vllm.yaml
الخطوة 4: التحقق من واجهة برمجة التطبيقات (API)
لا تثق في حالة "Running". قد تكون الـ pod في حالة "Running" بينما لا تزال تقوم بتنزيل ملفات النموذج الضخمة. راقب السجلات (logs) الخاصة بك:
kubectl logs -n llm-demo -f deployment/qwen-vllm
انتظر حتى ترى الخادم يستمع على المنفذ 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
}'
الهدف:
لقد انتقلت من مجرد سعة GPU خام إلى واجهة برمجة تطبيقات (API) تعمل بالفعل. لقد أثبتَّ أن:
- Kubernetes يقوم بجدولة عبء عمل الـ GPU.
- الحاوية (container) يمكنها الوصول إلى الأجهزة.
- خادم النموذج يقوم بتحميل الأوزان في الذاكرة.
- واجهة برمجة التطبيقات تستجيب للطلبات القياسية.
إذا فشلت هذه الحلقة، فلن ينقذك التوسع (scaling) أو التوجيه (routing). أصلح الأساس أولاً.
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi
