In dieser Anleitung erfahren Sie, wie Sie Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8), ein auf FP8 quantisiertes, auf Anweisungen abgestimmtes Modell mit 405 Milliarden Parametern, in Google Kubernetes Engine (GKE) auf Google Cloudbereitstellen und bereitstellen. Für die Bereitstellung werden das Cluster Toolkit, zwei virtuelle A4-Maschinen (a4-highgpu-8g) mit insgesamt 16 NVIDIA B200-GPUs, NVIDIA Dynamo und das SGLang-Serving-Framework mit Single-Host-Prefill-Decode-Disaggregation (PD) verwendet.
In der in dieser Anleitung beschriebenen Bereitstellungskonfiguration verwenden Sie das Cluster Toolkit, um einen GKE-Cluster im Standardmodus bereitzustellen. Der Cluster enthält zwei a4-highgpu-8g-Knoten, die über ein GPUDirect-RDMA-Netzwerk (Remote Direct Memory Access) verbunden sind. Anschließend installieren Sie den KAI-Scheduler und die NVIDIA Dynamo-Plattform mit Grove-Gang-Scheduling.
Schließlich stellen Sie eine benutzerdefinierte Ressource vom Typ „DynamoGraphDeployment“ bereit, die Prefill und Decodierung auf zwei Single-Host-Worker mit acht GPUs mit Tensorparallelität und einem FP8-KV-Cache aufteilt.
Ziele
- Cluster Toolkit installieren und einen A4-GKE-Cluster mit zwei Knoten im Standardmodus bereitstellen.
- Installieren Sie den KAI-Scheduler und die NVIDIA Dynamo-Plattform mit Grove-Gang-Scheduling auf Ihrem Cluster.
- Stellen Sie einen PD-disaggregierten SGLang-Inferenzserver mit einem A4-Prefill-Worker mit einem Host und einem A4-Decodierungs-Worker mit einem Host bereit.
- Senden Sie eine Anfrage zur Chat-Vervollständigung an den Dynamo-Frontend-Router.
- 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
kubectlund Helm (Version 3.10 oder höher). Wenn Sie Cloud Shell verwenden, sind diese 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 wie Terraform und Git.
Aktivieren Sie die Kubernetes Engine API, die Compute Engine API, die Cloud Storage API, die Identity and Access Management API, die Cloud Resource Manager 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
Exportieren Sie die Umgebungsvariablen, die Sie in dieser Anleitung verwenden:
Ersetzen Sie Folgendes:
YOUR_PROJECT_ID: die ID Ihres Projekts in Google Cloud.YOUR_REGION: die 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 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.YOUR_BUCKET_NAME: ein global eindeutiger Name für den Cloud Storage-Bucket, in dem der Terraform-Status für das Cluster Toolkit gespeichert wird.YOUR_HF_TOKEN: Ihr Hugging Face-Zugriffstoken.
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 DRA-Unterstützung bereit:
Melden Sie sich in der Google Cloud CLI an und generieren Sie Standardanmeldedaten für Anwendungen für Terraform:
Laden Sie das vordefinierte Cluster Toolkit-Bundle für die in
CLUSTER_TOOLKIT_VERSION(v1.104.0) angegebene Version herunter und extrahieren Sie es:Wenn Sie diesen Befehl unter macOS oder auf einer
arm64-Workstation ausführen, legen SieOS="mac"oderARCH="arm64"entsprechend Ihrer Plattform fest.Erstellen Sie einen Cloud Storage-Bucket mit aktivierter Objektversionsverwaltung, um den Terraform-Zustand für Ihre Cluster Toolkit-Bereitstellung zu speichern:
Erstellen Sie die Bereitstellungskonfigurationsdatei
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlfür zweia4-highgpu-8g-Knoten:Standardmäßig ist die Bereitstellungsdatei so konfiguriert, dass eine bestimmte Reservierung genutzt wird. Wenn Sie keine bestimmte Reservierung haben, können Sie vor dem Bereitstellen des Clusters
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlaktualisieren, um eine alternative Nutzungsoption wie Spot-VMs oder Flex-Start-VMs zu verwenden. Eine Konfigurationsanleitung finden Sie unter GKE-Nutzungsoptionen.Wechseln Sie in das Verzeichnis
cluster-toolkit, stellen Sie den GKE-Cluster mit dem Befehlgcluster deploybereit und kehren Sie dann zu Ihrem Arbeitsverzeichnis zurück:Die Erstellung eines Clusters dauert etwa 20 bis 30 Minuten. Wenn Sie
./gcluster deployohne das Flag--auto-approveausführen, geben Sieaein, wenn Sie dazu aufgefordert werden, um die vorgeschlagenen Änderungen anzuwenden.Konfigurieren Sie
kubectl-Anmeldedaten für die Kommunikation mit Ihrem Cluster:
KAI Scheduler und NVIDIA Dynamo installieren
Bereiten Sie Ihren Cluster vor, indem Sie ein Hugging Face-Secret erstellen und den KAI-Scheduler und die NVIDIA Dynamo-Plattform mit Grove-Gang-Scheduling installieren:
Erstellen Sie ein Kubernetes-Secret mit dem Namen
hf-secret, um Ihr Hugging Face-Zugriffstoken zu speichern:Laden Sie das Helm-Diagramm für die NVIDIA Dynamo-Plattform (
v1.5.0) herunter, installieren Sie den KAI-Scheduler und installieren Sie die Dynamo-Plattform mit aktiviertem Grove:
Disaggregierten SGLang-Server mit einem einzelnen Host bereitstellen
Das Arbeitslastmanifest (llama3.1-405b-singlehost-a4.yaml) definiert ein Kubernetes-ResourceClaimTemplate (all-mrdma), das die Multi-NIC-RDMA-Geräte (mrdma.google.com) des Knotens über DRA zuweist, und ein NVIDIA Dynamo DynamoGraphDeployment (llama3-405b-a4-disagg) mit aktiviertem Grove-Gang-Scheduling. Die Bereitstellung umfasst Folgendes:
- Frontend (
Frontend): Führt ein Router-Replikat aus, das Clientanfragen akzeptiert, registrierte Prefill- und Decodierungs-Worker erkennt und das disaggregierte Anfragerouting koordiniert. - Prefill-Worker (
Prefill): Führt einen Single-Host-Worker auf einema4-highgpu-8g-Knoten mit acht NVIDIA B200-GPUs aus. Beim Start bezieht der Pod die NCCL/gIB-Umgebung, lädt dennvidia/Llama-3.1-405B-Instruct-FP8-Prüfpunkt vom Hugging Face Hub auf die lokale NVMe-SSD des Knotens herunter und startetpython3 -m dynamo.sglangin--disaggregation-mode prefillmit den folgenden Flags:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- Decode-Worker (
Decode): Führt einen Single-Host-Worker auf dem zweitena4-highgpu-8g-Knoten mit acht NVIDIA B200-GPUs aus. Beim Start speichert der Pod die Modellgewichtungen auf der lokalen NVMe-SSD des Knotens im Cache und startetpython3 -m dynamo.sglangin--disaggregation-mode decodemit den folgenden Flags:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
Disaggregierten Inferenzserver bereitstellen und überwachen:
Laden Sie das Arbeitslastmanifest
llama3.1-405b-singlehost-a4.yamlherunter:Alternativ können Sie eine Datei mit dem Namen
llama3.1-405b-singlehost-a4.yamlund folgendem Inhalt erstellen:Wenden Sie das Arbeitslastmanifest auf Ihren Cluster an:
Wenn Sie den Download der Gewichtungen und die Serverinitialisierung überwachen möchten, listen Sie die Pods in Ihrem Cluster auf und streamen Sie die Logs der Prefill- und Decode-Pods:
Ersetzen Sie
YOUR_POD_NAMEdurch den Namen des Pods für die Vorabfüllung oder des Pods für die Decodierung aus der Ausgabe vonkubectl get pods.Beim ersten Durchlauf dauert es etwa 10 bis 20 Minuten, die 405B-FP8-Modellgewichtungen herunterzuladen und die SGLang-Server zu initialisieren. Warten Sie, bis die Pods für Frontend, Prefill und Decode in der Spalte
READYvonkubectl get podsden Wert1/1anzeigen, bevor Sie Anfragen senden:NAME READY STATUS RESTARTS AGE llama3-405b-a4-disagg-0-decode-tgl7q 1/1 Running 0 15m llama3-405b-a4-disagg-0-frontend-wrxq5 1/1 Running 0 15m llama3-405b-a4-disagg-0-prefill-67h5s 1/1 Running 0 15m
Inferenzanfragen senden
Senden Sie eine Chat-Vervollständigungsanfrage an den bereitgestellten Llama 3.1 405B-Dienst:
Leiten Sie den lokalen Port
8000an den Dienstllama3-405b-a4-disagg-frontendweiter:Lassen Sie die Portweiterleitung in dieser Terminalsitzung laufen oder führen Sie den Befehl im Hintergrund aus.
Senden Sie in einer zweiten Terminalsitzung eine Anfrage zur Chat-Vervollständigung an den Endpunkt
/v1/chat/completions:
Benchmark-Arbeitslast ausführen
Führen Sie mit sglang.bench_serving einen Benchmark für den bereitgestellten Llama 3.1 405B-Server über den Dynamo-Frontend-Pod aus. Konfigurieren Sie den Benchmark für 1.024 Eingabetokens, 1.024 Ausgabetokens (1k/1k), 2.048 Prompts und eine maximale Nebenläufigkeit von 512:
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 den Cloud Storage-Bucket:
Löschen Sie die Ressourcen „DynamoGraphDeployment“ und „ResourceClaimTemplate“:
Deinstallieren Sie die NVIDIA Dynamo-Plattform und die KAI Scheduler Helm-Releases:
Löschen Sie das Hugging Face-Kubernetes-Secret:
Löschen Sie im Verzeichnis
cluster-toolkitden GKE-Cluster und die zugehörige Infrastruktur mit dem Befehlgcluster destroy:Verwenden Sie den Befehl
gcloud storage rm, um den Cloud Storage-Bucket zu löschen, in dem der Terraform-Zustand gespeichert ist:gcloud storage rm --recursive "gs://${GCS_BUCKET}"