Utilizza vLLM su GKE per eseguire l'inferenza con DeepSeek-V3.2-Speciale

Questo tutorial mostra come eseguire il deployment ed erogare un modello linguistico DeepSeek-V3.2-Speciale utilizzando il framework vLLM. Esegui il deployment di questo modello su un cluster Google Kubernetes Engine (GKE) Autopilot e utilizzi una singola macchina virtuale (VM) A4 con otto GPU B200.

Questo tutorial presuppone che tu abbia esaminato il modello linguistico DeepSeek-V3.2-Speciale e verificato che le sue funzionalità soddisfino i requisiti del tuo caso d'uso.

Questo tutorial è rivolto a machine learning (ML) engineer, amministratori e operatori di piattaforme e specialisti di dati e AI interessati a utilizzare le funzionalità di orchestrazione dei container Kubernetes per gestire i carichi di lavoro di inferenza.

Obiettivi

  1. Accedi a DeepSeek-V3.2-Speciale utilizzando Hugging Face.

  2. Prepara l'ambiente.

  3. Crea un cluster GKE in modalità Autopilot.

  4. Crea un secret di Kubernetes per le credenziali di Hugging Face.

  5. Esegui il deployment di un container vLLM nel cluster GKE.

  6. Interagisci con DeepSeek-V3.2-Speciale utilizzando curl.

  7. Libera spazio.

Costi

Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.

Prima di iniziare

  1. Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il Google Cloud progetto che stai creando.

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  6. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  7. Abilita l'API richiesta:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable container.googleapis.com
  8. Installa Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il Google Cloud progetto che stai creando.

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  12. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  13. Abilita l'API richiesta:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable container.googleapis.com
  14. Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio, myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.
  15. Accedi al tuo account Hugging Face o creane uno.

Accedi a DeepSeek-V3.2-Speciale utilizzando Hugging Face

Per utilizzare Hugging Face per accedere al modello DeepSeek-V3.2-Speciale:

  1. Accedi a Hugging Face.
  2. Crea un token di accesso read di Hugging Face.
  3. Copia e salva il valore del token di accesso read. Lo utilizzerai più avanti in questo tutorial.

Prepara l'ambiente

Per preparare l'ambiente, imposta le seguenti variabili:

gcloud config set project PROJECT_ID
gcloud config set billing/quota_project PROJECT_ID
export PROJECT_ID=$(gcloud config get project)
export RESERVATION_URL=RESERVATION_URL
export REGION=REGION
export CLUSTER_NAME=CLUSTER_NAME
export HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN
export NETWORK=NETWORK_NAME
export SUBNETWORK=SUBNETWORK_NAME

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del Google Cloud progetto in cui vuoi creare il cluster GKE.

  • RESERVATION_URL: l'URL della prenotazione che vuoi utilizzare per creare il cluster GKE. In base al progetto in cui esiste la prenotazione, specifica uno dei seguenti valori:

    • La prenotazione esiste nel tuo progetto: RESERVATION_NAME

    • La prenotazione esiste in un progetto diverso e il tuo progetto può utilizzare la prenotazione: projects/RESERVATION_PROJECT_ID/reservations/RESERVATION_NAME

  • REGION: la regione in cui vuoi creare il cluster GKE. Puoi creare il cluster solo nella regione in cui esiste la prenotazione.

  • CLUSTER_NAME: il nome del cluster GKE da creare.

  • HUGGING_FACE_TOKEN: il token di accesso a Hugging Face che hai creato nella sezione precedente.

  • NETWORK_NAME: la rete utilizzata dal cluster GKE. Specifica uno dei seguenti valori:

    • Se hai creato una rete personalizzata, specifica il nome della rete.

    • In caso contrario, specifica default.

  • SUBNETWORK_NAME: la subnet utilizzata dal cluster GKE. Specifica uno dei seguenti valori:

    • Se hai creato una subnet personalizzata, specifica il nome della subnet. Puoi specificare solo una subnet che si trova nella stessa regione della prenotazione.

    • In caso contrario, specifica default.

Creare e configurare Google Cloud le risorse

Segui queste istruzioni in questa sezione per creare le risorse richieste.

Crea un cluster GKE in modalità Autopilot

Per creare un cluster GKE in modalità Autopilot, esegui questo comando:

gcloud container clusters create-auto $CLUSTER_NAME \
    --project=$PROJECT_ID \
    --region=$REGION \
    --release-channel=rapid \
    --network=$NETWORK \
    --subnetwork=$SUBNETWORK

La creazione del cluster GKE potrebbe richiedere del tempo. Per verificare che Google Cloud la creazione del cluster sia stata completata, vai a Cluster Kubernetes nella Google Cloud console.

Crea un secret di Kubernetes per archiviare le credenziali di Hugging Face

Per creare un secret di Kubernetes per archiviare le credenziali di Hugging Face:

  1. Configura kubectl per comunicare con il cluster GKE:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --location=$REGION
    
  2. Crea un secret di Kubernetes che contenga il read access token di Hugging Face che hai creato in un passaggio precedente:

    kubectl create secret generic hf-secret \
        --from-literal=hf_token=${HUGGING_FACE_TOKEN} \
        --dry-run=client -o yaml | kubectl apply -f -
    

Esegui il deployment di un container vLLM nel cluster GKE

