Деплой LLM на Kubernetes с GPU: опыт и конфиги
Мы интегрируем Kubernetes с GPU-нодами для десятков проектов — это снижает time-to-production в 2-3 раза по сравнению с bare metal. Проблема ручного управления LLM: простой GPU при сбоях, сложное масштабирование, хаос обновлений. Наш подход даёт автоскейлинг, rolling updates, health checks и изоляцию ресурсов.
Недавно мы деплоили LLaMA-3-8B для чат-бота с требованиями latency p99 < 200 мс. Использовали vLLM с PagedAttention на двух A100. После оптимизации достигли 45 req/s и 120 мс p99. Подробности ниже.
Почему Kubernetes с GPU критичен для LLM?
LLM потребляют до 320 ГБ памяти на модель. Отказ одного пода не должен ломать сервис. Kubernetes обеспечивает resource isolation и автоматическое восстановление. По нашему опыту, кластер с GPU-нодами окупается за 2-3 месяца за счёт сокращения простоев. NVIDIA GPU Operator автоматизирует драйверы, а Device Plugin управляет виртуализацией.
Подготовка кластера: NVIDIA Device Plugin и GPU Operator
NVIDIA Device Plugin — обязательный компонент. Установка через Helm:
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin helm repo update helm upgrade -i nvdp nvdp/nvidia-device-plugin \ --namespace nvidia-device-plugin --create-namespace \ --set gfd.enabled=true \ --set devicePlugin.config.sharing.timeSlicing.resources[0].name=nvidia.com/gpu \ --set devicePlugin.config.sharing.timeSlicing.resources[0].replicas=4 Time-slicing даёт до 4 виртуальных GPU на один физический — это экономит до 40% затрат при малой нагрузке. Для production используйте выделенные GPU с MIG (Multi-Instance GPU) — изоляция выше, latency стабильнее.
Когда time-slicing оправдан?
Для малых моделей (до 7B) с толерантностью к latency +20%. Не подходит для моделей с высокими требованиями к пропускной способности. В таких случаях используйте MIG или выделенные GPU.Как vLLM сравнивается с конкурентами?
vLLM в 2 раза быстрее LMDeploy на A100 с LLaMA-3-8B при том же hardware. Причина — PagedAttention и оптимизация KV-cache. Согласно документации vLLM, PagedAttention улучшает эффективность памяти в 2–4 раза. Сравним ключевые метрики:
| Параметр | vLLM | LMDeploy | TGI |
|---|---|---|---|
| Throughput (req/s) | 45 | 22 | 28 |
| Latency p99 (ms) | 120 | 210 | 180 |
| Поддержка streaming | да | да | да |
| Кастомные модели | Hugging Face | Hugging Face | Hugging Face |
Пример деплоя LLaMA-3-8B с streaming и мониторингом:
apiVersion: apps/v1 kind: Deployment metadata: name: vllm-llama3-8b namespace: ai-serving spec: replicas: 2 selector: matchLabels: app: vllm-llama3-8b template: metadata: labels: app: vllm-llama3-8b annotations: prometheus.io/scrape: "true" prometheus.io/port: "8080" spec: nodeSelector: nvidia.com/gpu.product: "A100-SXM4-80GB" tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - name: vllm image: vllm/vllm-openai:v0.5.0 command: - python3 - -m - vllm.entrypoints.openai.api_server args: - --model=/models/llama-3-8b-instruct - --tensor-parallel-size=1 - --max-model-len=8192 - --max-num-seqs=256 - --gpu-memory-utilization=0.90 - --port=8000 ports: - containerPort: 8000 name: http resources: limits: nvidia.com/gpu: "1" memory: "32Gi" cpu: "8" requests: nvidia.com/gpu: "1" memory: "24Gi" cpu: "4" readinessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 60 periodSeconds: 10 failureThreshold: 10 livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 120 periodSeconds: 30 volumes: - name: model-storage persistentVolumeClaim: claimName: model-storage-pvc Как скейлить LLM под нагрузкой?
Стандартный HPA по CPU бесполезен. Используем кастомные метрики — размер очереди vLLM (vllm_queue_size). Пример HPA с scaling policies:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: vllm-hpa namespace: ai-serving spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: vllm-llama3-8b minReplicas: 1 maxReplicas: 8 metrics: - type: Pods pods: metric: name: vllm_queue_size target: type: AverageValue averageValue: "10" behavior: scaleUp: stabilizationWindowSeconds: 60 policies: - type: Pods value: 1 periodSeconds: 120 scaleDown: stabilizationWindowSeconds: 300 Такая конфигурация даёт экономию GPU-часов до 30% при низкой нагрузке.
Что делать, если модель не влезает в один GPU?
Для моделей 70B+ используем tensor parallelism. Пример affinity для размещения на одной ноде:
resources: limits: nvidia.com/gpu: "4" memory: "320Gi" cpu: "32" affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - topologyKey: kubernetes.io/hostname Сравнение режимов разделения GPU:
| Параметр | Time-slicing (4 реплики) | MIG (3 инстанса по 20 ГБ) | Выделенный GPU |
|---|---|---|---|
| Изоляция | средняя | высокая | полная |
| Подходит для | малые модели (до 7B) | модели до 13B | модели >13B |
| Latency overhead | +20% | ±5% | базовая |
Пошаговая инструкция по деплою
- Установите NVIDIA Device Plugin через Helm, как описано выше.
- Создайте PVC для хранения модели с достаточным размером (минимум 50 ГБ для 7B модели).
- Разверните vLLM через приведённый манифест, указав верную модель и ресурсы.
- Настройте сервис и Ingress для доступа к API (например, через Istio или Nginx).
- Настройте HPA с кастомными метриками, собрав их с помощью Prometheus и адаптера.
- Проверьте скейлинг, запустив нагрузочное тестирование (например, с помощью locust).
Что входит в работу
- Аудит текущей инфраструктуры и рекомендации по GPU-нодам.
- Установка и настройка NVIDIA Device Plugin / GPU Operator.
- Деплой vLLM с поддержкой streaming и мониторингом (Prometheus + metrics).
- Настройка HPA на основе кастомных метрик.
- Документация и обучение команды (2 дня).
- Гарантия стабильной работы — 24/7 поддержка первый месяц.
Сроки внедрения
1-2 недели — базовый деплой одной модели. От 1 месяца — multi-model кластер с CI/CD, disaster recovery и cost optimization.
Получите консультацию
Обратитесь к нашим сертифицированным инженерам — поможем развернуть LLM-инфраструктуру, которая выдержит продакшен-нагрузку. Опыт — 50+ проектов по ML-инфраструктуре. Свяжитесь с нами для предварительной оценки. Закажите аудит GPU-инфраструктуры — мы подберём оптимальную конфигурацию под ваши задачи.







