Ваш перший 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://t.me/GyaanSetuAi
