Cette page décrit 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 l'A4 et les paramètres de l'orchestrateur Slurm, dans un fichier JSON.
Vous découvrirez également comment utiliser curl et les appels 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 la règle de votre organisation 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 sortant vers Internet.
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, en spécifiant tous les éléments, de son nom et de ses 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.
GPU avec Filestore uniquement: Configuration standard pour l'entraînement GPU à usage général.
GPU avec Filestore et Managed Lustre: Configuration avancée pour les tâches nécessitant de nombreuses entrées/sorties.
GPU avec script de démarrage: Montre comment exécuter des commandes personnalisées sur les nœuds au démarrage.
Cluster avec CPU uniquement : configuration de base utilisant uniquement des ressources de processeur.
CPU avec configuration Slurm avancée: exemple montrant les paramètres personnalisés du planificateur Slurm.
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. Elle 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 GPU. Vous pouvez l'utiliser comme modèle et modifier des valeurs telles que machineType ou nodeCount en fonction de vos besoins.
Pour obtenir la liste des paramètres, consultez la section Référence de paramètre.
{ "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 tâches 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 section Référence de paramètre.
{ "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 le configurer, ajoutez les champs pertinents à la définition de votre pool de nœuds en plus des paramètres généraux. Pour obtenir la liste des paramètres et leur description, consultez la section Référence de paramètre.
{ "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, en spécifiant tous les éléments, de son nom et de ses paramètres réseau au matériel de ses nœuds de connexion et de calcul.
Pour obtenir la liste des paramètres, consultez la section Référence de paramètre.
{ "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" } } }
CPU 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 tâches, par exemple pour définir des pondérations de priorité multifactorielles, configurer la préemption des tâches et exécuter des scripts de prologue et d'épilogue pour la configuration et le nettoyage automatisés des tâches.
Pour obtenir la liste des paramètres, consultez la section Référence de paramètre.
{ "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 d'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'ensemble du cycle de vie, du déploiement initial de votre cluster à sa suppression, en passant par la mise à jour d'un cluster, 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èle.
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 d'API plus claire et plus facile à gérer.
- PROJECT_ID : ID de votre projet dans lequel le cluster sera créé. Google Cloud
- REGION : région du cluster et de ses ressources. Google Cloud
- ZONE : zone dans laquelle les ressources du cluster seront provisionnées. Google Cloud
- CLUSTER_ID : identifiant unique de votre cluster d'entraînement, également utilisé comme préfixe pour nommer les ressources associées.
Exécuter la commande "create"
Exécutez maintenant la commande gcurl suivante. Elle utilise le fichier JSON (dans cet exemple,
cpu-cluster.json) comme corps de la 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 démarré, 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 gcurl POST 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 d'enregistrer 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éé 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 en minuscule, doit commencer par une lettre et ne peut pas dépasser 10 caractères.
- PROJECT_ID : ID de votre Google Cloud projet.
- REGION : région dans laquelle se trouveront le cluster et ses ressources. Google Cloud
- NETWORK : réseau de cloud privé virtuel à utiliser pour les ressources du cluster.
- ZONE : zone du cluster et de ses ressources. Google Cloud
- 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 du pool de nœuds
-
ID : identifiant unique du pool de nœuds dans le cluster
(par exemple, "
login", "a4", "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 du nœud de calcul. Les valeurs acceptées sont
a3-megagpu-8g,a3-ultragpu-8geta4-highgpu-8g. -
MIN_NODE_COUNT :
MIN_NODE_COUNTdoit être identique àMAX_NODE_COUNT. -
MAX_NODE_COUNT : pour le pool de nœuds de connexion,
MAX_NODE_COUNTdoit être identique àMIN_NODE_COUNT. -
ENABLE_PUBLIC_IPS : valeur booléenne (
trueoufalse) permettant de déterminer si le nœud de connexion possède une adresse IP publique. -
BOOT_DISK_TYPE : type de disque de démarrage du 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 au nœud 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_80GBNVIDIA_H200_141GBNVIDIA_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 de base de Slurm et de stockage
-
FILESTORE (correspond à
home_directory_storage) : nom complet de la ressource de l'instance Filestore à installer en tant que répertoire/home. -
LUSTRE (correspond à
lustresdans un objetnode_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 unidet une liste denode_pool_ids.
Paramètres Slurm avancés
-
prolog_bash_scripts: liste de chaînes, où chaque chaîne contient le contenu complet d'un script Bash à exécuter avant le début d'une tâche. -
epilog_bash_scripts: liste de chaînes, où chaque chaîne contient le contenu complet d'un script Bash à exécuter une fois la tâche terminée. - ACCOUNTING_STORAGE_ENFORCE : applique les 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 : délai après le début d'une tâche pendant lequel elle ne peut pas être préemptée.
Étape suivante
Utilisez votre cluster d'entraînement persistant actif pour exécuter vos charges de travail de machine learning.
- Exécuter une tâche sur votre cluster : envoyez un
CustomJobpour exécuter une tâche d'entraînement sur votre cluster persistant. - Orchestrer votre entraînement avec Vertex AI Pipelines : pour des workflows reproductibles de qualité production, automatisez le processus d'envoi de tâches à l'aide de Vertex AI Pipelines.
- Afficher et gérer votre cluster : listez les clusters existants, vérifiez leur état, et affichez les détails de configuration à l'aide de Google Cloud CLI ou de la Google Cloud console.
- Supprimer votre cluster pour éviter les frais : les clusters d'entraînement sont persistants et entraînent des coûts lorsqu'ils sont actifs.