Retour à l'accueil

vLLM Production Stack : lancement de base dans K8s

vLLM Production Stack fournit une inférence LLM haute performance dans Kubernetes. Déploiements de base, paramètres GPU/CPU, tool-calling et modèles multimodaux avec des exemples YAML pratiques sont considérés.

vLLM en production : K8s + optimisations GPU
Advertisement 728x90

Stack de production vLLM : déploiement et configuration de base

Le stack de production vLLM simplifie le déploiement d'inference haute performance pour les LLM sur Kubernetes. Il se compose d'une série d'instances vLLM associées à un routeur pour gérer le routage des requêtes. Compatible avec les API OpenAI : chat/completions, embeddings, tokenisation, transcription audio et traduction. Environnement de test : 2 serveurs équipés de 8× NVIDIA H200 (141 Go), Astra Linux SE 8, Kubernetes 1.30, vLLM 0.17.0, Stack de production 0.1.10.

Les exemples de configuration sont présentés sous forme de snippets YAML. Les manifests complets incluent des champs standard Kubernetes, omis ici pour plus de concision. Les conflits de paramètres sont signalés séparément.

Modèles pris en charge et chargement

vLLM prend en charge la majorité des LLM actuels. Utilisez les builds nightly pour les nouveaux modèles. Les modèles sont téléchargés depuis Hugging Face par défaut. Dans les environnements hors ligne, montez via PVC :

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

Déploiement basique de Qwen3-8B

Déployez Qwen3-8B avec montage local et prise en charge de l'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

La configuration HF_HUB_OFFLINE=1 désactive toutes les requêtes vers Hugging Face Hub. Pour le port forwarding : kubectl port-forward svc/... 9191:9191. Testez la requête :

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

Les modèles en mode réflexion renvoient un bloc thinks>...<think>.

Google AdInline article slot

Appel d'outils et modes de réflexion

Activez les options côté serveur pour l'appel d'outils :

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

Sans ces paramètres, les workflows d'agents échouent. Activez/désactivez le mode réflexion via --default-chat-template-kwargs :

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

Les paramètres chat_template_kwargs côté client remplacent les réglages serveur. Pour DeepSeek : {"thinking": false}.

Google AdInline article slot

Modèles multimodaux et backend CPU

Les modèles multimodaux nécessitent une image personnalisée :

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"

Augmentez shmSize: "32Gi" pour mm_processor_cache. Définissez tensorParallelSize: 1. Pour Qwen3-Omni-30B : utilisez --limit-mm-per-prompt.

Inférence uniquement CPU pour les modèles d'embeddings (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 doit être défini avec une mémoire tampon.

Paramètres clés au runtime

| Paramètre | Objectif | Quand critique |

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

| enablePrefixCaching | Mettre en cache le KV-cache partagé | Débuts de prompt répétés |

| enableChunkedPrefill | Fractionner les phases de pré-remplissage longues | Entrées longues, charges mixtes |

| maxModelLen | Longueur maximale du contexte | Économie de mémoire, grands contextes |

| dtype | Type de données des poids | Contrôle de précision |

| tensorParallelSize | Partitionnement GPU | Modèles volumineux |

| maxNumSeqs | Nombre maximal de séquences par lot | Parallélisme, latence |

| gpuMemoryUtilization | Utilisation de la mémoire GPU | Optimisation OOM |

gpuMemoryUtilization=0.98 réserve de l'espace pour le KV-cache. maxModelLen limite le contexte pour économiser de la mémoire. enablePrefixCaching accélère les préfixes répétés.

Points clés

  • Le stack de production vLLM est une couche prête à l'emploi sur Kubernetes, avec routeur intégré et observabilité.
  • En mode hors ligne, montez les modèles via PVC et définissez HF_HUB_OFFLINE=1.
  • L'appel d'outils nécessite --enable-auto-tool-choice et un parser spécifique au modèle.
  • Modèles multimodaux : image personnalisée + shmSize 32Gi + tensorParallelSize.
  • Mode CPU : VLLM_CPU_KVCACHE_SPACE avec tampon.

— Editorial Team

Advertisement 728x90

Lire ensuite