Per eseguire il deployment del container vLLM per erogare il modello deepseek-ai/DeepSeek-V3.2-Speciale:

  1. Crea un file vllm-deepseek3-2.yaml con il deployment vLLM scelto:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deepseek3-2-deploy
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: deepseek
      template:
        metadata:
          labels:
            app: deepseek
            ai.gke.io/model: deepseek-v3-2
            ai.gke.io/inference-server: vllm
            examples.ai.gke.io/source: user-guide
        spec:
          containers:
          - name: vllm-inference
            image: us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:model-garden.pytorch-vllm-serve-release_20251126.00_p0
            resources:
              requests:
                cpu: "10"
                memory: "1000Gi"
                ephemeral-storage: "1Ti"
                nvidia.com/gpu: "8"
              limits:
                cpu: "10"
                memory: "1000Gi"
                ephemeral-storage: "1Ti"
                nvidia.com/gpu: "8"
            command: ["python3", "-m", "vllm.entrypoints.openai.api_server"]
            args:
            - --model=$(MODEL_ID)
            - --tensor-parallel-size=8
            - --host=0.0.0.0
            - --port=8000
            - --max-model-len=131072
            - --max-num-seqs=16
            - --enable-chunked-prefill
            - --gpu-memory-utilization=0.90
            - --enforce-eager
            - --trust-remote-code
            env:
            - name: MODEL_ID
              value: deepseek-ai/DeepSeek-V3.2-Speciale
            - name: HUGGING_FACE_HUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: hf-secret
                  key: hf_token
            volumeMounts:
            - mountPath: /dev/shm
              name: dshm
            livenessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 1800
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /health
                port: 8000
              initialDelaySeconds: 1800
              periodSeconds: 5
          volumes:
          - name: dshm
            emptyDir:
              medium: Memory
          nodeSelector:
            cloud.google.com/gke-accelerator: nvidia-b200
            cloud.google.com/reservation-name: $RESERVATION_URL
            cloud.google.com/reservation-affinity: "specific"
            cloud.google.com/gke-gpu-driver-version: latest
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: deepseek-service
    spec:
      selector:
        app: deepseek
      type: ClusterIP
      ports:
        - protocol: TCP
          port: 8000
          targetPort: 8000
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: deepseek-monitoring
    spec:
      selector:
        matchLabels:
          app: deepseek
      endpoints:
      - port: 8000
        path: /metrics
        interval: 30s
    
  2. Applica il file vllm-deepseek3-2.yaml al cluster GKE:

      envsubst < vllm-deepseek3-2.yaml | kubectl apply -f -
    

    Durante il processo di deployment, il container deve scaricare il modello deepseek-ai/DeepSeek-V3.2-Speciale da Hugging Face. Per questo motivo, il completamento del deployment del container potrebbe richiedere fino a 30 minuti.

  3. Per visualizzare lo stato di completamento, esegui questo comando:

      kubectl wait \
          --for=condition=Available \
          --timeout=1800s deployment/deepseek3-2-deploy
    

    Il flag --timeout=1800s consente al comando di monitorare il deployment per un massimo di 30 minuti.

Interagisci con DeepSeek-V3.2-Speciale utilizzando curl

Per verificare il modello DeepSeek-V3.2-Speciale di cui hai eseguito il deployment:

  1. Configura il port forwarding a DeepSeek-V3.2-Speciale:

    kubectl port-forward service/deepseek-service 8000:8000
    
  2. Apri una nuova finestra del terminale. Puoi quindi chattare con il modello utilizzando curl:

    time curl http://127.0.0.1:8000/v1/completions \
       -X POST \
       -H "Content-Type: application/json" \
       -d '{
         "model": "deepseek-ai/DeepSeek-V3.2-Speciale",
         "prompt": "<|im_start|>user\nExplain the ReAct (Reasoning + Acting) pattern in Agentic AI. Provide a concise Python pseudocode example showing the loop. Keep the explanation under 300 words.<|im_end|>\n<|im_start|>assistant\n",
         "max_tokens": 1024,
         "temperature": 0.7,
         "stream": false,
         "stop": ["<|im_end|>"]
       }'
    
  3. L'output visualizzato è simile al seguente:

    {
    "id": "cmpl-be345f0499e949ed8500e533be2cfe3f",
    "object": "text_completion",
    "created": 1764803171,
    "model": "deepseek-ai/DeepSeek-V3.2-Speciale",
    "choices": [
      {
        "index": 0,
        "text": "The ReAct pattern integrates reasoning (thoughts) and actions (tool calls) within an agentic loop... [TRUNCATED FOR BREVITY] ...ReAct improves transparency and reliability by explicit reasoning steps.",
        "logprobs": null,
        "finish_reason": "stop",
        "stop_reason": "<|im_end|>",
        "token_ids": null,
        "prompt_logprobs": null,
        "prompt_token_ids": null
      }
    ],
    "service_tier": null,
    "system_fingerprint": null,
    "usage": {
      "prompt_tokens": 57,
      "total_tokens": 317,
      "completion_tokens": 260,
      "prompt_tokens_details": null
    },
    "kv_transfer_params": null
    }
    

Osserva il rendimento del modello

Per osservare il rendimento del modello, puoi utilizzare l'integrazione della dashboard vLLM in Cloud Monitoring. Puoi utilizzare questa dashboard per visualizzare metriche sul rendimento critiche come la velocità effettiva dei token, la latenza delle richieste e le percentuali di errore.

Per informazioni sull'utilizzo di Google Cloud Managed Service per Prometheus per raccogliere metriche dal modello, consulta le vLLM di vLLM nella documentazione di Cloud Monitoring.

Libera spazio

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Elimina un Google Cloud progetto:

gcloud projects delete PROJECT_ID

Elimina le risorse

  1. Per eliminare il deployment e il servizio nel file vllm-deepseek3-2.yaml e il secret di Kubernetes dal cluster GKE, esegui questo comando:

    kubectl delete -f vllm-deepseek3-2.yaml
    kubectl delete secret hf-secret
    
  2. Per eliminare il cluster GKE, esegui questo comando:

    gcloud container clusters delete $CLUSTER_NAME \
            --region=$REGION
    

Passaggi successivi