Diffuser un modèle DeepSeek-V3 à l'aide d'un déploiement de GPU multi-hôtes

Présentation

Gemini Enterprise Agent Platform est compatible avec le déploiement de GPU multi-hôte pour la diffusion de modèles qui dépassent la capacité de mémoire d'un seul nœud GPU, tels que DeepSeek-V3, DeepSeek-R1, et Meta LLama 3.1 405B (version non quantifiée).

Ce guide explique comment diffuser un modèle DeepSeek-V3 à l'aide de processeurs graphiques (GPU) multi-hôte sur Gemini Enterprise Agent Platform avec vLLM. La configuration pour les autres modèles est similaire. Pour en savoir plus, consultez la section Diffusion vLLM pour les modèles de langage textuels et multimodaux.

Avant de commencer, assurez-vous de bien connaître les éléments suivants :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Conteneurs

Pour prendre en charge les déploiements multi-hôte, ce guide utilise une image de conteneur vLLM prédéfinie avec l'intégration Ray de Model Garden. Ray permet le traitement distribué nécessaire pour exécuter des modèles sur plusieurs nœuds GPU.

Si vous le souhaitez, vous pouvez créer votre propre image multi-nœud vLLM. Notez que cette image de conteneur personnalisée doit être compatible avec Gemini Enterprise Agent Platform.

Avant de commencer

Avant de commencer le déploiement de votre modèle, remplissez les conditions préalables listées dans cette section.

Configurer un Google Cloud projet

  1. Connectez-vous à votre Google Cloud compte. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  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 Agent Platform 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 Agent Platform 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. Dans la Google Cloud console, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console, une session Cloud Shell démarre et affiche une invite de ligne de commande. Google Cloud Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

Demander un quota de GPU

Pour déployer DeepSeek-V3, vous avez besoin de deux a3-highgpu-8g VM avec huit H100 chacune, soit un total de 16 GPU H100. Il est probable que vous deviez demander une augmentation du quota de GPU H100, car la valeur par défaut est inférieure à 16.

  1. Pour afficher le quota de GPU H100, accédez à la page Google Cloud console Quotas et limites du système.

    Accéder à la page Quotas et limites du système

  2. Demandez un ajustement de quota.

Importer le modèle.

  1. Pour importer votre modèle en tant que ressource Model dans Gemini Enterprise Agent Platform, exécutez la gcloud ai models upload commande comme suit :

    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
    

    Effectuez les remplacements suivants :

    • LOCATION : région dans laquelle vous utilisez Gemini Enterprise Agent Platform.
    • PROJECT_ID : ID de votre Google Cloud projet.
    • MODEL_DISPLAY_NAME : nom à afficher souhaité pour votre modèle.

Créer un point de terminaison d'inférence en ligne dédié

Pour prendre en charge les requêtes de complétion de conversation, le conteneur Model Garden nécessite un point de terminaison dédié. Les points de terminaison dédiés sont en aperçu et ne sont pas compatibles avec Google Cloud CLI. Vous devez donc utiliser l'API REST pour créer le point de terminaison.

  1. Pour créer le point de terminaison dédié, exécutez la commande suivante :

    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
        }'
    

    Effectuez les remplacements suivants :

    • ENDPOINT_DISPLAY_NAME : nom à afficher pour votre point de terminaison.

Déployer le modèle

  1. Obtenez l'ID du point de terminaison d'inférence en ligne en exécutant la gcloud ai endpoints list commande :

    ENDPOINT_ID=$(gcloud ai endpoints list \
     --project=PROJECT_ID \
     --region=LOCATION \
     --filter=display_name~'ENDPOINT_DISPLAY_NAME' \
     --format="value(name)")
    
  2. Obtenez l'ID de votre modèle en exécutant la gcloud ai models list commande :

    MODEL_ID=$(gcloud ai models list \
     --project=PROJECT_ID \
     --region=LOCATION \
     --filter=display_name~'MODEL_DISPLAY_NAME' \
     --format="value(name)")
    
  3. Déployez le modèle sur le point de terminaison en exécutant la gcloud ai deploy-model commande :

    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
    

    Remplacez DEPLOYED_MODEL_NAME par un nom pour le modèle déployé. Il peut s'agir du même nom à afficher que le modèle (MODEL_DISPLAY_NAME).

    Le déploiement de modèles volumineux tels que DeepSeek-V3 peut prendre plus de temps que le délai d'expiration par défaut. Si la commande deploy-model expire, le processus de déploiement continue de s'exécuter en arrière-plan.

    La commande deploy-model renvoie un ID d'opération qui peut être utilisé pour vérifier quand l'opération est terminée. Vous pouvez interroger l'état de l'opération jusqu'à ce que la réponse indique "done": true. Utilisez la commande suivante pour interroger l'état :

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

    Remplacez OPERATION_ID par l'ID d'opération renvoyé par la commande précédente.

Obtenir des inférences en ligne à partir du modèle déployé

Cette section explique comment envoyer une requête d'inférence en ligne au point de terminaison public dédié où le modèle DeepSeek-V3 est déployé.

  1. Obtenez le numéro de projet en exécutant la gcloud projects describe commande :

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    
  2. Envoyez une requête de prédiction brute :

    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. Envoyez une requête de complétion de conversation :

    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}'
    

    Pour activer la diffusion en flux continu, remplacez la valeur de "stream" par true.false

Libérer de l'espace

Pour éviter d'engager d'autres frais Gemini Enterprise Agent Platform, supprimez les Google Cloud ressources que vous avez créées au cours de ce tutoriel :

  1. Pour annuler le déploiement du modèle sur le point de terminaison et supprimer le point de terminaison, exécutez les commandes suivantes :

    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. Pour supprimer votre modèle, exécutez les commandes suivantes :

    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
    

Étape suivante