Volver al inicio

Pila de producción vLLM: lanzamiento básico en K8s

Pila de producción vLLM proporciona inferencia de LLM de alto rendimiento en Kubernetes. Despliegues básicos, configuraciones GPU/CPU, llamadas a herramientas y modelos multimodales con ejemplos prácticos YAML se consideran.

vLLM en producción: K8s + optimizaciones GPU
Advertisement 728x90

Pila de Producción vLLM: Implementación y Configuración Básica para Entornos de Producción

La Pila de Producción vLLM simplifica el despliegue de inferencia de LLM de alto rendimiento en Kubernetes. Consiste en un grupo de instancias vLLM emparejadas con un router para gestionar el enrutamiento de solicitudes. Soporta APIs compatibles con OpenAI: chat/completions, embeddings, tokenización, transcripción de audio y traducción. Entorno de prueba: 2 servidores con 8× NVIDIA H200 (141 GB), Astra Linux SE 8, Kubernetes 1.30, vLLM 0.17.0, Pila de Producción 0.1.10.

Los ejemplos de configuración se muestran como fragmentos YAML. Los manifiestos completos incluyen campos estándar de Kubernetes, omitidos aquí por brevedad. Los conflictos de parámetros se indican por separado.

Modelos Soportados y Carga

vLLM soporta la mayoría de los LLM actuales. Usa versiones nocturnas para modelos nuevos. Por defecto, los modelos se descargan desde Hugging Face. En entornos sin conexión, monta mediante PVC:

Google AdInline article slot
extraVolumeMounts:
  - mountPath: /models/Qwen3-8B
    name: model
    readOnly: true
extraVolumes:
  - name: model
    persistentVolumeClaim:
      claimName: pvc-qwen3-8b

Despliegue Básico de Qwen3-8B

Despliega Qwen3-8B con montaje local y soporte API OpenAI:

servingEngineSpec:
  enableEngine: true
  modelSpec:
    - name: qwen3-8b
      repository: vllm-openai
      tag: v0.17.0
      env:
        - name: HF_HUB_OFFLINE
          value: "1"
      modelURL: /models/Qwen3-8B
      extraVolumeMounts:
        - mountPath: /models/Qwen3-8B
          name: model
          readOnly: true
      extraVolumes:
        - name: model
          persistentVolumeClaim:
            claimName: pvc-qwen3-8b
      replicaCount: 1
      requestCPU: 8
      requestGPU: 1
      requestMemory: 16Gi
      vllmConfig:
        extraArgs:
          - --served-model-name
          - Qwen/Qwen3-8B
        gpuMemoryUtilization: 0.98

Establecer HF_HUB_OFFLINE=1 desactiva todas las llamadas al Hub de Hugging Face. Redirección de puertos: kubectl port-forward svc/... 9191:9191. Prueba de solicitud:

curl -N http://localhost:9191/v1/chat/completions \
  -H "Content-Type: application/json" \
  --data-raw '{
    "model": "Qwen/Qwen3-8B",
    "messages": [
      { "role": "user", "content": "Escribe: ¡Hola!" }
    ]
  }'

Los modelos en modo pensamiento devuelven un bloque <think>...</think>.

Google AdInline article slot

Llamadas a Herramientas y Modos de Pensamiento

Habilita opciones del lado servidor para llamadas a herramientas:

extraArgs:
  - --enable-auto-tool-choice
  - --tool-call-parser
  - qwen3_coder

Sin estas opciones, los flujos de trabajo de agente fallan. Activa o desactiva el modo pensamiento mediante --default-chat-template-kwargs:

extraArgs:
  - --default-chat-template-kwargs
  - '{"enable_thinking": false}'

chat_template_kwargs del lado cliente anula la configuración del servidor. Para DeepSeek: {"thinking": false}.

Google AdInline article slot

Modelos Multimodales y Backend de CPU

Modelos multimodales requieren una imagen personalizada:

FROM vllm/vllm-openai:v0.17.0
RUN uv pip install --system "vllm[audio]==0.17.0" && \
    uv pip install --system "vllm[video]==0.17.0"

Aumenta shmSize: "32Gi" para mm_processor_cache. Establece tensorParallelSize: 1. Para Qwen3-Omni-30B: usa --limit-mm-per-prompt.

Inferencia solo en CPU para modelos de embedding (Qwen3-Embedding-0.6B):

env:
  - name: VLLM_CPU_KVCACHE_SPACE
    value: "48"
vllmConfig:
  extraArgs:
    - --served-model-name
    - Qwen3-Embedding-0.6B

VLLM_CPU_KVCACHE_SPACE debe establecerse con espacio de buffer.

Parámetros Clave en Tiempo de Ejecución

| Parámetro | Propósito | Cuándo es Crítico |

|----------|---------|-------------------|

| enablePrefixCaching | Cachear el KV-cache compartido | Inicios repetidos de prompt |

| enableChunkedPrefill | Dividir etapas largas de prefill | Entradas largas, cargas mixtas |

| maxModelLen | Longitud máxima de contexto | Ahorro de memoria, contextos largos |

| dtype | Tipo de datos de pesos | Control de precisión |

| tensorParallelSize | Partición de GPU | Modelos grandes |

| maxNumSeqs | Secuencias máximas por lote | Paralelismo, latencia |

| gpuMemoryUtilization | Uso de memoria GPU | Optimización OOM |

gpuMemoryUtilization=0.98 reserva espacio para el KV-cache. maxModelLen limita el contexto para ahorrar memoria. enablePrefixCaching acelera prefijos repetidos.

Conclusiones Clave

  • La Pila de Producción vLLM es una capa lista para usar en Kubernetes con router integrado y observabilidad.
  • Para uso offline, monta modelos mediante PVC y establece HF_HUB_OFFLINE=1.
  • Las llamadas a herramientas requieren --enable-auto-tool-choice y parser específico del modelo.
  • Modelos multimodales: imagen personalizada + shmSize 32Gi + tensorParallelSize.
  • Modo CPU: VLLM_CPU_KVCACHE_SPACE con buffer.

— Editorial Team

Advertisement 728x90

Leer después