Ваш перший LLM API на Kubernetes

Запуск LLM на Kubernetes відрізняється від запуску звичайного вебдодатка. Ви масштабуєтеся не лише за кількістю запитів, а й за потужністю GPU та вагами моделі.

У цьому посібнику ви розгорнете модель на вузлі з 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: Забезпечте доступ до вашої моделі

Навіть для публічних моделей використовуйте токен 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, оскільки він бере на себе основне навантаження. Він керує батчингом, токенізацією та надає API, сумісний з OpenAI.

Створіть файл розгортання (deployment file) з такими основними вимогами:

  • Запит 1 GPU: nvidia.com/gpu: 1
  • Монтування /dev/shm: Серверам моделей потрібна спільна пам'ять (shared memory), щоб уникнути збоїв.
  • Використання Secrets: Передайте ваш HF_TOKEN у контейнер.

Застосуйте вашу конфігурацію: kubectl apply -f qwen-vllm.yaml

Крок 4: Перевірте API

Не довіряйте статусу "Running". Под може перебувати у стані "Running", навіть якщо він усе ще завантажує величезні файли моделі. Стежте за логами: 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.
  • Контейнер має доступ до обладнання.
  • Сервер моделі завантажує ваги в пам'ять.
  • API відповідає на стандартні запити.

Якщо цей цикл не працює, масштабування та маршрутизація вас не врятують. Спочатку виправте фундамент.

Джерело: https://dev.to/the-persistent-engineer/your-first-llm-api-on-kubernetes-from-model-to-curl-request-4l1j

Додаткова спільнота для навчання: https://t.me/GyaanSetuAi