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_TOKEN değ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.

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

İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi