К основному содержанию
скилл CX Codex

llm-inference-scaling — скилл для Claude Code: суть и установка

Скилл настраивает автомасштабирование инференса LLM в Kubernetes через KEDA, метрики GPU и очереди Redis. Пригодится при непредсказуемом трафике к vLLM и для экономии на спотовых инстансах.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill llm-inference-scaling -a claude-code
Открыть на GitHub

Что делает llm-inference-scaling

Скилл даёт манифесты для горизонтального масштабирования подов с vLLM или TGI в кластере Kubernetes. Логика опирается на связку KEDA с метриками Prometheus: контроллер считывает очередь запросов vllm_num_requests_waiting и процент заполнения KV-кеша видеопамяти. Для отложенной пакетной генерации скилл предлагает ресурс ScaledJob, запускающий воркеры по мере накопления задач в очереди Redis.

Экономить бюджет помогает распределение нагрузки: спотовые GPU-ноды получают высокий приоритет в Cluster Autoscaler, а при их нехватке nodeAffinity переводит поды на on-demand инстансы. Для работы манифестов в кластере требуются Helm 3, KEDA и установленный NVIDIA GPU Operator с экспортёром dcgm-exporter.

Быстрый рост трафика приведёт к очередям, если не держать резерв: холодный запуск пода с выкачиванием весов занимает минуты. Из-за этого параметр minReplicaCount в боевых сервисах надёжнее задавать больше нуля.

Какие задачи решает

  • настроить автомасштабирование подов vLLM по глубине очереди запросов
  • масштабировать инференс по метрикам нагрузки на KV-кеш GPU из Prometheus
  • организовать пакетную обработку задач через Redis и KEDA ScaledJob
  • снизить затраты на GPU с помощью спотовых инстансов и отката на on-demand
  • развернуть NVIDIA GPU Operator и экспортёр DCGM в Kubernetes

Примеры запросов агенту

  • Помоги составить манифест ScaledObject для vLLM на базе метрик очереди vllm_num_requests_waiting
  • Настрой nodeAffinity и приоритеты для запуска инференса на спотовых GPU с фоллбэком на on-demand
  • Напиши манифест KEDA ScaledJob для обработки батчей LLM из очереди Redis

Как установить llm-inference-scaling

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill llm-inference-scaling -a claude-code

2Вручную: положить файлы

~/.claude/skills/llm-inference-scaling/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/llm-inference-scaling/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора127

aws-s3 Шаблоны, политики и команды AWS CLI для развёртывания бакетов S3 с шифрованием KMS, репликацией и правилами жизненного цикла. CX Codex +1 345установок container-registries Скилл для работы с реестрами контейнеров: ECR, ACR, GCR, Docker Hub, GHCR и self-hosted. Пригодится, когда нужно запушить образ или настроить политику хранения. CX Codex +1 346установок policy-as-code Скилл для ИИ-агента, который пишет политики OPA/Rego и Kyverno и встраивает их проверку в CI/CD до попадания изменений в прод. CX Codex +1 345установок soc2-compliance Скилл раскладывает требования SOC 2 по критериям и подсказывает, какие доказательства собирать для аудита Type I и Type II. CX Codex +1 344установок aws-cloudtrail Настраивает аудит CloudTrail во всех аккаунтах AWS организации и создаёт алерты на опасные события. Пригодится при подготовке к аудиту безопасности. CX Codex +1 340установок agent-evals Скилл собирает автотесты для ИИ-агентов: golden-датасеты, рубрики оценки и регрессионные гейты в CI. Пригодится, когда меняешь промпты и хочешь видеть, что стало хуже. CX Codex +1 340установок ai-coding-agent-guardrails Скилл задаёт границы прав, защиту секретов и проверку кода для ИИ-агентов в команде. Пригодится, когда агент пишет код в репозитории с секретами и инфраструктурой. CX Codex +1 340установок incident-management Скилл задаёт уровни серьёзности, матрицу эскалации, работу в war room и разборы инцидентов без поиска виноватых. Пригодится, когда падает прод. CX Codex +1 339установок

Похожие

tao-run-on-kubernetes NVIDIA Corporation Отправляет контейнерные задачи TAO как Kubernetes Jobs с планированием на GPU NVIDIA. Пригодится, если обучение уже живёт в кластере EKS, GKE, AKS или на своём железе. CX Codex +1 1 600установок gke-inference официальный google Готовит Kubernetes-манифесты для AI/ML-инференса на GKE и помогает выбрать модельный профиль и ускоритель для нового сервинга. CX Codex 6 791установок digitalocean-compute bobmatnyc Подсказывает агенту, что выбрать в DigitalOcean под задачу: Droplets, App Platform, Functions, DOKS или GPU. Пригодится, когда решаешь, куда деплоить приложение или контейнер. CX Codex +1 416установок google-cloud-solution-guided-gke-ai-migration официальный google Помогает перенести существующую AI-инференсную нагрузку из Cloud Run, Gemini API или другой среды в self-hosted inference на GKE. CX Codex 4 700установок dynamo-recipe-runner Dan Gil Скилл подбирает, валидирует, точечно правит и разворачивает готовые Kubernetes-рецепты NVIDIA Dynamo для инференс-моделей под vLLM или SGLang. CX Codex +1 2 300установок azure-container-apps MicrosoftDocs Даёт агенту справку по Azure Container Apps: от настройки безопасности и масштабирования до диагностики сбоев и развёртывания. CX Codex +1 1 300установок

