Entrega un modelo DeepSeek-V3 con la implementación de GPU de varios hosts

Descripción general

Vertex AI admite la implementación de GPU en varios hosts para entregar modelos que superan la capacidad de memoria de un solo nodo de GPU, como DeepSeek-V3, DeepSeek-R1 y Meta LLama 3.1 405B (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 proyecto de Google Cloud

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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 role (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 role (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. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

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:20250312_0916_RC01 \
        --container-args='^;^/vllm-workspace/ray_launcher.sh;python;-m;vllm.entrypoints.api_server;--host=0.0.0.0;--port=7080;--model=deepseek-ai/DeepSeek-V3;--tensor-parallel-size=8;--pipeline-parallel-size=2;--gpu-memory-utilization=0.82;--max-model-len=163840;--max-num-seqs=64;--enable-chunked-prefill;--kv-cache-dtype=auto;--trust-remote-code;--disable-log-requests' \
        --container-deployment-timeout-seconds=7200 \
        --container-ports=7080 \
        --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. Para obtener el ID del extremo de inferencia en línea, ejecuta el 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. 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 de implementación predeterminado. 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.

Realiza una limpieza

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?