Gestisci un modello DeepSeek-V3 utilizzando il deployment di GPU multi-host

Panoramica

Vertex AI supporta il deployment di GPU multi-host per l'hosting di modelli che superano la capacità di memoria di un singolo nodo GPU, come DeepSeek-V3, DeepSeek-R1 e Meta LLama3.1 405 (versione non quantizzata).

Questa guida descrive come pubblicare un modello DeepSeek-V3 utilizzando unità di elaborazione grafica (GPU) multihost su Vertex AI con vLLM. La configurazione per gli altri modelli è simile. Per saperne di più, consulta Erogazione di vLLM per modelli linguistici testuali e multimodali.

Prima di iniziare, assicurati di avere familiarità con quanto segue:

Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Container

Per supportare i deployment multi-host, questa guida utilizza un'immagine container vLLM predefinita con l'integrazione di Ray da Model Garden. Ray consente l'elaborazione distribuita necessaria per eseguire i modelli su più nodi GPU. Questo contenitore supporta anche la gestione delle richieste di streaming utilizzando l'API Chat Completions.

Se vuoi, puoi creare la tua immagine multimodale vLLM. Tieni presente che questa immagine container personalizzata deve essere compatibile con Vertex AI.

Prima di iniziare

Prima di iniziare il deployment del modello, completa i prerequisiti elencati in questa sezione.