Рядом в теме «DevOps и инфраструктура»

Всё по теме «DevOps и инфраструктура» →

Вопросы о llm-inference-scaling

Как установить llm-inference-scaling в Claude Code?

Выполните команду npx skills add BagelHole/DevOps-Security-Agent-Skills --skill llm-inference-scaling -a claude-code. Также файл скилла можно сохранить вручную по пути ~/.claude/skills/llm-inference-scaling/SKILL.md.

Что делает скилл llm-inference-scaling?

Он предоставляет готовые конфигурации для масштабирования серверов LLM-инференса в Kubernetes. Скилл связывает KEDA с метриками Prometheus и очередями Redis для реакции на входящую нагрузку.

Какие компоненты нужны в кластере перед запуском?

Потребуются узлы с GPU, NVIDIA GPU Operator с драйверами и DCGM, развёрнутый Prometheus, контроллер KEDA и Helm 3.

Исходный текст

SKILL.md · MIT
---
name: llm-inference-scaling
description: Auto-scale LLM inference clusters on Kubernetes using KEDA, custom GPU metrics, and horizontal pod autoscaling. Handle traffic spikes, implement queue-based scaling, and optimize cost with spot instances for AI workloads.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# LLM Inference Scaling

Scale LLM inference horizontally on Kubernetes with GPU-aware autoscaling, request queuing, and cost-efficient spot instance strategies.

## When to Use This Skill

Use this skill when:
- LLM API traffic is unpredictable and you need to scale up/down automatically
- Managing a fleet of vLLM or TGI inference pods on Kubernetes
- Reducing inference costs with spot/preemptible GPU instances
- Implementing queue-based autoscaling for batch inference jobs
- Building a multi-model serving platform that shares GPU resources

## Prerequisites

- Kubernetes cluster with GPU nodes (NVIDIA operator installed)
- KEDA (Kubernetes Event-Driven Autoscaler) installed
- Prometheus with GPU metrics (`dcgm-exporter` or `gpu-operator`)
- Helm 3+ for chart deployments

## GPU Node Setup

```bash
# Install NVIDIA GPU Operator (handles drivers, container toolkit, DCGM)
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update

helm install gpu-operator nvidia/gpu-operator \
  --namespace gpu-operator \
  --create-namespace \
  --set driver.enabled=true \
  --set dcgm.enabled=true \
  --set devicePlugin.enabled=true

# Verify GPU nodes are recognized
kubectl get nodes -l nvidia.com/gpu.present=true
kubectl describe node <gpu-node> | grep nvidia
```

## vLLM Deployment with GPU Resources

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: vllm-llama-8b
  labels:
    app: vllm
    model: llama-3.1-8b
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vllm
      model: llama-3.1-8b
  template:
    metadata:
      labels:
        app: vllm
        model: llama-3.1-8b
    spec:
      nodeSelector:
        nvidia.com/gpu.present: "true"
      tolerations:
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
      containers:
      - name: vllm
        image: vllm/vllm-openai:latest
        args:
        - "--model"
        - "meta-llama/Llama-3.1-8B-Instruct"
        - "--tensor-parallel-size"
        - "1"
        - "--gpu-memory-utilization"
        - "0.90"
        - "--max-num-seqs"
        - "128"
        resources:
          requests:
            nvidia.com/gpu: "1"
            memory: "20Gi"
            cpu: "4"
          limits:
            nvidia.com/gpu: "1"
            memory: "24Gi"
            cpu: "8"
        ports:
        - containerPort: 8000
        readinessProbe:
          httpGet:
            path: /health
            port: 8000
          initialDelaySeconds: 60
          periodSeconds: 10
        env:
        - name: HUGGING_FACE_HUB_TOKEN
          valueFrom:
            secretKeyRef:
              name: hf-token
              key: token
