Questo tutorial mostra come eseguire il deployment e l'erogazione di Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8), un modello con ottimizzazione delle istruzioni da 405 miliardi di parametri quantizzato in FP8, su Google Kubernetes Engine (GKE) su Google Cloud. Il deployment utilizza Cluster Toolkit, due istanze di macchine virtuali (VM) A4 (a4-highgpu-8g) con un totale di 16 GPU NVIDIA B200, NVIDIA Dynamo e il framework di distribuzione SGLang con disaggregazione prefill-decode (DP) su un singolo host.
Nella configurazione del deployment descritta in questo tutorial, utilizzi Cluster Toolkit per eseguire il provisioning di un cluster GKE in modalità Standard. Il cluster contiene due nodi a4-highgpu-8g connessi tramite rete GPUDirect accesso diretto alla memoria da remoto (RDMA). Poi installi
KAI Scheduler e la piattaforma NVIDIA Dynamo con il gang scheduling di Grove.
Infine, esegui il deployment di una risorsa personalizzata DynamoGraphDeployment che separa
pre-riempimento e decodifica su due worker a host singolo con otto GPU con parallelismo
dei tensori e una cache KV FP8.
Obiettivi
- Installa Cluster Toolkit ed esegui il provisioning di un cluster GKE A4 a due nodi in modalità Standard.
- Installa KAI Scheduler e la piattaforma NVIDIA Dynamo con lo scheduling di gruppo Grove sul tuo cluster.
- Esegui il deployment di un server di inferenza SGLang disaggregato DP con un worker di pre-compilazione A4 single-host e un worker di decodifica A4 single-host.
- Invia una richiesta di completamento della chat al router di frontend Dynamo.
- Esegui un workload di benchmark di gestione.
- Esegui la pulizia delle risorse di cui hai eseguito il deployment.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili diGoogle Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
Prima di iniziare
Configura l'ambiente per il tutorial:
- Installa e inizializza Google Cloud CLI e installa
kubectle Helm (versione 3.10 o successive). Se utilizzi Cloud Shell, questi strumenti sono preinstallati. - Se esegui questo tutorial da una workstation Linux o macOS anziché da Cloud Shell, installa le dipendenze di Cluster Toolkit richieste, come Terraform e Git.
Abilita l'API Kubernetes Engine, l'API Compute Engine, l'API Cloud Storage, l'API Identity and Access Management, l'API Cloud Resource Manager e l'API Service Usage nel tuo progetto Google Cloud :
Ottieni un token di accesso a Hugging Face
Per utilizzare questo tutorial, devi disporre di un token di accesso a Hugging Face. Puoi registrarti per un account senza costi su Hugging Face. Dopo aver creato un account, genera un token di accesso:
- Nella pagina Welcome to Hugging Face, fai clic sull'avatar del tuo account e seleziona Token di accesso.
- Nella pagina Token di accesso, fai clic su Crea nuovo token.
- Seleziona il tipo di token Lettura e inserisci un nome per il token.
- Viene visualizzato il token di accesso. Salva il token in un luogo sicuro.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
- Amministratore Kubernetes Engine (
roles/container.admin) - Compute Admin (
roles/compute.admin) - Storage Admin (
roles/storage.admin) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin) - Amministratore Service Account (
roles/iam.serviceAccountAdmin) - Utente Service Account (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Imposta le variabili di ambiente
Esporta le variabili di ambiente che utilizzi in questo tutorial:
Sostituisci quanto segue:
YOUR_PROJECT_ID: l'ID del tuo progetto Google Cloud.YOUR_REGION: la regione in cui si trova la tua capacità A4 e in cui vuoi eseguire il deployment del cluster, ad esempious-central1.YOUR_ZONE: la zona in cui si trova la tua capacità A4, ad esempious-central1-b.YOUR_CLUSTER_NAME: il nome del tuo cluster GKE e del deployment di Cluster Toolkit. Utilizza un nome di massimo 20 caratteri in modo che l'ID account del service account del pool di nodi generato (YOUR_CLUSTER_NAME-gke-np-sa) rimanga entro il limite di 30 caratteri di Identity and Access Management (IAM).YOUR_RESERVATION_NAME: il nome della prenotazione A4.YOUR_BUCKET_NAME: un nome univoco a livello globale per il bucket Cloud Storage che archivia lo stato Terraform per Cluster Toolkit.YOUR_HF_TOKEN: il tuo token di accesso a Hugging Face.
Crea il cluster GKE
Scarica Cluster Toolkit ed esegui il provisioning di un cluster GKE in modalità Standard con due nodi a4-highgpu-8g, networking GPUDirect RDMA e supporto DRA:
Accedi a Google Cloud CLI e genera le Credenziali predefinite dell'applicazione per Terraform:
Scarica ed estrai il bundle Cluster Toolkit predefinito per la versione specificata in
CLUSTER_TOOLKIT_VERSION(v1.104.0):Se esegui questo comando su macOS o su una workstation
arm64, impostaOS="mac"oARCH="arm64"in modo che corrisponda alla tua piattaforma.Per archiviare lo stato di Terraform per il deployment di Cluster Toolkit, crea un bucket Cloud Storage con il controllo delle versioni degli oggetti abilitato:
Crea il file di configurazione del deployment
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlper due nodia4-highgpu-8g:Per impostazione predefinita, il file di deployment è configurato per utilizzare una prenotazione specifica. Se non hai una prenotazione specifica, prima di eseguire il deployment del cluster, puoi aggiornare
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlin modo che utilizzi un'opzione di consumo alternativa, ad esempio VM spot o Flex-start VM. Per istruzioni sulla configurazione, consulta Opzioni di consumo di GKE.Passa alla directory
cluster-toolkit, esegui il deployment del cluster GKE utilizzando il comandogcluster deploy, quindi torna alla directory di lavoro:La creazione del cluster richiede circa 20-30 minuti. Se esegui
./gcluster deploysenza il flag--auto-approve, per applicare le modifiche proposte, inserisciaquando richiesto.Configura le credenziali
kubectlper comunicare con il tuo cluster:
Installa KAI Scheduler e NVIDIA Dynamo
Prepara il cluster creando un secret di Hugging Face e installando lo scheduler KAI e la piattaforma NVIDIA Dynamo con lo scheduling di gruppo Grove:
Crea un secret di Kubernetes denominato
hf-secretper archiviare il tuo token di accesso Hugging Face:Scarica il grafico Helm della piattaforma NVIDIA Dynamo (
v1.5.0), installa lo scheduler KAI e installa la piattaforma Dynamo con Grove abilitato:
Esegui il deployment del server SGLang disaggregato su un singolo host
Il manifest del workload (llama3.1-405b-singlehost-a4.yaml) definisce un ResourceClaimTemplate di Kubernetes (all-mrdma), che alloca i dispositivi RDMA multi-NIC del nodo (mrdma.google.com) tramite DRA, e un DynamoGraphDeployment di NVIDIA Dynamo (llama3-405b-a4-disagg) con lo scheduling di gruppo di Grove abilitato. Il deployment è costituito da quanto segue:
- Frontend (
Frontend): esegue una replica del router che accetta le richieste dei client, rileva i worker di precompilazione e decodifica registrati e coordina il routing delle richieste disaggregate. - Worker di precompilazione (
Prefill): esegue un worker single-host su un nodoa4-highgpu-8gcon otto GPU NVIDIA B200. All'avvio, il pod recupera l'ambiente NCCL/gIB, scarica il checkpointnvidia/Llama-3.1-405B-Instruct-FP8dall'hub Hugging Face all'SSD NVMe locale del nodo e avviapython3 -m dynamo.sglangin--disaggregation-mode prefillcon i seguenti flag:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- Worker di decodifica (
Decode): esegue un worker single-host sul secondo nodoa4-highgpu-8gcon otto GPU NVIDIA B200. All'avvio, il pod memorizza nella cache i pesi del modello sull'SSD NVMe locale del nodo e avviapython3 -m dynamo.sglangin--disaggregation-mode decodecon i seguenti flag:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
Esegui il deployment e il monitoraggio del server di inferenza disaggregato:
Scarica il manifest del workload
llama3.1-405b-singlehost-a4.yaml:In alternativa, crea un file denominato
llama3.1-405b-singlehost-a4.yamlcon i seguenti contenuti:Applica il manifest del workload al cluster:
Per monitorare il download dei pesi e l'inizializzazione del server, elenca i pod nel tuo cluster e trasmetti in streaming i log dei pod di precompilazione e decodifica:
Sostituisci
YOUR_POD_NAMEcon il nome del pod di precompilazione o di decodifica dall'outputkubectl get pods.Alla prima esecuzione, sono necessari circa 10-20 minuti per scaricare i pesi del modello 405B FP8 e inizializzare i server SGLang. Prima di inviare qualsiasi richiesta, attendi che i pod di frontend, precompilazione e decodifica mostrino
1/1nella colonnaREADYdikubectl get pods: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
Invia richieste di inferenza
Invia una richiesta di completamento della chat al servizio Llama 3.1 405B di cui è stato eseguito il deployment:
Inoltra la porta locale
8000al serviziollama3-405b-a4-disagg-frontend:Lascia il port forwarding in esecuzione in questa sessione del terminale o esegui il comando in background.
In una seconda sessione del terminale, invia una richiesta di completamento della chat all'endpoint
/v1/chat/completions:
Esegui un workload di benchmark
Esegui il benchmark del server Llama 3.1 405B di cui è stato eseguito il deployment dal pod di frontend Dynamo utilizzando sglang.bench_serving. Configura il benchmark per 1024 token di input, 1024 token di output (1k/1k), 2048 prompt e una contemporaneità massima di 512:
Al termine del benchmark, cerca un output contenente metriche come le seguenti:
Output token throughputTotal token throughputTTFTTPOT
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi aggiuntivi per le risorse utilizzate in questo tutorial, elimina i workload Kubernetes, il cluster GKE e il bucket Cloud Storage:
Elimina le risorse DynamoGraphDeployment e ResourceClaimTemplate:
Disinstalla le release Helm della piattaforma NVIDIA Dynamo e di KAI Scheduler:
Elimina il secret Kubernetes di Hugging Face:
Dalla directory
cluster-toolkit, elimina il cluster GKE e l'infrastruttura associata utilizzando il comandogcluster destroy:Per eliminare il bucket Cloud Storage che archivia lo stato di Terraform, utilizza il comando
gcloud storage rm:gcloud storage rm --recursive "gs://${GCS_BUCKET}"
Passaggi successivi
- Scopri di più su NVIDIA Dynamo.
- Scopri di più su SGLang.
- Scopri di più sulle VM A4 con GPU NVIDIA B200.
- Scopri di più su Cluster Toolkit.
- Scopri di più sulla gestione dei cluster GKE ottimizzati per l'AI.