Questo tutorial mostra come eseguire il deployment e l'addestramento di DeepSeek-R1 (deepseek-ai/DeepSeek-R1), un modello Mixture of Experts con 671 miliardi di parametri e 37 miliardi di parametri attivi, su Google Kubernetes Engine (GKE) suGoogle Cloud. Il deployment utilizza Cluster Toolkit, due istanze di macchine virtuali (VM) A4 (a4-highgpu-8g) multi-host con un totale di 16 GPU NVIDIA B200 e il framework di distribuzione vLLM.
Nella configurazione del deployment descritta in questo tutorial, utilizzi Cluster Toolkit per eseguire il provisioning di un cluster GKE in modalità Standard. Il cluster ha due nodi a4-highgpu-8g connessi tramite networking GPUDirect accesso diretto alla memoria da remoto (RDMA). Quindi, esegui lo stage dei pesi del modello in Cloud Storage e utilizzi l'API JobSet di Kubernetes e Ray per gestire il modello su tutte le 16 GPU NVIDIA B200 con parallelismo dei tensori, parallelismo degli esperti e una cache KV FP8.
Obiettivi
- Installa Cluster Toolkit ed esegui il provisioning di un cluster GKE A4 multi-host in modalità Standard.
- Esegui lo stage dei pesi del modello DeepSeek-R1 in un bucket Cloud Storage.
- Esegui il deployment di un server di inferenza vLLM multi-host con JobSet e Ray su due nodi A4, con un totale di 16 GPU NVIDIA B200.
- Invia una richiesta di completamento della chat al server vLLM.
- 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
kubectl. Se utilizzi Cloud Shell, entrambi gli 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 Artifact Registry 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
Configura l'autenticazione e le variabili di ambiente per il tutorial:
Configura l'autenticazione:
Esporta le variabili di ambiente che utilizzi in questo tutorial:
Sostituisci quanto segue:
YOUR_PROJECT_ID: l'ID del tuo progettoGoogle Cloud .YOUR_REGION: la regione di computing in cui si trova la tua capacità A4 e in cui vuoi eseguire il deployment del cluster, ad esempious-central1.YOUR_ZONE: la zona di computing 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 o il percorso del blocco di prenotazione esteso nel formatoRESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME.YOUR_HF_TOKEN: il tuo token di accesso a Hugging Face.YOUR_GCS_BUCKET: un nome univoco a livello globale per il bucket Cloud Storage in cui eseguire l'addestramento dei pesi del modello. Lo script imposta ancheTERRAFORM_BUCKETsuYOUR_GCS_BUCKET-tf-stateper archiviare lo stato di Terraform per Cluster Toolkit.
Lo script imposta anche
CLUSTER_TOOLKIT_VERSIONsuv1.104.0, che specifica la versione di Cluster Toolkit da installare. Cluster Toolkit versionev1.104.0e successive include opzioni integrate per il consumo della capacità perexamples/gke-a4/gke-a4-deployment.yaml. Nelle versioni precedenti allav1.104.0, devi aggiungere queste opzioni di capacità manualmente.
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 il controller JobSet:
Scarica ed estrai il bundle Cluster Toolkit predefinito per la versione specificata in
CLUSTER_TOOLKIT_VERSION(v1.104.0), cambia la directory di lavoro incluster-toolkite verifica la versione binaria:Facoltativamente, visualizza i comandi e i flag disponibili in Cluster Toolkit:
Crea il bucket Cloud Storage che archivia lo stato di Terraform per il deployment di Cluster Toolkit:
Crea il file di configurazione del deployment
examples/gke-a4/gke-a4-deployment.yamlper due nodia4-highgpu-8g:Per impostazione predefinita, il progetto
examples/gke-a4/gke-a4.yamlè configurato per utilizzare una prenotazione specifica. Se non hai una prenotazione specifica, puoi modificareexamples/gke-a4/gke-a4.yamlprima di eseguire il deployment del cluster per utilizzare una delle seguenti opzioni di consumo:- Capacità spot: assicurati che il tuo progetto disponga di una quota preemptible sufficiente per GPU, dischi e CPU. Nella parte inferiore di
examples/gke-a4/gke-a4.yaml, commenta la sezione--- Option 1: Specific Reservation ---e rimuovi il commento dalla sezione--- Option 4: Spot ---. - VM Flex-Start: assicurati che il tuo progetto disponga di una quota preemptible sufficiente per GPU, dischi e CPU. Nella parte inferiore di
examples/gke-a4/gke-a4.yaml, commenta la sezione--- Option 1: Specific Reservation ---e rimuovi il commento dalla sezione--- Option 2: DWS Flex Start ---.
- Capacità spot: assicurati che il tuo progetto disponga di una quota preemptible sufficiente per GPU, dischi e CPU. Nella parte inferiore di
Esegui il deployment del cluster GKE utilizzando il comando
gcluster deploy:La creazione del cluster richiede circa 30-45 minuti. Se esegui
./gcluster deploysenza il flag--auto-approve, per applicare le modifiche proposte, inserisciaquando richiesto. Al termine del deployment, l'output termina con un messaggio simile al seguente:Apply complete! Resources: 80 added, 0 changed, 0 destroyed.Configura le credenziali
kubectlper comunicare con il tuo cluster:
Esegui lo stage dei pesi del modello in Cloud Storage
Scarica i pesi di DeepSeek-R1 sull'SSD locale di uno dei tuoi nodi A4 e trasferiscili in un bucket Cloud Storage per lo streaming rapido tra i nodi:
Scarica i file manifest di Kubernetes per il job di download del modello, il server di inferenza vLLM e i pod di benchmark:
Crea il bucket Cloud Storage con accesso uniforme a livello di bucket per archiviare i pesi del modello:
Concedi le autorizzazioni IAM sul bucket al account di servizio Kubernetes predefinito, al account di servizio Compute Engine predefinito e al account di servizio del pool di nodi del cluster (
${CLUSTER_NAME}-gke-np-sa):Le autorizzazioni IAM concesse dallo script precedente includono il ruolo Storage Legacy Bucket Reader (
roles/storage.legacyBucketReader), richiesto per--load-format runai_streamer.Crea un secret di Kubernetes denominato
hf-secretper archiviare il tuo token di accesso Hugging Face:Esamina il manifest
download_model.yamlo crea il file localmente se non l'hai scaricato in precedenza:Sostituisci il nome del tuo bucket Cloud Storage nel manifest
download_model.yamle avvia il job di download del modello:Attendi l'avvio del pod di download, quindi trasmetti in streaming i log del job:
Il download del modello nell'SSD NVMe locale del nodo e il caricamento dei pesi nel bucket Cloud Storage richiedono circa 30-40 minuti.
Una volta completato il job, verifica che tutti i 163 shard
.safetensorssiano presenti nel bucket Cloud Storage:Elimina il job di gestione temporanea completato:
Esegui il deployment del server vLLM multi-host
Il manifest del workload (deepseek_r1_server.yaml) definisce un servizio ClusterIP (vllm-r1-leader) e un JobSet Kubernetes (vllm-r1) che coordinano la distribuzione multi-host tra i due nodi a4-highgpu-8g:
- Leader (
leader): esegue una replica su un nodo A4 con otto GPU NVIDIA B200, genera l'ambiente NCCL/gIB (/usr/local/gib/scripts/set_nccl_env.sh), avvia il nodo head Ray sulla porta6379per un cluster a due nodi e avviavllm servesulla porta HTTP8080. Il server trasmette i pesi direttamente dags://$MODEL_BUCKET/DeepSeek-R1utilizzando--load-format runai_streamere carica il tokenizer dal volume Cloud Storage FUSE montato in/models/DeepSeek-R1. Funziona con--tensor-parallel-size 16,--pipeline-parallel-size 1,--distributed-executor-backend ray,--enable-expert-parallel,--kv-cache-dtype fp8_e4m3,--async-schedulinge grafici CUDA (FULL_AND_PIECEWISE). - Worker (
worker): esegue una replica headless sul secondo nodo A4 con otto GPU NVIDIA B200, configura NCCL/gIB e si unisce al cluster Ray del leader invllm-r1-leader:6379.
Esegui il deployment e monitora il server vLLM multi-host:
Esamina il manifest
deepseek_r1_server.yamlo crea il file localmente se non l'hai scaricato in precedenza:Per scalare questo deployment su più host, aggiorna i parametri in
deepseek_r1_server.yaml. Ad esempio, per scalare a quattro nodi A4, con un totale di 32 GPU NVIDIA B200, impostareplicas: 3inworkerdel job replicato e aggiorna gli argomenti del leader come segue:--ray_cluster_size=4--tensor-parallel-size=16--pipeline-parallel-size=2
Sostituisci il nome del tuo bucket Cloud Storage in
deepseek_r1_server.yamle applica il manifest al tuo cluster:Monitora i log dei pod leader e worker fino al completamento dell'avvio del server:
Poiché
kubectl logs -ftrasmette i log in primo piano, esegui il comando dei log del worker in una sessione del terminale separata se vuoi monitorare entrambi i pod contemporaneamente. Per interrompere lo streaming dei log in qualsiasi momento, premi Ctrl+C.Lo streaming iniziale dei pesi, il caricamento del modello e l'acquisizione del grafico CUDA richiedono circa 15-20 minuti. Prima di inviare richieste, attendi che i log del pod leader restituiscano i seguenti messaggi:
(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
Invia richieste di inferenza
Invia una richiesta di completamento della chat al server vLLM di cui è stato eseguito il deployment:
Inoltra la porta locale
8080al serviziovllm-r1-leaderin background:Invia una richiesta di completamento della chat all'endpoint
/v1/chat/completions:
Esegui workload di benchmark
Esegui il benchmark del server DeepSeek-R1 di cui è stato eseguito il deployment utilizzando vllm bench serve con una configurazione di 8192 token di input e 1024 token di output (8k/1k):
Esamina il manifest
deepseek_r1_8k_1k.yamlo crea il file localmente se non l'hai scaricato in precedenza:Il manifest specifica 8192 token di input, 1024 token di output, 1280 prompt e una concorrenza massima di 112.
Applica il manifest
deepseek_r1_8k_1k.yaml:Attendi l'avvio del pod
vllm-bench-8k-1k, quindi trasmetti in streaming i log di benchmark:Il completamento del benchmark richiede circa 15 minuti. 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 i bucket Cloud Storage:
Elimina i pod di benchmark, il JobSet e il Service del server vLLM, il job di download del modello e il secret di Hugging Face:
Elimina il bucket Cloud Storage in cui sono archiviati i pesi del modello di gestione temporanea:
Dalla directory
cluster-toolkit, elimina il cluster GKE e l'infrastruttura associata utilizzando il comandogcluster destroy:Elimina il bucket Cloud Storage in cui è archiviato lo stato di Terraform:
Passaggi successivi
- Scopri di più su vLLM.
- 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.