In dieser Anleitung erfahren Sie, wie Sie DeepSeek-R1 (deepseek-ai/DeepSeek-R1), ein Mixture-of-Experts-Modell mit 671 Milliarden Parametern und 37 Milliarden aktiven Parametern, in der Google Kubernetes Engine (GKE) aufGoogle Cloudbereitstellen und bereitstellen. Für die Bereitstellung werden das Cluster Toolkit, zwei Multi-Host-A4-VM-Instanzen (a4-highgpu-8g) mit insgesamt 16 NVIDIA B200-GPUs und das vLLM-Serving-Framework verwendet.
In der in dieser Anleitung beschriebenen Bereitstellungskonfiguration verwenden Sie das Cluster Toolkit, um einen GKE-Cluster im Standardmodus bereitzustellen. Der Cluster hat zwei a4-highgpu-8g-Knoten, die über ein GPUDirect-RDMA-Netzwerk (Remote Direct Memory Access) verbunden sind. Anschließend stellen Sie die Modellgewichtungen in Cloud Storage bereit und verwenden die Kubernetes JobSet API und Ray, um das Modell auf allen 16 NVIDIA B200-GPUs mit Tensorparallelität, Expertenparallelität und einem FP8-KV-Cache bereitzustellen.
Ziele
- Cluster Toolkit installieren und einen GKE-Cluster mit mehreren Hosts im Standardmodus bereitstellen.
- Stagen Sie die DeepSeek-R1-Modellgewichtungen in einem Cloud Storage-Bucket.
- Stellen Sie einen vLLM-Inferenzserver mit mehreren Hosts mit JobSet und Ray auf zwei A4-Knoten mit insgesamt 16 NVIDIA B200-GPUs bereit.
- Senden Sie eine Chat-Vervollständigungsanfrage an den vLLM-Server.
- Führen Sie eine Benchmark-Arbeitslast für die Bereitstellung aus.
- Bereinigen Sie die bereitgestellten Ressourcen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten vonGoogle Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung Ihrer voraussichtlichen Nutzung vornehmen.
Hinweis
Richten Sie die Umgebung für die Anleitung ein:
- Installieren und initialisieren Sie die Google Cloud CLI und installieren Sie
kubectl. Wenn Sie Cloud Shell verwenden, sind beide Tools vorinstalliert. - Wenn Sie diese Anleitung auf einer Linux- oder macOS-Workstation statt in Cloud Shell ausführen, installieren Sie die erforderlichen Cluster Toolkit-Abhängigkeiten (z. B. Terraform und Git).
Aktivieren Sie die Kubernetes Engine API, die Compute Engine API, die Cloud Storage API, die Artifact Registry API und die Service Usage API in Ihrem Google Cloud Projekt:
Hugging Face-Zugriffstoken abrufen
Für diese Anleitung benötigen Sie ein Hugging Face-Zugriffstoken. Sie können sich bei Hugging Face für ein kostenloses Konto registrieren. Nachdem Sie ein Konto erstellt haben, generieren Sie ein Zugriffstoken:
- Klicken Sie auf der Seite Willkommen bei Hugging Face auf Ihren Konto-Avatar und wählen Sie Zugriffstokens aus.
- Klicken Sie auf der Seite Zugriffstokens auf Neues Token erstellen.
- Wählen Sie den Tokentyp Lesen aus und geben Sie einen Namen für das Token ein.
- Ihr Zugriffstoken wird angezeigt. Speichern Sie das Token an einem sicheren Ort.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung benötigen:
- Kubernetes Engine-Administrator (
roles/container.admin) - Compute-Administrator (
roles/compute.admin) - Storage-Administrator (
roles/storage.admin) - Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin) - Service Account Admin (
roles/iam.serviceAccountAdmin) - Service Account User (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Umgebungsvariablen einrichten
Richten Sie die Authentifizierung und die Umgebungsvariablen für die Anleitung ein:
Richten Sie die Authentifizierung ein:
Exportieren Sie die Umgebungsvariablen, die Sie in dieser Anleitung verwenden:
Ersetzen Sie Folgendes:
YOUR_PROJECT_ID: die ID IhresGoogle Cloud -Projekts.YOUR_REGION: die Compute-Region, in der sich Ihre A4-Kapazität befindet und in der Sie Ihren Cluster bereitstellen möchten, z. B.us-central1.YOUR_ZONE: die Compute-Zone, in der sich Ihre A4-Kapazität befindet, z. B.us-central1-b.YOUR_CLUSTER_NAME: der Name für Ihren GKE-Cluster und die Cluster Toolkit-Bereitstellung. Verwenden Sie einen Namen mit maximal 20 Zeichen, damit die generierte Dienstkonto-ID des Knotenpools (YOUR_CLUSTER_NAME-gke-np-sa) innerhalb des IAM-Limits (Identity and Access Management) von 30 Zeichen bleibt.YOUR_RESERVATION_NAME: der Name Ihrer A4-Reservierung oder der Pfad des erweiterten Reservierungsblocks im FormatRESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME.YOUR_HF_TOKEN: Ihr Hugging Face-Zugriffstoken.YOUR_GCS_BUCKET: ein global eindeutiger Name für den Cloud Storage-Bucket, in dem Sie die Modellgewichtungen bereitstellen. Das Script legt außerdemTERRAFORM_BUCKETaufYOUR_GCS_BUCKET-tf-statefest, um den Terraform-Status für das Cluster Toolkit zu speichern.
Das Script setzt außerdem
CLUSTER_TOOLKIT_VERSIONaufv1.104.0, wodurch die zu installierende Cluster Toolkit-Version angegeben wird. Cluster Toolkit-Versionv1.104.0und höher enthalten integrierte Optionen für den Kapazitätsverbrauch fürexamples/gke-a4/gke-a4-deployment.yaml. In Versionen vorv1.104.0müssen Sie diese Kapazitätsoptionen manuell hinzufügen.
GKE-Cluster erstellen
Laden Sie das Cluster Toolkit herunter und stellen Sie einen GKE-Cluster im Standardmodus mit zwei a4-highgpu-8g-Knoten, GPUDirect RDMA-Netzwerk und dem JobSet-Controller bereit:
Laden Sie das vordefinierte Cluster Toolkit-Bundle für die in
CLUSTER_TOOLKIT_VERSION(v1.104.0) angegebene Version herunter und extrahieren Sie es. Wechseln Sie dann in das Verzeichniscluster-toolkitund prüfen Sie die Binärversion:Optional können Sie sich die verfügbaren Befehle und Flags im Cluster Toolkit ansehen:
Erstellen Sie den Cloud Storage-Bucket, in dem der Terraform-Status für Ihre Cluster Toolkit-Bereitstellung gespeichert wird:
Erstellen Sie die
examples/gke-a4/gke-a4-deployment.yaml-Bereitstellungskonfigurationsdatei für zweia4-highgpu-8g-Knoten:Standardmäßig ist der Blueprint
examples/gke-a4/gke-a4.yamlso konfiguriert, dass eine bestimmte Reservierung verwendet wird. Wenn Sie keine bestimmte Reservierung haben, können Sieexamples/gke-a4/gke-a4.yamlvor der Bereitstellung des Clusters bearbeiten, um eine der folgenden Verbrauchsoptionen zu verwenden:- Spot-Kapazität: Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für vorzeitige Beendigungen für Ihre GPUs, Laufwerke und CPUs hat. Kommentieren Sie am Ende von
examples/gke-a4/gke-a4.yamlden Abschnitt--- Option 1: Specific Reservation ---aus und entfernen Sie das Kommentarzeichen für den Abschnitt--- Option 4: Spot ---. - Flex-Start-VMs: Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für vorzeitige Beendigungen für Ihre GPUs, Laufwerke und CPUs hat. Kommentieren Sie unten in
examples/gke-a4/gke-a4.yamlden Abschnitt--- Option 1: Specific Reservation ---aus und entfernen Sie das Kommentarzeichen im Abschnitt--- Option 2: DWS Flex Start ---.
- Spot-Kapazität: Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für vorzeitige Beendigungen für Ihre GPUs, Laufwerke und CPUs hat. Kommentieren Sie am Ende von
Stellen Sie den GKE-Cluster mit dem Befehl
gcluster deploybereit:Die Erstellung eines Clusters dauert etwa 30 bis 45 Minuten. Wenn Sie
./gcluster deployohne das Flag--auto-approveausführen, geben Sieaein, wenn Sie dazu aufgefordert werden, um die vorgeschlagenen Änderungen anzuwenden. Wenn die Bereitstellung abgeschlossen ist, endet die Ausgabe mit einer Meldung wie dieser:Apply complete! Resources: 80 added, 0 changed, 0 destroyed.Konfigurieren Sie
kubectl-Anmeldedaten für die Kommunikation mit Ihrem Cluster:
Modellgewichtungen in Cloud Storage bereitstellen
Laden Sie die DeepSeek-R1-Gewichtungen auf die lokale SSD eines Ihrer A4-Knoten herunter und übertragen Sie sie in einen Cloud Storage-Bucket, um sie schnell über Knoten hinweg zu streamen:
Laden Sie die Kubernetes-Manifestdateien für den Modell-Download-Job, den vLLM-Inferenzserver und die Benchmark-Pods herunter:
Erstellen Sie den Cloud Storage-Bucket mit einheitlichem Zugriff auf Bucket-Ebene, um die Modellgewichtungen zu speichern:
Gewähren Sie dem Kubernetes-Standarddienstkonto, dem Compute Engine-Standarddienstkonto und dem Dienstkonto des Clusterknotenpools (
${CLUSTER_NAME}-gke-np-sa) IAM-Berechtigungen für den Bucket:Die durch das vorherige Skript gewährten IAM-Berechtigungen umfassen die Rolle „Storage Legacy Bucket Reader“ (
roles/storage.legacyBucketReader), die für--load-format runai_streamererforderlich ist.Erstellen Sie ein Kubernetes-Secret mit dem Namen
hf-secret, um Ihr Hugging Face-Zugriffstoken zu speichern:Prüfen Sie das Manifest
download_model.yamloder erstellen Sie die Datei lokal, wenn Sie sie nicht zuvor heruntergeladen haben:Ersetzen Sie den Namen Ihres Cloud Storage-Bucket im Manifest
download_model.yamlund starten Sie den Job zum Herunterladen des Modells:Warten Sie, bis der Download-Pod gestartet wurde, und streamen Sie dann die Joblogs:
Es dauert etwa 30 bis 40 Minuten, das Modell auf die lokale NVMe-SSD des Knotens herunterzuladen und die Gewichtungen in Ihren Cloud Storage-Bucket hochzuladen.
Prüfen Sie nach Abschluss des Jobs, ob alle 163
.safetensors-Shards in Ihrem Cloud Storage-Bucket vorhanden sind:Löschen Sie den abgeschlossenen Staging-Job:
vLLM-Server mit mehreren Hosts bereitstellen
Das Arbeitslastmanifest (deepseek_r1_server.yaml) definiert einen ClusterIP-Dienst (vllm-r1-leader) und ein Kubernetes-JobSet (vllm-r1), die die Bereitstellung auf mehreren Hosts über die beiden a4-highgpu-8g-Knoten koordinieren:
- Leader (
leader): Führt ein Replikat auf einem A4-Knoten mit acht NVIDIA B200-GPUs aus, bezieht die NCCL/gIB-Umgebung (/usr/local/gib/scripts/set_nccl_env.sh), startet den Ray-Head-Knoten auf Port6379für einen Cluster mit zwei Knoten und startetvllm serveauf HTTP-Port8080. Der Server streamt Gewichtungen direkt ausgs://$MODEL_BUCKET/DeepSeek-R1mithilfe von--load-format runai_streamerund lädt den Tokenizer aus dem bereitgestellten Cloud Storage FUSE-Volume unter/models/DeepSeek-R1. Es wird mit--tensor-parallel-size 16,--pipeline-parallel-size 1,--distributed-executor-backend ray,--enable-expert-parallel,--kv-cache-dtype fp8_e4m3,--async-schedulingund CUDA-Grafiken (FULL_AND_PIECEWISE) ausgeführt. - Worker (
worker): Führt ein headless Replikat auf dem zweiten A4-Knoten mit acht NVIDIA B200-GPUs aus, konfiguriert NCCL/gIB und tritt dem Ray-Cluster des Leaders untervllm-r1-leader:6379bei.
Stellen Sie den vLLM-Server mit mehreren Hosts bereit und überwachen Sie ihn:
Prüfen Sie das Manifest
deepseek_r1_server.yamloder erstellen Sie die Datei lokal, wenn Sie sie nicht zuvor heruntergeladen haben:Wenn Sie dieses Deployment auf mehr Hosts skalieren möchten, aktualisieren Sie die Parameter in
deepseek_r1_server.yaml. Wenn Sie beispielsweise auf vier A4-Knoten mit insgesamt 32 NVIDIA B200-GPUs skalieren möchten, legen Siereplicas: 3unter dem replizierten Jobworkerfest und aktualisieren Sie die Leader-Argumente so:--ray_cluster_size=4--tensor-parallel-size=16--pipeline-parallel-size=2
Ersetzen Sie
deepseek_r1_server.yamldurch den Namen Ihres Cloud Storage-Bucket und wenden Sie das Manifest auf Ihren Cluster an:Überwachen Sie die Logs des Leader- und Worker-Pods, bis der Serverstart abgeschlossen ist:
Da
kubectl logs -fLogs im Vordergrund streamt, führen Sie den Befehl für die Worker-Logs in einer separaten Terminalsitzung aus, wenn Sie beide Pods gleichzeitig überwachen möchten. Wenn Sie das Streamen von Logs beenden möchten, drücken Sie Strg + C.Das anfängliche Gewichtungsstreaming, das Laden des Modells und die CUDA-Grafikerfassung dauern etwa 15 bis 20 Minuten. Warten Sie, bis die Logs des Leader-Pods die folgenden Meldungen ausgeben, bevor Sie Anfragen senden:
(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
Inferenzanfragen senden
Senden Sie eine Chat-Vervollständigungsanfrage an den bereitgestellten vLLM-Server:
Leiten Sie den lokalen Port
8080im Hintergrund an den Dienstvllm-r1-leaderweiter:Senden Sie eine Anfrage zur Chat-Vervollständigung an den Endpunkt
/v1/chat/completions:
Benchmark-Arbeitslasten ausführen
Führen Sie einen Benchmark für den bereitgestellten DeepSeek-R1-Server mit vllm bench serve und einer Konfiguration von 8.192 Eingabetokens und 1.024 Ausgabetokens (8k/1k) durch:
Prüfen Sie das Manifest
deepseek_r1_8k_1k.yamloder erstellen Sie die Datei lokal, wenn Sie sie nicht zuvor heruntergeladen haben:Das Manifest gibt 8.192 Eingabetokens, 1.024 Ausgabetokens, 1.280 Prompts und eine maximale Nebenläufigkeit von 112 an.
Wenden Sie das
deepseek_r1_8k_1k.yaml-Manifest an:Warten Sie, bis der Pod
vllm-bench-8k-1kgestartet wurde, und streamen Sie dann die Benchmark-Logs:Der Benchmark dauert etwa 15 Minuten. Suchen Sie nach Abschluss des Benchmarks nach einer Ausgabe, die Messwerte wie die folgenden enthält:
Output token throughputTotal token throughputTTFTTPOT
Bereinigen
So vermeiden Sie, dass Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen laufend in Rechnung gestellt werden: Löschen Sie die Kubernetes-Arbeitslasten, den GKE-Cluster und Ihre Cloud Storage-Buckets:
Löschen Sie die Benchmark-Pods, das JobSet und den Dienst des vLLM-Servers, den Job zum Herunterladen des Modells und das Hugging Face-Secret:
Löschen Sie den Cloud Storage-Bucket, in dem die bereitgestellten Modellgewichtungen gespeichert sind:
Löschen Sie im Verzeichnis
cluster-toolkitden GKE-Cluster und die zugehörige Infrastruktur mit dem Befehlgcluster destroy:Löschen Sie den Cloud Storage-Bucket, in dem der Terraform-Status gespeichert ist: