Créer un cluster

Si vous êtes intéressé par les clusters d'entraînement Vertex AI, contactez votre représentant commercial pour y accéder.

Cette page présente la méthode directe basée sur l'API pour créer et gérer un cluster d'entraînement. Vous apprendrez à définir la configuration complète de votre cluster, y compris les nœuds de connexion, les partitions GPU hautes performances comme A4 et les paramètres de l'orchestrateur Slurm, dans un fichier JSON. Vous découvrirez également comment utiliser les appels curl et d'API REST pour déployer cette configuration, créer le cluster et gérer son cycle de vie avec les opérations GET, LIST, UPDATE et DELETE.

Définir la configuration du cluster

Créez un fichier JSON pour définir la configuration complète de votre cluster d'entraînement.

Si votre règle d'administration interdit les adresses IP publiques sur les instances de calcul, déployez le cluster d'entraînement avec le paramètre enable_public_ips: false et utilisez Cloud NAT pour le trafic Internet sortant.

La première étape du provisionnement d'un cluster d'entraînement consiste à définir sa configuration complète dans un fichier JSON. Ce fichier sert de plan pour votre cluster. Il spécifie tous les éléments, du nom et des paramètres réseau au matériel de ses nœuds de connexion et de calcul.

La section suivante fournit plusieurs fichiers de configuration JSON complets qui servent de modèles pratiques pour divers cas d'utilisation courants. Consultez cette liste pour trouver l'exemple qui correspond le mieux à vos besoins et utilisez-le comme point de départ.

Chaque exemple est suivi d'une description détaillée des paramètres clés utilisés dans cette configuration spécifique.

GPU avec Filestore uniquement

Il s'agit de la configuration standard. Il fournit une instance Filestore qui sert de répertoire /home pour le cluster, adaptée à un usage général et au stockage des données utilisateur.

L'exemple suivant montre le contenu de gpu-filestore.json. Cette spécification crée un cluster avec une partition de GPU. Vous pouvez l'utiliser comme modèle et modifier des valeurs telles que machineType ou nodeCount selon vos besoins.

Pour obtenir la liste des paramètres, consultez la documentation de référence sur les paramètres.

 {
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      }
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION"
          ]
        }
      },
      "provisioning_model": "RESERVATION",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

GPU avec Filestore et Managed Lustre

Cette configuration avancée inclut l'instance Filestore standard en plus d'un système de fichiers Lustre hautes performances. Choisissez cette option si vos jobs d'entraînement nécessitent un accès à haut débit à de grands ensembles de données.

Pour obtenir la liste des paramètres, consultez la documentation de référence sur les paramètres.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/asia-sREGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservation_affinity_type": RESERVATION_AFFINITY_TYPE,
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "provisioning_model": "RESERVATION",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
  

GPU avec script de démarrage

Cet exemple montre comment ajouter un script personnalisé à un pool de nœuds. Ce script s'exécute sur tous les nœuds de ce pool au démarrage. Pour configurer cela, ajoutez les champs appropriés à la définition du pool de nœuds en plus des paramètres généraux. Pour obtenir la liste des paramètres et de leurs descriptions, consultez la documentation de référence sur les paramètres.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "provisioning_model": "PROVISIONING_MODEL",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

Cluster avec CPU uniquement

Pour provisionner un environnement de cluster d'entraînement, vous devez d'abord définir sa configuration complète dans un fichier JSON. Ce fichier sert de plan pour votre cluster. Il spécifie tous les éléments, du nom et des paramètres réseau au matériel pour ses nœuds de connexion et de calcul.

Pour obtenir la liste des paramètres, consultez la documentation de référence sur les paramètres.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8",
      }
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

Processeur avec configuration Slurm avancée

Cet exemple montre comment personnaliser l'orchestrateur Slurm avec des paramètres avancés. Utilisez ce modèle si vous avez besoin d'un contrôle précis sur le comportement de planification des jobs, par exemple pour définir des pondérations de priorité multifactorielles, configurer la préemption des jobs et exécuter des scripts de prologue et d'épilogue pour la configuration et le nettoyage automatisés des jobs.

Pour obtenir la liste des paramètres, consultez la documentation de référence sur les paramètres.

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

Une fois votre cluster défini dans un fichier JSON, utilisez les commandes de l'API REST suivantes pour le déployer et le gérer. Les exemples utilisent un alias gcurl, qui est un raccourci authentifié pratique pour interagir avec les points de terminaison de l'API. Ces commandes couvrent l'intégralité du cycle de vie, du déploiement initial de votre cluster à sa suppression, en passant par sa mise à jour, l'obtention de son état et la liste de tous les clusters.

Authentification

alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'

Créer un fichier JSON

Créez un fichier JSON (par exemple, @cpu-cluster.json) pour spécifier la configuration de votre cluster d'entraînement de modèles.

Déployer le cluster

Une fois le fichier de configuration JSON créé, vous pouvez déployer le cluster à l'aide de l'API REST.

Définir des variables d'environnement

Avant d'exécuter la commande, définissez les variables d'environnement suivantes. Cela rend la commande API plus claire et plus facile à gérer.

  • PROJECT_ID : ID de votre projet Google Cloud dans lequel le cluster sera créé.
  • REGION : région Google Cloud du cluster et de ses ressources.
  • ZONE : zone Google Cloud dans laquelle les ressources du cluster seront provisionnées.
  • CLUSTER_ID : identifiant unique de votre cluster d'entraînement, qui est également utilisé comme préfixe pour nommer les ressources associées.

Exécuter la commande "create"

Exécutez maintenant la commande gcurl suivante. Il utilise le fichier JSON (cpu-cluster.json dans cet exemple) comme corps de requête et les variables d'environnement que vous venez de définir pour construire le point de terminaison de l'API et les paramètres de requête.

  gcurl -X POST -d @cpu-cluster.json https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters?model_development_cluster_id=CLUSTER_ID
    

Une fois le déploiement lancé, un ID d'opération est généré. Veillez à copier cet ID. Vous en aurez besoin pour valider votre cluster à l'étape suivante.

  gcurl -X POST -d @cpu-cluster.json https://us-central1-aiplatform.googleapis.com/v1beta1/projects/managedtraining-project/locations/us-central1/modelDevelopmentClusters?model_development_cluster_id=training
  {
      "name": "projects/1059558423163/locations/us-central1/operations/2995239222190800896",
      "metadata": {
      "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateModelDevelopmentClusterOperationMetadata",
      "genericMetadata": {
        "createTime": "2025-10-24T14:16:59.233332Z",
        "updateTime": "2025-10-24T14:16:59.233332Z"
      },
      "progressMessage": "Create Model Development Cluster request received, provisioning..."
  }
    

Valider le déploiement du cluster

Suivez la progression du déploiement à l'aide de l'ID d'opération fourni lors du déploiement du cluster. Par exemple, 2995239222190800896 est l'ID d'opération dans l'exemple cité précédemment.

    gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

En résumé

L'envoi de la configuration de votre cluster avec la commande POST gcurl lance le provisionnement de votre cluster, qui est une opération asynchrone de longue durée. L'API renvoie immédiatement une réponse contenant un Operation ID. Il est essentiel de sauvegarder cet ID, car vous l'utiliserez lors des étapes suivantes pour surveiller la progression du déploiement, vérifier que le cluster a été créé correctement et gérer son cycle de vie.

Référence de paramètre

La liste suivante décrit tous les paramètres utilisés dans les exemples de configuration. Les paramètres sont organisés en groupes logiques en fonction de la ressource qu'ils configurent.

Paramètres généraux et réseau

  • DISPLAY_NAME : nom unique de votre cluster d'entraînement. La chaîne ne peut contenir que des caractères alphanumériques minuscules, doit commencer par une lettre et ne peut pas comporter plus de 10 caractères.
  • PROJECT_ID : ID de votre projet Google Cloud .
  • REGION : région Google Cloud dans laquelle se trouveront le cluster et ses ressources.
  • NETWORK : réseau VPC à utiliser pour les ressources du cluster.
  • ZONE : zone Google Cloud du cluster et de ses ressources.
  • SUBNETWORK : sous-réseau à utiliser pour les ressources du cluster.

Configuration du pool de nœuds

Les paramètres suivants sont utilisés pour définir les pools de nœuds pour les nœuds de connexion et de calcul.

Paramètres courants des pools de nœuds

  • ID : identifiant unique du pool de nœuds dans le cluster (par exemple, "login", "a4" ou "cpu").
  • PROVISIONING_MODEL : modèle de provisionnement du nœud de calcul (par exemple, ON_DEMAND, SPOT, RESERVATION, FLEX_START).
  • MACHINE_TYPE : type de machine pour le nœud de calcul. Les valeurs acceptées sont a3-megagpu-8g, a3-ultragpu-8g et a4-highgpu-8g.
  • MIN_NODE_COUNT : MIN_NODE_COUNT doit être identique à MAX_NODE_COUNT.
  • MAX_NODE_COUNT : pour le pool de nœuds de connexion, le MAX_NODE_COUNT doit être identique au MIN_NODE_COUNT.
  • ENABLE_PUBLIC_IPS : valeur booléenne (true ou false) permettant de déterminer si le nœud de connexion dispose d'une adresse IP publique.
  • BOOT_DISK_TYPE : type de disque de démarrage pour le nœud de connexion (par exemple, pd-standard, pd-ssd).
  • BOOT_DISK_SIZE_GB : taille du disque de démarrage en Go pour le nœud de connexion.

Paramètres spécifiques aux nœuds de calcul

  • ACCELERATOR_TYPE : accélérateur GPU correspondant à associer aux nœuds de calcul. Les valeurs acceptées sont les suivantes :
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT : nombre d'accélérateurs à associer à chaque nœud de calcul.
  • RESERVATION_AFFINITY_TYPE : affinité de réservation pour le pool de nœuds (par exemple, SPECIFIC_RESERVATION).
  • RESERVATION_NAME : nom de la réservation à utiliser pour le pool de nœuds.

Configuration de l'orchestrateur et du stockage

Ces champs sont définis dans le bloc orchestrator_spec.slurm_spec du fichier JSON.

Paramètres Slurm et de stockage de base

  • FILESTORE (correspond à home_directory_storage) : nom complet de la ressource de l'instance Filestore à installer en tant que répertoire /home.
  • LUSTRE (correspond à lustres dans un objet node_pools) : liste des instances Managed Lustre préexistantes à installer sur les nœuds du cluster pour un accès aux fichiers hautes performances.
  • LOGIN_NODE_POOL_ID (correspond à login_node_pool_id) : ID du pool de nœuds à utiliser pour les nœuds de connexion.
  • partitions : liste d'objets de partition, où chaque objet nécessite un id et une liste de node_pool_ids.

Paramètres Slurm avancés

  • prolog_bash_scripts : liste de chaînes, où chaque chaîne contient l'intégralité du contenu d'un script Bash à exécuter avant le début d'un job.
  • epilog_bash_scripts : liste de chaînes, où chaque chaîne contient l'intégralité du contenu d'un script Bash à exécuter une fois le job terminé.
  • ACCOUNTING_STORAGE_ENFORCE : applique des limites de comptabilité pour l'utilisation du stockage.
  • PRIORITY_TYPE : algorithme de priorité de planification à utiliser (par exemple, priority/multifactor).
  • priority_weight_* : ensemble de valeurs entières qui attribuent une pondération à différents facteurs dans le calcul de la priorité de planification (par exemple, priority_weight_age, priority_weight_fairshare).
  • PREEMPT_TYPE : plug-in de préemption à utiliser (par exemple, preempt/partition_prio).
  • PREEMPT_MODE : mode du plug-in de préemption (par exemple, REQUEUE).
  • PREEMPT_EXEMPT_TIME : durée après le début d'un job pendant laquelle il ne peut pas être préempté.

Étapes suivantes

Utilisez votre cluster d'entraînement persistant actif pour exécuter vos charges de travail de machine learning.