Wenn Sie Mistral-LLMs (Large Language Models) in Google Kubernetes Engine (GKE) mit dem vLLM-Framework mit GPUs bereitstellen möchten, müssen Sie einen GKE-Cluster mit unterstützten Beschleunigern wie NVIDIA H100-GPUs bereitstellen.
Um das Modell „Mistral Small 4“ bereitzustellen, wird der vordefinierte vLLM-Container so konfiguriert, dass er Modellgewichte lädt. Gewichte werden aus Cloud Storage-Buckets geladen, die durch das Argument --model angegeben werden.
Sobald die Gewichte geladen sind, stellt der vLLM-Container einen OpenAI-kompatiblen API-Endpunkt für die Inferenz mit hohem Durchsatz bereit.
Diese Anleitung richtet sich an ML-Entwickler, Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die daran interessiert sind, Kubernetes-Container-Orchestrierungsfunktionen zu nutzen, um KI‑/ML-Arbeitslasten auf H100-GPU-Hardware bereitzustellen.
Machen Sie sich vor dem Lesen dieser Seite mit den folgenden Themen vertraut:
Ziele
In dieser Anleitung wird eine Grundlage für das Verständnis und die praktische Bereitstellung von LLMs für die Inferenz in einer verwalteten Kubernetes-Umgebung geschaffen.
- Ihre Umgebung mit einem GKE-Cluster im Autopilot-Modus vorbereiten.
- Stellen Sie einen vLLM-Container in Ihrem Cluster bereit.
- vLLM verwenden, um das Mistral-Modell über die curl-Schnittstelle bereitzustellen.
Hinweis
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Sie benötigen die folgenden Rollen für das Projekt: roles/container.admin, roles/iam.serviceAccountAdmin
Rollen prüfen
-
Rufen Sie in der Cloud de Confiance Console die Seite IAM auf.
IAM aufrufen - Wählen Sie das Projekt aus.
-
Suchen Sie in der Spalte Hauptkonto nach allen Zeilen, in denen Sie oder eine Gruppe, zu der Sie gehören, angegeben sind. Fragen Sie Ihren Administrator, zu welchen Gruppen Sie gehören.
- Prüfen Sie in allen Zeilen, in denen Sie angegeben oder enthalten sind, die Spalte Rolle, um zu sehen, ob die Liste der Rollen die erforderlichen Rollen enthält.
Rollen zuweisen
-
Rufen Sie in der Cloud de Confiance Console die Seite IAM auf.
IAM aufrufen - Wählen Sie das Projekt aus.
- Klicken Sie auf Zugriffsrechte erteilen.
-
Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Bei einem Nutzer in einem Mitarbeiteridentitätspool ist dies in der Regel dessen Kennung. Weitere Informationen erhalten Sie unter Mitarbeiteridentitätspool-Nutzer in IAM-Richtlinien darstellen oder von Ihrem Administrator.
- Klicken Sie auf Rolle auswählen und suchen Sie dann nach der Rolle.
- Klicken Sie auf Weitere Rolle hinzufügen, wenn Sie weitere Rollen zuweisen möchten.
- Klicken Sie auf Speichern.
-
- Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für H100-GPUs hat. Weitere Informationen finden Sie unter GPUs und Zuteilungskontingente.
Umgebung vorbereiten
In dieser Anleitung verwenden Sie kubectl und die gcloud CLI, um Ressourcen zu verwalten, die aufCloud de Confiance by S3NSgehostet werden. Sie können sich mit der gcloud CLI autorisieren, um auf Cloud de Confiance by S3NSzuzugreifen.
Wenn Sie Ihre Umgebung mit der gcloud CLI einrichten möchten, legen Sie die Standardumgebungsvariablen in der gcloud CLI fest:
gcloud config set project PROJECT_ID
gcloud config set billing/quota_project PROJECT_ID
export PROJECT_ID=$(gcloud config get project)
export REGION=u-france-east1
export CLUSTER_NAME=CLUSTER_NAME
export GSA_NAME=GSA_NAME
export KSA_NAME=KSA_NAME
export NAMESPACE=NAMESPACE
export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
export MODEL_BUCKET_NAME=MODEL_BUCKET_NAME
Ersetzen Sie die folgenden Werte:
PROJECT_ID: Ihre Cloud de Confiance Projekt-ID.REGION:u-france-east1-Region, die H100-GPUs unterstützt. Hier finden Sie Informationen dazu, welche GPUs in welcher Region verfügbar sind.CLUSTER_NAME: Der Name Ihres Clusters.GSA_NAME: Der Name des Google-Dienstkontos, z. B.mistral-small-gsa.KSA_NAME: Der Name des Kubernetes-ServiceAccount, z. B.mistral-small-ksa.NAMESPACE: der Kubernetes-Namespace, z. B.default.MODEL_BUCKET_NAME: Der Name des Cloud Storage-Bucket, in dem die Modellgewichte gespeichert werden. Er kann mit dem Namen des ausgewählten Modells identisch sein, z. B.mistral-small-4-119b-weights.
Cloud de Confiance -Ressourcen erstellen und konfigurieren
Folgen Sie dieser Anleitung, um die erforderlichen Ressourcen zu erstellen.
GKE-Cluster und -Knotenpool erstellen
Sie können Mistral auf GPUs in einem GKE Autopilot-Cluster bereitstellen. Autopilot-Cluster bieten eine vollständig verwaltete Kubernetes-Umgebung.
Führen Sie in der gcloud CLI den folgenden Befehl aus:
gcloud container clusters create-auto CLUSTER_NAME \
--project=PROJECT_ID \
--location=REGION \
--release-channel=rapid
Ersetzen Sie die folgenden Werte:
PROJECT_ID: Ihre Cloud de Confiance Projekt-ID.CLUSTER_NAME: Der Name Ihres Clusters.REGION: Die Region, in der sich der Cluster befindet.
GKE erstellt einen Autopilot-Cluster mit CPU- und GPU-Knoten, wie von den bereitgestellten Arbeitslasten angefordert.
Cloud Storage-Bucket erstellen
Führen Sie in der gcloud CLI den folgenden Befehl aus:
gcloud storage buckets create gs://${MODEL_BUCKET_NAME} \ --project=${PROJECT_ID} \ --location=${REGION} \ --uniform-bucket-level-accessDadurch wird ein Cloud Storage-Bucket zum Speichern der Modelldateien erstellt, die Sie von Hugging Face herunterladen.
Modellgewichte herunterladen und hochladen:
Sie müssen die Modellgewichte für Mistral Small 4 für die Versionen, die Sie bereitstellen möchten, abrufen (z.B. von Hugging Face oder anderen offiziellen Quellen). Organisieren Sie die heruntergeladenen Dateien lokal in Verzeichnissen. Beispiel:
./mistral-small-4-119b-weights-local/(mit allen Dateien für das Modell „Mistral Small 4“)
Laden Sie diese Verzeichnisse mit den spezifischen Präfixen, die von den Bereitstellungsmanifesten erwartet werden, in Ihren Cloud Storage-Bucket hoch:
# Upload files for the mistral-small-4 model gcloud storage cp --recursive ./mistral-small-4-119b-weights-local/* gs://${MODEL_BUCKET_NAME}Diese Befehlsstruktur sorgt dafür, dass sich die Modelldateien an Pfaden wie
gs://${MODEL_BUCKET_NAME}/config.jsonusw. befinden.
Workload Identity Federation for GKE für Cloud Storage-Zugriff konfigurieren
Damit Ihre Kubernetes-Pods sicher auf den Cloud Storage-Bucket mit den Modellgewichten zugreifen können, konfigurieren Sie die GKE Workload Identity-Föderation für GKE.
Google-Dienstkonto (GSA) erstellen:
gcloud iam service-accounts create ${GSA_NAME} \ --project=${PROJECT_ID}GSA-E-Mail-Adresse ermitteln und exportieren:
Das E-Mail-Format hängt davon ab, ob Ihre ${PROJECT_ID} auf eine Domain beschränkt ist (einen Doppelpunkt enthält).
if [[ $PROJECT_ID == *:* ]]; then DOMAIN=$(echo $PROJECT_ID | cut -d: -f1) PROJ_NAME=$(echo $PROJECT_ID | cut -d: -f2) export GSA_EMAIL="${GSA_NAME}@${PROJ_NAME}.${DOMAIN}.s3ns.iam.gserviceaccount.com" else export GSA_EMAIL="${GSA_NAME}@${PROJECT_ID}.s3ns.iam.gserviceaccount.com" fi echo "Using GSA Email: ${GSA_EMAIL}"Erstellen Sie das Kubernetes-Dienstkonto (Kubernetes Service Account, KSA):
Diese KSA wird in Ihrem Bereitstellungsmanifest verwendet.
kubectl create serviceaccount ${KSA_NAME} --namespace ${NAMESPACE}Führen Sie den folgenden Befehl aus, um die Erstellung zu prüfen:
kubectl get serviceaccounts --namespace ${NAMESPACE}Annotieren Sie das KSA, um es mit dem GSA zu verknüpfen:
Diese Annotation teilt GKE mit, welches GSA das KSA imitieren kann.
kubectl annotate serviceaccount ${KSA_NAME} \ --namespace ${NAMESPACE} \ iam.gke.io/gcp-service-account=${GSA_EMAIL}Gewähren Sie dem KSA die Berechtigung, die Identität des GSA zu übernehmen:
Durch diese IAM-Bindung für das GSA kann das KSA als GSA fungieren.
if [[ $PROJECT_ID == *:* ]]; then DOMAIN=$(echo $PROJECT_ID | cut -d: -f1) PROJ_NAME=$(echo $PROJECT_ID | cut -d: -f2) export WI_MEMBER="serviceAccount:${PROJ_NAME}.${DOMAIN}.s3ns.svc.id.goog[${NAMESPACE}/${KSA_NAME}]" else export WI_MEMBER="serviceAccount:${PROJECT_ID}.s3ns.svc.id.goog[${NAMESPACE}/${KSA_NAME}]" fi gcloud iam service-accounts add-iam-policy-binding ${GSA_EMAIL} \ --role roles/iam.workloadIdentityUser \ --member="${WI_MEMBER}" \ --project=${PROJECT_ID}Gewähren Sie der GSA die Berechtigung zum Lesen aus dem Bucket:
Weisen Sie dem GSA die Rolle
storage.objectViewerfür den Bucket zu.gcloud storage buckets add-iam-policy-binding gs://${MODEL_BUCKET_NAME} \ --member="serviceAccount:${GSA_EMAIL}" \ --role="roles/storage.objectViewer" \ --project=${PROJECT_ID}
Mistral Small 4-Modell in vLLM bereitstellen
Wenn Sie das Modell „Mistral Small 4“ bereitstellen möchten, erstellen Sie Cloud Storage-Buckets für jedes Modell, um Modellgewichte zu speichern, und wenden Sie ein Kubernetes-Bereitstellungsmanifest für die ausgewählte Modellgröße an. Ein Deployment ist ein Kubernetes-API-Objekt, mit dem Sie mehrere Replikate von Pods ausführen können, die auf die Knoten in einem Cluster verteilt sind.
Prozedur
Durch Anwenden dieses Manifests wird das vLLM-Container-Image abgerufen, eine NVIDIA-GPU angefordert und automatisch eine Verbindung zu den Modellgewichten aus Cloud Storage-Buckets hergestellt, um die vLLM-Inferenz-Engine zu starten.
Mistral Small 4
Folgen Sie dieser Anleitung, um das für die Anleitung abgestimmte Modell Mistral Small 4 bereitzustellen.
Erstellen Sie das folgende
vllm-mistral-small.yaml-Manifest:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: a3-edgegpu-8g-nolssd spec: priorities: - machineType: a3-edgegpu-8g-nolssd gpu: count: 8 type: nvidia-h100-80gb nodePoolAutoCreation: enabled: true --- apiVersion: apps/v1 kind: Deployment metadata: name: vllm-mistral-deployment spec: replicas: 1 selector: matchLabels: app: mistral-server template: metadata: labels: app: mistral-server ai.gke.io/model: mistral-small-4-119b-weights ai.gke.io/inference-server: vllm examples.ai.gke.io/source: user-guide spec: containers: - name: inference-server image: us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:gemma4 resources: requests: cpu: "48" memory: "200Gi" ephemeral-storage: "250Gi" nvidia.com/gpu: "2" limits: cpu: "48" memory: "200Gi" ephemeral-storage: "250Gi" nvidia.com/gpu: "2" command: ["./entrypoint.sh"] # Use the image's entrypoint args: - "python" - "-m" - "vllm.entrypoints.api_server" - "--host=0.0.0.0" - "--port=8080" - "--model=gs://mistral-small-4-119b-weights" # YOUR Cloud Storage PATH - "--tensor-parallel-size=2" - "--enable-log-requests" - "--enable-chunked-prefill" - "--enable-prefix-caching" - "--enable-auto-tool-choice" - "--generation-config=auto" - "--tool-call-parser=mistral" - "--dtype=bfloat16" - "--max-num-seqs=256" - "--max-model-len=8192" - "--gpu-memory-utilization=0.90" - "--reasoning-parser=mistral" - "--trust-remote-code" ports: - containerPort: 8080 env: - name: GOOGLE_CLOUD_UNIVERSE_DOMAIN value: "" - name: CLOUDSDK_CORE_UNIVERSE_DOMAIN value: "" - name: GCS_URI_ARG_KEY value: "model" - name: GCS_URI_ENV_KEY value: "AIP_STORAGE_URI" - name: LORA_ADAPTER_ARG_KEY value: "lora-modules" - name: HF_HUB_ENABLE_HF_TRANSFER value: "1" volumeMounts: - mountPath: /dev/shm name: dshm volumes: - name: dshm emptyDir: medium: Memory nodeSelector: cloud.google.com/compute-class: a3-edgegpu-8g-nolssd --- apiVersion: v1 kind: Service metadata: name: llm-service spec: selector: app: mistral-server type: ClusterIP ports: - protocol: TCP port: 8080 targetPort: 8080Wenden Sie das Manifest an:
kubectl apply -f vllm-mistral-small.yamlWenn Sie die Kontextfenstergröße auf 16.000 Tokens begrenzen möchten, können Sie die vLLM-Option
--max-model-len=16384verwenden. Wenn Sie eine größere Kontextfenstergröße (bis zu 128.000 Tokens) benötigen, passen Sie Ihr Manifest und die Knotenpoolkonfiguration mit mehr GPU-Kapazität an.
Überprüfung
Warten Sie, bis die Bereitstellung verfügbar ist:
kubectl wait --for=condition=Available --timeout=1800s deployment/vllm-mistral-deploymentSo rufen Sie die Logs des laufenden Deployments auf:
kubectl logs -f -l app=mistral-serverDie Deployment-Ressource lädt die Modelldaten für Mistral Small 4 herunter. Das kann einige Minuten dauern. Die Ausgabe sieht etwa so aus:
... ... (APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
Nachdem die Bereitstellung verfügbar ist, richten Sie die Portweiterleitung ein, um mit dem Modell zu interagieren.
Modell bereitstellen
In diesem Abschnitt interagieren Sie mit dem Modell. Das Modell muss vollständig heruntergeladen sein, bevor Sie fortfahren.
Portweiterleitung einrichten
Führen Sie den folgenden Befehl aus, um die Portweiterleitung zum Modell einzurichten:
kubectl port-forward svc/llm-service 8080:8080 --namespace default &
Die Ausgabe sieht in etwa so aus:
Forwarding from 127.0.0.1:8080 -> 8080
Mithilfe von curl mit dem Modell interagieren
In diesem Abschnitt wird gezeigt, wie Sie einen einfachen Smoke Test machen, um Ihre bereitgestellten Mistral-Modelle zu prüfen, die auf Anweisungen abgestimmt sind.
Ersetzen Sie für andere Modelle mistral-small-4-119b-weights durch den Namen des jeweiligen Modells.
In diesem Beispiel wird gezeigt, wie Sie das auf Anweisungen abgestimmte Mistral-Modell mit reinen Texteingaben testen.
Verwenden Sie in einer neuen Terminalsitzung curl, um mit Ihrem Modell zu chatten:
curl http://127.0.0.1:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-Small-4-119B-2603-eagle",
"prompt": "What is the capital of France?",
"max_tokens": 50,
"temperature": 0.7
}'
Die Ausgabe sieht dann ungefähr so aus:
{
"id": "cmpl-b5d649b6a2d7a330",
"object": "text_completion",
"created": 1781137490,
"model": "openapi",
"choices": [
{
"index": 0,
"text": " This question is likely to have been asked millions of times,
and the answer is always the same: Paris. But why is Paris the capital
of France? The answer to this question is not as simple as
it may seem, as it involves a complex",
"logprobs": null,
"finish_reason": "length",
"stop_reason": null,
"token_ids": null,
"prompt_logprobs": null,
"prompt_token_ids": null
}
],
"service_tier": null,
"system_fingerprint": null,
"usage": {
"prompt_tokens": 8,
"total_tokens": 58,
"completion_tokens": 50,
"prompt_tokens_details": null
},
"kv_transfer_params": null
}
Probleme beheben
- Wenn Sie die
Empty reply from server-Meldung erhalten, hat der Container möglicherweise die Modelldaten noch nicht ganz heruntergeladen. Prüfen Sie die Logs des Pods noch einmal auf dieConnected-Meldung, die angibt, dass das Modell einsatzbereit ist. - Wenn
Connection refusedangezeigt wird, prüfen Sie, ob die Portweiterleitung aktiv ist.
Modellleistung beobachten
So rufen Sie die Dashboards für die Messwerte zur Beobachtbarkeit eines Modells auf:
Rufen Sie in der Cloud de Confiance Console die Seite Bereitgestellte Modelle auf.
Wenn Sie Details zur jeweiligen Bereitstellung aufrufen möchten, einschließlich der zugehörigen Messwerte, Protokolle und Dashboards, klicken Sie in der Liste auf den Modellnamen.
Klicken Sie auf der Seite mit den Modelldetails auf den Tab Beobachtbarkeit, um die folgenden Dashboards aufzurufen. Klicken Sie bei entsprechender Aufforderung auf Aktivieren, um die Messwerterfassung für den Cluster zu aktivieren.
- Im Dashboard Infrastrukturnutzung werden Auslastungsmesswerte angezeigt.
- Im DCGM-Dashboard werden DCGM-Messwerte angezeigt.
- Wenn Sie vLLM verwenden, ist das Dashboard Modellleistung verfügbar. Dort werden Messwerte für die vLLM-Modellleistung angezeigt.
Sie können Messwerte auch in der vLLM-Dashboard-Integration in Cloud Monitoring aufrufen. Diese Messwerte werden für alle vLLM-Bereitstellungen ohne voreingestellte Filter zusammengefasst.
vLLM stellt Messwerte standardmäßig im Prometheus-Format bereit. Sie müssen keinen zusätzlichen Exporter installieren. Informationen zum Erfassen von Messwerten aus Ihrem Modell mit Google Cloud Managed Service for Prometheus finden Sie in der Cloud Monitoring-Dokumentation unter vLLM.Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Bereitgestellte Ressourcen löschen
Mit dem folgenden Befehl vermeiden Sie, dass Ihrem Cloud de Confiance Konto die in dieser Anleitung erstellten Ressourcen in Rechnung gestellt werden:
gcloud container clusters delete CLUSTER_NAME \
--location=REGION
Ersetzen Sie die folgenden Werte:
REGION: Die Region Ihres Clusters.CLUSTER_NAME: Der Name Ihres Clusters.
Nächste Schritte
- GPUs in GKE
- GPU-Arbeitslasten in Autopilot bereitstellen
- Sehen Sie sich das GitHub-Repository und die Dokumentation zu vLLM an.
- Erfahren Sie mehr über den Vertex AI Model Garden.
- Erfahren Sie, wie Sie optimierte KI/ML-Arbeitslasten über Funktionen zur GKE-Plattformorchestrierung ausführen.