Развёртывание LLM на Kubernetes с GPU: полное руководство

Деплой LLM на Kubernetes с GPU: опыт и конфиги

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

Деплой 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% базовая

Пошаговая инструкция по деплою

  1. Установите NVIDIA Device Plugin через Helm, как описано выше.
  2. Создайте PVC для хранения модели с достаточным размером (минимум 50 ГБ для 7B модели).
  3. Разверните vLLM через приведённый манифест, указав верную модель и ресурсы.
  4. Настройте сервис и Ingress для доступа к API (например, через Istio или Nginx).
  5. Настройте HPA с кастомными метриками, собрав их с помощью Prometheus и адаптера.
  6. Проверьте скейлинг, запустив нагрузочное тестирование (например, с помощью 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-инфраструктуры — мы подберём оптимальную конфигурацию под ваши задачи.