Configurare un progetto Google Cloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  9. Richiedi una quota di GPU

    Per il deployment di DeepSeek-V3, hai bisogno di due VM a3-highgpu-8g con otto GPU H100 ciascuna, per un totale di 16 GPU H100. È probabile che tu debba richiedere un aumento della quota di GPU H100, poiché il valore predefinito è inferiore a 16.

    1. Per visualizzare la quota di GPU H100, vai alla pagina Quote e limiti di sistema della console Google Cloud .

      Vai a Quote e Limiti di sistema

    2. Richiedi un aggiustamento delle quote.

    Carica il modello

    1. Per caricare il modello come risorsa Model in Vertex AI, esegui il comando gcloud ai models upload come segue:

      gcloud ai models upload \
          --region=LOCATION \
          --project=PROJECT_ID \
          --display-name=MODEL_DISPLAY_NAME \
          --container-image-uri=us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:20250130_0916_RC01 \
          --container-args='^;^/vllm-workspace/ray_launcher.sh;python;-m;vllm.entrypoints.api_server;--host=0.0.0.0;--port=8080;--model=deepseek-ai/DeepSeek-V3;--tensor-parallel-size=16;--pipeline-parallel-size=1;--gpu-memory-utilization=0.9;--trust-remote-code;--max-model-len=32768' \
          --container-deployment-timeout-seconds=4500 \
          --container-ports=8080 \
          --container-env-vars=MODEL_ID=deepseek-ai/DeepSeek-V3
      

      Effettua le seguenti sostituzioni:

      • LOCATION: la regione in cui utilizzi Vertex AI
      • PROJECT_ID: l'ID del tuo progetto Google Cloud
      • MODEL_DISPLAY_NAME: il nome visualizzato che vuoi per il modello

    Crea un endpoint di inferenza online dedicato

    Per supportare le richieste di completamento della chat, il container Model Garden richiede un endpoint dedicato. Gli endpoint dedicati sono in anteprima e non supportano Google Cloud CLI, quindi devi utilizzare l'API REST per creare l'endpoint.

    1. Per creare l'endpoint dedicato, esegui questo comando:

      PROJECT_ID=PROJECT_ID
      REGION=LOCATION
      ENDPOINT="${REGION}-aiplatform.googleapis.com"
      
      curl \
        -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/${REGION}/endpoints \
        -d '{
          "displayName": "ENDPOINT_DISPLAY_NAME",
          "dedicatedEndpointEnabled": true
          }'
      

      Effettua le seguenti sostituzioni:

      • ENDPOINT_DISPLAY_NAME: il nome visualizzato per l'endpoint

    Esegui il deployment del modello

    1. Recupera l'ID endpoint per l'endpoint di inferenza online eseguendo il comando gcloud ai endpoints list:

      ENDPOINT_ID=$(gcloud ai endpoints list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'ENDPOINT_DISPLAY_NAME' \
       --format="value(name)")
      
    2. Recupera l'ID modello per il tuo modello eseguendo il comando gcloud ai models list:

      MODEL_ID=$(gcloud ai models list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'MODEL_DISPLAY_NAME' \
       --format="value(name)")
      
    3. Esegui il deployment del modello sull'endpoint eseguendo il comando gcloud ai deploy-model:

      gcloud alpha ai endpoints deploy-model $ENDPOINT_ID \
       --project=PROJECT_ID \
       --region=LOCATION \
       --model=$MODEL_ID \
       --display-name="DEPLOYED_MODEL_NAME" \
       --machine-type=a3-highgpu-8g \
       --traffic-split=0=100 \
       --accelerator=type=nvidia-h100-80gb,count=8 \
       --multihost-gpu-node-count=2
      

      Sostituisci DEPLOYED_MODEL_NAME con un nome per il modello di cui è stato eseguito il deployment. Può essere uguale al nome visualizzato del modello (MODEL_DISPLAY_NAME).

      Il deployment di modelli di grandi dimensioni come DeepSeek-V3 può richiedere più tempo del timeout di deployment predefinito. Se il comando deploy-model scade, il processo di deployment continua a essere eseguito in background.

      Il comando deploy-model restituisce un ID operazione che può essere utilizzato per verificare quando l'operazione è terminata. Puoi eseguire il polling dello stato dell'operazione finché la risposta non include "done": true. Utilizza il seguente comando per controllare lo stato:

      gcloud ai operations describe \
      --region=LOCATION \
      OPERATION_ID
      

      Sostituisci OPERATION_ID con l'ID operazione restituito dal comando precedente.

    Ottenere inferenze online dal modello di cui è stato eseguito il deployment

    Questa sezione descrive come inviare una richiesta di inferenza online all'endpoint pubblico dedicato in cui è implementato il modello DeepSeek-V3.

    1. Recupera il numero di progetto eseguendo il comando gcloud projects describe:

      PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      
    2. Invia una richiesta di previsione non elaborata:

      curl \
      -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      https://${ENDPOINT_ID}.${REGION}-${PROJECT_NUMBER}.prediction.vertexai.goog/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/endpoints/${ENDPOINT_ID}:rawPredict \
      -d '{
         "prompt": "Write a short story about a robot.",
         "stream": false,
         "max_tokens": 50,
         "temperature": 0.7
         }'
      
    3. Invia una richiesta di completamento della chat:

      curl \
      -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      https://${ENDPOINT_ID}.${REGION}-${PROJECT_NUMBER}.prediction.vertexai.goog/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/endpoints/${ENDPOINT_ID}/chat/completions \
      -d '{"stream":false, "messages":[{"role": "user", "content": "Summer travel plan to Paris"}], "max_tokens": 40,"temperature":0.4,"top_k":10,"top_p":0.95, "n":1}'
      

      Per attivare lo streaming, modifica il valore di "stream" da false a true.

    Esegui la pulizia

    Per evitare di incorrere in ulteriori costi di Vertex AI, elimina le risorse Google Cloud che hai creato durante questo tutorial:

    1. Per annullare il deployment del modello dall'endpoint ed eliminare l'endpoint, esegui questi comandi:

      ENDPOINT_ID=$(gcloud ai endpoints list \
         --region=LOCATION \
         --filter=display_name=ENDPOINT_DISPLAY_NAME \
         --format="value(name)")
      
      DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \
         --region=LOCATION \
         --format="value(deployedModels.id)")
      
      gcloud ai endpoints undeploy-model $ENDPOINT_ID \
        --region=LOCATION \
        --deployed-model-id=$DEPLOYED_MODEL_ID
      
      gcloud ai endpoints delete $ENDPOINT_ID \
         --region=LOCATION \
         --quiet
      
    2. Per eliminare il modello, esegui questi comandi:

      MODEL_ID=$(gcloud ai models list \
         --region=LOCATION \
         --filter=display_name=DEPLOYED_MODEL_NAME \
         --format="value(name)")
      
      gcloud ai models delete $MODEL_ID \
         --region=LOCATION \
         --quiet
      

    Passaggi successivi