Zurück zur Startseite

vLLM Production Stack: einfacher Start in K8s

vLLM Production Stack bietet hochperformante LLM-Inferenz in Kubernetes. Grundlegende Bereitstellungen, GPU/CPU-Einstellungen, tool-calling und multimodale Modelle mit praktischen YAML-Beispielen werden betrachtet.

vLLM in der Produktion: K8s + GPU-Optimierungen
Advertisement 728x90

vLLM-Produktions-Stack: Bereitstellung und Grundkonfiguration für die Produktion

Der vLLM-Produktions-Stack vereinfacht die Bereitstellung leistungsstarker LLM-Inferenz unter Kubernetes. Er besteht aus einer Gruppe von vLLM-Instanzen, die mit einem Router zur Anfragerouting kombiniert werden. Unterstützt OpenAI-kompatible APIs: chat/completions, Embeddings, Tokenisierung, Audio-Transkription und Übersetzung. Testumgebung: 2 Server mit jeweils 8× NVIDIA H200 (141 GB), Astra Linux SE 8, Kubernetes 1.30, vLLM 0.17.0, Production Stack 0.1.10.

Konfigurationsbeispiele werden als YAML-Snippets dargestellt. Vollständige Manifeste enthalten standardmäßige Kubernetes-Felder, die hier aus Platzgründen weggelassen wurden. Parameterkonflikte sind gesondert hervorgehoben.

Unterstützte Modelle und Laden

vLLM unterstützt die meisten aktuellen LLMs. Für neue Modelle sollten nightly Builds verwendet werden. Die Standardquelle für Modelle ist Hugging Face. In offline-Umgebungen kann das Modell über einen PVC gemountet werden:

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

Einfache Bereitstellung von Qwen3-8B

Bereitstellung von Qwen3-8B mit lokalem Mounting und OpenAI-API-Unterstützung:

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

Die Einstellung HF_HUB_OFFLINE=1 deaktiviert alle Aufrufe zum Hugging Face Hub. Port-Forwarding: kubectl port-forward svc/... 9191:9191. Testanfrage:

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

Modelle im Denkmodus geben einen thinks>...<think>-Block zurück.

Google AdInline article slot

Tool-Aufruf und Denkmodus

Aktivieren serverseitiger Optionen für Tool-Aufrufe:

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

Ohne diese Einstellungen scheitern Agent-Workflows. Denkmodus aktivieren/deaktivieren über --default-chat-template-kwargs:

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

Clientseitige chat_template_kwargs überschreiben serverseitige Einstellungen. Für DeepSeek: {"thinking": false}.

Google AdInline article slot

Multimodale Modelle und CPU-Backend

Multimodale Modelle erfordern ein benutzerdefiniertes Image:

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"

Erhöhen Sie shmSize: "32Gi" für mm_processor_cache. Setzen Sie tensorParallelSize: 1. Für Qwen3-Omni-30B verwenden Sie --limit-mm-per-prompt.

CPU-only-Inferenz für Embedding-Modelle (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 muss mit Speicherpuffer konfiguriert werden.

Wichtige Laufzeitparameter

| Parameter | Zweck | Wann kritisch |

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

| enablePrefixCaching | Gemeinsamen Präfix-KV-Cache speichern | Wiederholte Prompt-Anfänge |

| enableChunkedPrefill | Lange Pre-fill-Phasen aufteilen | Lange Eingaben, gemischte Workloads |

| maxModelLen | Maximale Kontextlänge | Speichersparen, lange Kontexte |

| dtype | Gewicht-Datentyp | Präzisionssteuerung |

| tensorParallelSize | GPU-Partitionierung | Große Modelle |

| maxNumSeqs | Max. Sequenzen pro Batch | Parallelität, Latenz |

| gpuMemoryUtilization | GPU-Speicherausnutzung | OOM-Optimierung |

gpuMemoryUtilization=0.98 reserviert Platz für KV-Cache. maxModelLen begrenzt den Kontext zur Speichersparnis. enablePrefixCaching beschleunigt wiederholte Präfixe.

Wichtige Erkenntnisse

  • Der vLLM-Produktions-Stack ist eine sofort einsatzbereite Kubernetes-Schicht mit integriertem Router und Observability.
  • Für Offline-Betrieb: Modelle über PVC mounten und HF_HUB_OFFLINE=1 setzen.
  • Tool-Aufrufe erfordern --enable-auto-tool-choice und modellspezifischen Parser.
  • Multimodale Modelle: benutzerdefiniertes Image + shmSize 32Gi + tensorParallelSize.
  • CPU-Modus: VLLM_CPU_KVCACHE_SPACE mit Puffer.

— Editorial Team

Advertisement 728x90

Weiterlesen