Entregar un modelo de DeepSeek-V3 mediante una implementación de GPU de varios hosts

Descripción general

Vertex AI admite la implementación de GPU en varios hosts para la entrega de modelos que superan la capacidad de memoria de un solo nodo de GPU, como DeepSeek-V3, DeepSeek-R1 y Meta LLama3.1 405 (versión no cuantificada).

En esta guía, se describe cómo entregar un modelo DeepSeek-V3 con unidades de procesamiento gráfico (GPU) de varios hosts en Vertex AI con vLLM. La configuración para otros modelos es similar. Para obtener más información, consulta Entrega de vLLM para modelos de lenguaje de texto y multimodales.

Antes de comenzar, asegúrate de conocer la siguiente información:

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Contenedores

Para admitir implementaciones de varios hosts, en esta guía, se usa una imagen de contenedor de vLLM compilada previamente con integración de Ray de Model Garden. Ray permite el procesamiento distribuido necesario para ejecutar modelos en varios nodos de GPU. Este contenedor también admite la publicación de solicitudes de transmisión con la API de Chat Completions.

Si lo deseas, puedes crear tu propia imagen de vLLM de varios nodos. Ten en cuenta que esta imagen de contenedor personalizada debe ser compatible con Vertex AI.

Antes de comenzar

Antes de comenzar la implementación del modelo, completa los requisitos previos que se indican en esta sección.

Configura un Google Cloud proyecto

  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. Solicita una cuota de GPU

    Para implementar DeepSeek-V3, necesitas dos VMs a3-highgpu-8g con ocho GPU H100 cada una, lo que da un total de 16 GPU H100. Es probable que debas solicitar un aumento de la cuota de GPU H100, ya que el valor predeterminado es inferior a 16.

    1. Para ver la cuota de GPU H100, ve a la página Cuotas y límites del sistema de la consola de Google Cloud .

      Ir a Cuotas y límites del sistema

    2. Solicita un ajuste de cuota.

    Sube el modelo

    1. Para subir tu modelo como un recurso Model a Vertex AI, ejecuta el comando gcloud ai models upload de la siguiente manera:

      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
      

      Realiza los siguientes reemplazos:

      • LOCATION: la región en la que usas Vertex AI
      • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
      • MODEL_DISPLAY_NAME: el nombre de visualización que desea para su modelo

    Crea un extremo de inferencia en línea dedicado

    Para admitir solicitudes de finalización de chat, el contenedor de Model Garden requiere un extremo dedicado. Los extremos dedicados están en versión preliminar y no admiten Google Cloud CLI, por lo que debes usar la API de REST para crear el extremo.

    1. Para crear el extremo dedicado, ejecuta el siguiente 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
          }'
      

      Realiza los siguientes reemplazos:

      • ENDPOINT_DISPLAY_NAME: El nombre visible de tu extremo

    Implementa el modelo

    1. Ejecuta el comando gcloud ai endpoints list para obtener el ID del extremo de inferencia en línea:

      ENDPOINT_ID=$(gcloud ai endpoints list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'ENDPOINT_DISPLAY_NAME' \
       --format="value(name)")
      
    2. Ejecuta el comando gcloud ai models list para obtener el ID de tu modelo:

      MODEL_ID=$(gcloud ai models list \
       --project=PROJECT_ID \
       --region=LOCATION \
       --filter=display_name~'MODEL_DISPLAY_NAME' \
       --format="value(name)")
      
    3. Para implementar el modelo en el extremo, ejecuta el 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
      

      Reemplaza DEPLOYED_MODEL_NAME por un nombre para el modelo implementado. Puede ser el mismo que el nombre visible del modelo (MODEL_DISPLAY_NAME).

      La implementación de modelos grandes, como DeepSeek-V3, puede tardar más que el tiempo de espera predeterminado de implementación. Si se agota el tiempo de espera del comando deploy-model, el proceso de implementación seguirá ejecutándose en segundo plano.

      El comando deploy-model devuelve un ID de operación que puede utilizarse para comprobar cuándo ha finalizado la operación. Puedes sondear el estado de la operación hasta que la respuesta incluya "done": true. Utiliza el siguiente comando para sondear el estado:

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

      Sustituye OPERATION_ID por el ID de operación que mostró el comando anterior.

    Obtén inferencias en línea del modelo implementado

    En esta sección, se describe cómo enviar una solicitud de inferencia en línea al extremo público dedicado en el que se implementa el modelo DeepSeek-V3.

    1. Ejecuta el comando gcloud projects describe para obtener el número de proyecto:

      PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      
    2. Envía una solicitud de predicción sin procesar:

      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. Envía una solicitud de finalización de 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}'
      

      Para habilitar la transmisión, cambia el valor de "stream" de false a true.

    Limpia

    Para evitar incurrir en más cargos de Vertex AI, borra los Google Cloud recursos que creaste durante este instructivo:

    1. Para anular la implementación del modelo en el extremo y borrarlo, ejecuta los siguientes comandos:

      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. Para borrar tu modelo, ejecuta los siguientes comandos:

      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
      

    ¿Qué sigue?