```

## KEDA Autoscaling on Prometheus Metrics

```yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: vllm-scaledobject
spec:
  scaleTargetRef:
    name: vllm-llama-8b
  minReplicaCount: 1
  maxReplicaCount: 8
  cooldownPeriod: 300          # 5 min before scale-down
  pollingInterval: 15
  triggers:
  - type: prometheus
    metadata:
      serverAddress: http://prometheus-server.monitoring:9090
      metricName: vllm_num_requests_waiting
      threshold: "10"           # scale up if >10 requests waiting
      query: |
        sum(vllm:num_requests_waiting{deployment="vllm-llama-8b"})
  - type: prometheus
    metadata:
      serverAddress: http://prometheus-server.monitoring:9090
      metricName: vllm_gpu_cache_usage
      threshold: "0.8"          # scale up if KV cache >80% full
      query: |
        avg(vllm:gpu_cache_usage_perc{deployment="vllm-llama-8b"})
```

## Queue-Based Scaling (Redis + KEDA)

```yaml
# ScaledJob for async batch inference
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: llm-batch-inference
spec:
  jobTargetRef:
    template:
      spec:
        containers:
        - name: inference-worker
          image: myapp/inference-worker:latest
          env:
          - name: REDIS_URL
            value: redis://redis:6379
          - name: QUEUE_NAME
            value: inference-jobs
        restartPolicy: OnFailure
  minReplicaCount: 0
  maxReplicaCount: 20
  pollingInterval: 5
  successfulJobsHistoryLimit: 3
  triggers:
  - type: redis
    metadata:
      address: redis:6379
      listName: inference-jobs
      listLength: "5"           # 1 worker per 5 queued jobs
```

## Spot Instance Strategy

```yaml
# Mixed node pool: on-demand + spot GPUs
apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-autoscaler-priority-config
data:
  priorities: |
    10:  # low priority = prefer
    - .*spot.*
    50:
    - .*on-demand.*
---
# Node affinity for spot with on-demand fallback
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 80
        preference:
          matchExpressions:
          - key: node.kubernetes.io/lifecycle
            operator: In
            values: [spot]
      - weight: 20
        preference:
          matchExpressions:
          - key: node.kubernetes.io/lifecycle
            operator: In
            values: [on-demand]
```

## Cluster Autoscaler for GPU Nodes

```bash
# AWS EKS — enable cluster autoscaler for GPU node group
helm install cluster-autoscaler autoscaler/cluster-autoscaler \
  --namespace kube-system \
  --set autoDiscovery.clusterName=my-cluster \
  --set awsRegion=us-east-1 \
  --set rbac.serviceAccount.annotations."eks\.amazonaws\.com/role-arn"=arn:aws:iam::ACCOUNT:role/ClusterAutoscalerRole \
  --set extraArgs.skip-nodes-with-local-storage=false \
  --set extraArgs.expander=least-waste

# Annotate GPU node group for autoscaler
kubectl annotate node <node> \
  cluster-autoscaler.kubernetes.io/safe-to-evict="false"
```

## Scaling Metrics to Monitor

```bash
# Prometheus queries for scaling decisions
# Requests waiting in vLLM queue
sum(vllm:num_requests_waiting) by (model)

# GPU KV cache utilization (>80% = bottleneck)
avg(vllm:gpu_cache_usage_perc) by (pod)

# Tokens per second throughput
sum(rate(vllm:generation_tokens_total[5m])) by (model)

# P99 time-to-first-token
histogram_quantile(0.99, rate(vllm:time_to_first_token_seconds_bucket[5m]))
```

## Common Issues

| Issue | Cause | Fix |
|-------|-------|-----|
| Pods stuck in `Pending` | No GPU nodes available | Check cluster autoscaler logs; verify node group limits |
| Scale-up too slow | Cluster autoscaler delay + model load time | Pre-warm replicas; increase `minReplicaCount` |
| GPU fragmentation | Multiple small models on large GPUs | Use MIG partitioning or consolidate model sizes |
| Spot eviction causes errors | Spot instance reclamation | Add `PodDisruptionBudget`; use graceful shutdown |
| KEDA not scaling | Prometheus query returns no data | Test query in Prometheus UI first |

## Best Practices

- Set `minReplicaCount: 1` to avoid cold starts; scale to 0 only for batch jobs.
- Use `PodDisruptionBudget` with `minAvailable: 1` to survive spot evictions.
- Pre-pull model weights into a shared PVC to speed up pod startup by 5–10×.
- Separate model families across node pools (A10G for 7B, A100 for 70B).
- Use Kubernetes VPA for CPU/memory right-sizing alongside KEDA for replica count.

## Related Skills

- [vllm-server](../vllm-server/) - vLLM configuration and tuning
- [gpu-server-management](../../servers/gpu-server-management/) - GPU node setup
- [model-serving-kubernetes](../../../devops/orchestration/model-serving-kubernetes/) - KServe
- [kubernetes-ops](../../../devops/orchestration/kubernetes-ops/) - Core Kubernetes
- [llm-cost-optimization](../../../devops/ai/llm-cost-optimization/) - Cost strategies

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой