Utiliser des VM à démarrage flexible avec un cluster Slurm

Ce guide explique comment configurer et utiliser des VM à démarrage flexible avec Slurm sur Gemini Enterprise Agent Platform. Cette intégration vous permet d'utiliser des modèles de provisionnement de VM flexibles pour vos charges de travail d'entraînement.

Configuration et création de clusters

Avant de définir la configuration du cluster, vous devez d'abord effectuer l'étape préalable unique suivante pour vous assurer que les comptes de service nécessaires sont autorisés à gérer les ressources Flex Start.

Vérifier les autorisations de l'agent de service des API Google

  • Contexte : Slurm sur la plate-forme Gemini Enterprise Agent utilise des groupes d'instances gérés pour provisionner dynamiquement des instances de VM Flex Start et gérer leur cycle de vie. L'agent de service des API Google crée et gère les ressources Compute Engine sous-jacentes pour le groupe d'instances géré. Comme indiqué dans la documentation sur les groupes d'instances gérés et IAM, ce compte de service nécessite des autorisations pour créer, supprimer et lister les instances de VM, ainsi que pour leur associer une identité de compte de service.
  • Action : Vérifiez si votre agent de service des API Google (PROJECT_NUMBER@cloudservices.gserviceaccount.com) dispose déjà du rôle Éditeur (roles/editor).
    • Si la réponse est "oui" : vous n'avez probablement rien d'autre à faire. Le rôle d'éditeur inclut généralement toutes les autorisations nécessaires.
    • Si la réponse est "non" : si le rôle d'éditeur par défaut n'est pas accordé, vous devez accorder explicitement les rôles suivants pour vous assurer que le MIG peut fonctionner :
      • Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) : requis pour créer, lister et supprimer des instances de VM.
      • Utilisateur du compte de service (roles/iam.serviceAccountUser) : obligatoire pour associer un compte de service aux nouvelles VM.

Créer un cluster Slurm avec le modèle de provisionnement Démarrage flexible

Pour créer un cluster Slurm qui utilise le modèle de provisionnement Démarrage flexible, vous devez spécifier provisioning_model dans la configuration du pool de nœuds de la spécification de votre cluster lorsque vous envoyez votre demande de création de cluster à l'aide de l'API.

Exemple d'extrait de configuration : enregistrez la configuration JSON suivante dans un fichier nommé cluster_config.json. Cet exemple utilise explicitement un slurm_spec. Remplacez les espaces réservés (par exemple, <project-id>, <region>, <zone>) par vos valeurs réelles.

{
  "display_name": "flexvm",
  "name": "projects/<project-id>/locations/<region>/modelDevelopmentClusters/",
  "network": {
    "network": "projects/<project-id>/global/networks/default",
    "subnetwork": "projects/<project-id>/regions/<region>/subnetworks/default"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": { "machine_type": "n2-standard-8" },
      "scaling_spec": { "min_node_count": 1, "max_node_count": 1 },
      "enable_public_ips": "true",
      "zone": "<zone>",
      "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 }
    },
    {
      "id": "a3u",
      "machine_spec": {
        "machine_type": "a3-ultragpu-8g",
        "accelerator_type": "NVIDIA_H200_141GB",
        "accelerator_count": 8
      },
      "provisioning_model": "FLEX_START",
      "flex_start_max_duration": "604800s",
      "scaling_spec": { "min_node_count": 0, "max_node_count": 2 },
      "zone": "<zone>",
      "enable_public_ips": "true",
      "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 400 }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/<project-id>/locations/<zone>/instances/<filestore-id>",
      "partitions": [ { "id": "a3u", "node_pool_ids": [ "a3u" ] } ],
      "login_node_pool_id": "login"
    }
  }
}

Suivez les étapes de la section Créer un cluster Slurm pour vous authentifier et envoyer la demande.

Durée maximale du démarrage flexible : vous pouvez éventuellement définir la durée d'exécution maximale de vos instances à démarrage flexible. Utilisez le champ flex_start_max_duration dans la configuration de votre pool de nœuds, en spécifiant la valeur sous forme de chaîne en secondes, suivie d'un "s" (par exemple, "172800s" pour deux jours). Si aucune valeur n'est spécifiée, le système utilise par défaut 7 jours.

Cycle de vie opérationnel et résilience

Il est essentiel de comprendre le cycle de vie des nœuds à démarrage flexible dans un environnement Slurm sur Gemini Enterprise Agent Platform pour planifier vos jobs.

Contraintes du démarrage flexible

Toutes les VM à démarrage flexible ont une durée d'exécution maximale fixe, définie par le paramètre flex_start_max_duration.

  • Limite de durée : par défaut, flex_start_max_duration est défini sur sept jours. Vous pouvez remplacer cette limite en spécifiant un flex_start_max_duration personnalisé entre 30 secondes et un maximum de sept jours (604 800 secondes) dans la configuration de votre pool de nœuds pour mieux correspondre aux durées d'exécution de vos jobs.
  • Arrêt : lorsque cette limite est atteinte, Compute Engine arrête l'instance de manière stricte.

Comportement du scaling des nœuds

Les sections suivantes décrivent les deux stratégies de scaling disponibles : statique et dynamique.

Nœud statique

Les nœuds statiques vous permettent de maintenir un pool fixe de ressources toujours disponibles (par exemple, min_node_count > 0).

  • Provisionnement : les nœuds sont demandés immédiatement lors de la création ou du redimensionnement du cluster pour atteindre le nombre minimal de nœuds.
  • Expiration et récupération : lorsqu'un nœud de démarrage flexible statique atteint son flex_start_max_duration et est arrêté par Compute Engine, le système tente automatiquement de recréer le nœud pour restaurer la capacité de cluster définie. Ce cycle garantit que le pool statique reste rempli, qu'un job Slurm soit en attente sur les nœuds ou non.

Nœud dynamique

Les nœuds dynamiques permettent au cluster de s'adapter à la hausse uniquement en cas de besoin.

  • Provisionnement : lorsqu'un job est mis en file d'attente (état PENDING), le planificateur Slurm demande des ressources en créant un groupe d'instances géré et en envoyant une demande de redimensionnement.
  • Expiration et récupération : à l'expiration, le système provisionne un nouveau nœud Flex Start uniquement si un job Slurm est en attente sur les nœuds.

Résilience et autoréparation des clusters

Slurm sur Gemini Enterprise Agent Platform surveille l'état des nœuds à des étapes clés du cycle de vie du job. Des vérifications de l'état sont exécutées avant le début d'un job (prologue) et après sa fin (épilogue) pour contribuer à maintenir la stabilité du job.

  • Gestion des exceptions matérielles : si le service détecte des problèmes matériels critiques (tels que des erreurs de GPU), il est conçu pour réparer automatiquement la VM non opérationnelle.
  • Remplacement automatique : si le job est toujours à l'état PENDING (ou a été remis en file d'attente à l'état PENDING en raison de la défaillance du nœud), le système provisionne automatiquement une nouvelle instance Flex Start pour remplacer la VM défectueuse. Cela permet à votre charge de travail de se poursuivre sur du matériel en bon état sans intervention manuelle.