API LLM Pertama Anda di Kubernetes

Menjalankan LLM di Kubernetes berbeda dengan menjalankan aplikasi web standar. Anda tidak hanya melakukan scaling berdasarkan jumlah request. Anda melakukan scaling berdasarkan kapasitas GPU dan bobot model (model weights).

Dalam panduan ini, Anda akan men-deploy sebuah model ke node GPU, mengeksposnya sebagai API, dan memanggilnya dengan request curl.

Kami menggunakan alat-alat berikut:

  • Model: Qwen/Qwen2.5-1.5B-Instruct
  • Engine: vLLM
  • Infrastruktur: Kubernetes dengan dukungan NVIDIA GPU

Langkah 1: Periksa kapasitas GPU Anda Sebelum memulai, pastikan Kubernetes dapat mendeteksi hardware Anda. Jalankan perintah ini: kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu

Jika kolom GPU kosong, berhenti. Anda harus memperbaiki NVIDIA device plugin Anda terlebih dahulu.

Langkah 2: Amankan akses model Anda Bahkan untuk model publik, gunakan token Hugging Face. Ini akan memudahkan Anda untuk beralih ke model privat nantinya.

  • Buat namespace: kubectl create namespace llm-demo
  • Buat Secret untuk token Anda: kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"

Langkah 3: Deploy model server Kami menggunakan vLLM karena ia menangani tugas-tugas berat. vLLM mengelola batching, tokenization, dan API yang kompatibel dengan OpenAI.

Buat file deployment dengan persyaratan utama berikut:

  • Request 1 GPU: nvidia.com/gpu: 1
  • Mount /dev/shm: Model server membutuhkan shared memory untuk menghindari crash.
  • Gunakan Secrets: Teruskan HF_TOKEN Anda ke dalam container.

Terapkan konfigurasi Anda: kubectl apply -f qwen-vllm.yaml

Langkah 4: Verifikasi API Jangan percaya begitu saja pada status "Running". Sebuah pod bisa berstatus "Running" padahal ia masih mengunduh file model yang sangat besar. Pantau log Anda: kubectl logs -n llm-demo -f deployment/qwen-vllm

Tunggu sampai Anda melihat server mendengarkan (listening) pada port 8000.

Uji dengan port-forwarding: kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000

Jalankan request curl Anda:

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
}'

Tujuannya: Anda telah beralih dari kapasitas GPU mentah ke API yang berfungsi. Anda telah membuktikan bahwa:

  • Kubernetes menjadwalkan beban kerja (workload) GPU.
  • Container dapat mengakses hardware.
  • Model server memuat bobot (weights) ke dalam memori.
  • API merespons request standar.

Jika loop ini gagal, scaling dan routing tidak akan bisa menyelamatkan Anda. Perbaiki fondasinya terlebih dahulu.

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