Kubernetes Üzerinde İlk LLM API'niz
Kubernetes üzerinde bir LLM çalıştırmak, standart bir web uygulaması çalıştırmaktan farklıdır. Sadece isteklere göre ölçeklendirme yapmazsınız; GPU kapasitesine ve model ağırlıklarına göre ölçeklendirme yaparsınız.
Bu kılavuzda, bir modeli bir GPU düğümüne (node) dağıtacak, bir API olarak sunacak ve bir curl isteği ile çağıracaksınız.
Şu araçları kullanıyoruz:
- Model: Qwen/Qwen2.5-1.5B-Instruct
- Engine: vLLM
- Altyapı: NVIDIA GPU desteğine sahip Kubernetes
Adım 1: GPU kapasitenizi kontrol edin
Başlamadan önce, Kubernetes'in donanımınızı gördüğünden emin olun. Şu komutu çalıştırın:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
Eğer GPU sütunu boşsa durun. Önce NVIDIA device plugin'inizi düzeltmeniz gerekir.
Adım 2: Model erişiminizi güvenli hale getirin
Genel (public) modeller için bile bir Hugging Face token'ı kullanın. Bu, daha sonra özel (private) modellere geçiş yapmayı kolaylaştırır.
- Bir namespace oluşturun:
kubectl create namespace llm-demo - Token'ınız için bir Secret oluşturun:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
Adım 3: Model sunucusunu dağıtın
Ağır iş yükünü üstlendiği için vLLM kullanıyoruz. vLLM; batching, tokenization ve OpenAI uyumlu API süreçlerini yönetir.
Şu temel gereksinimlere sahip bir deployment dosyası oluşturun:
- 1 GPU talep edin:
nvidia.com/gpu: 1 /dev/shm'yi bağlayın (mount): Model sunucularının çökmeleri önlemek için paylaşılan belleğe (shared memory) ihtiyacı vardır.- Secret'ları kullanın:
HF_TOKENdeğerinizi konteynere iletin.
Yapılandırmanızı uygulayın:
kubectl apply -f qwen-vllm.yaml
Adım 4: API'yi doğrulayın
"Running" durumuna güvenmeyin. Bir pod, devasa model dosyalarını indirmeye devam ederken de "Running" durumunda görünebilir. Loglarınızı izleyin:
kubectl logs -n llm-demo -f deployment/qwen-vllm
Sunucunun 8000 portunu dinlediğini görene kadar bekleyin.
Port yönlendirme (port-forwarding) ile test edin:
kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000
Curl isteğinizi çalıştırın:
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": "Kubernetes'i iki cümleyle açıklayın."}],
"max_tokens": 120
}'
Hedef:
Ham GPU kapasitesinden çalışan bir API'ye geçiş yaptınız. Şunları kanıtlamış oldunuz:
- Kubernetes, GPU iş yükünü planlar (schedule).
- Konteyner donanıma erişebilir.
- Model sunucusu ağırlıkları belleğe yükler.
- API, standart isteklere yanıt verir.
Eğer bu döngü başarısız olursa, ölçeklendirme ve yönlendirme sizi kurtarmayacaktır. Önce temeli düzeltin.
İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi
