View a markdown version of this page

Provisionnement continu pour des opérations de cluster améliorées avec Slurm - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Provisionnement continu pour des opérations de cluster améliorées avec Slurm

SageMaker HyperPod Les clusters Amazon créés avec Slurm Orchestration prennent désormais en charge le provisionnement continu, une fonctionnalité qui permet une flexibilité et une efficacité accrues lors de l'exécution de charges de travail à grande échelle. AI/ML Le provisionnement continu vous permet de démarrer l’entraînement rapidement, de procéder facilement à une mise à l’échelle, d’effectuer la maintenance sans interrompre les opérations et de bénéficier d’une visibilité granulaire sur les opérations du cluster.

Note

Le provisionnement continu est disponible en tant que configuration optionnelle pour les HyperPod clusters créés avec Slurm Orchestration.

Comment ça marche

Le système de provisionnement continu introduit une architecture à état souhaité qui remplace le modèle de mise à l'échelle traditionnel du tout ou rien. Dans le modèle précédent, si un groupe d'instances ne pouvait pas être entièrement provisionné, l'opération complète de création ou de mise à jour du cluster échouait et était annulée. Avec le provisionnement continu, le système accepte une capacité partielle et continue de provisionner les instances restantes de manière asynchrone.

Le système de provisionnement continu :

  • Accepte la demande  : enregistre le nombre d'instances cibles pour chaque groupe d'instances.

  • Lance le provisionnement  : commence à lancer des instances pour tous les groupes d'instances en parallèle.

  • Provisionne d'abord les nœuds prioritaires  : le cluster passe à une InService fois qu'au moins un nœud contrôleur (et un nœud de connexion, si un groupe d'instances de connexion est spécifié) a été correctement provisionné.

  • Suit la progression  : surveille chaque tentative de lancement d'instance et enregistre l'état.

  • Gère les échecs  : relance automatiquement les lancements ayant échoué pour les nœuds de travail de manière asynchrone.

Le provisionnement continu est désactivé par défaut. Pour utiliser cette fonctionnalité, NodeProvisioningMode définissez-la sur Continuous dans votre CreateCluster demande.

Lorsque le provisionnement continu est activé, vous pouvez lancer plusieurs opérations de mise à l’échelle simultanément sans attendre la fin des opérations précédentes. Cela vous permet de mettre à l’échelle simultanément différents groupes d’instances dans le même cluster et de soumettre plusieurs demandes de mise à l’échelle au même groupe d’instances.

Priority-based approvisionnement

Les clusters Slurm nécessitent qu'un nœud contrôleur soit opérationnel avant que les nœuds de travail puissent enregistrer et accepter des tâches. Le provisionnement continu gère cela automatiquement grâce à un provisionnement basé sur les priorités :

  1. Le groupe d'instances du contrôleur est provisionné en premier.

  2. Une fois qu'un nœud de contrôleur est en bon état, les nœuds de connexion et les nœuds de travail commencent à être provisionnés en parallèle.

  3. Le cluster passe au InService moment où un nœud de contrôleur est actif et un nœud de connexion est actif (si un groupe d'instances de connexion est spécifié). Si aucun groupe d'instances de connexion n'est spécifié, le cluster passe InService dès que le nœud du contrôleur est provisionné.

  4. Les nœuds de travail qui ne peuvent pas être provisionnés immédiatement en raison de contraintes de capacité entrent dans une boucle de nouvelle tentative asynchrone et sont automatiquement ajoutés au cluster Slurm dès qu'ils sont disponibles.

Gestion des défaillances du contrôleur

Lors de la création du cluster, si le nœud du contrôleur ne parvient pas à se provisionner, le comportement varie selon que l'erreur peut être réessayée ou non.

Erreurs réessayables (par exemple, instance défectueuse ou défaillances transitoires) :

  • HyperPod remplace continuellement l'instance et réessaie le provisionnement jusqu'à ce que le contrôleur apparaisse.

  • Les nœuds de travail et de connexion qui ont déjà été provisionnés restent disponibles, mais le cluster n'est pas transféré InService tant que le contrôleur n'est pas en bon état.

Non-retryable erreurs (par exemple, aucune capacité disponible pour le type d'instance de contrôleur ou échec du script du cycle de vie) :

  • Le cluster est marqué commeFailed.

  • Vous êtes informé de la raison de l'échec et devez prendre des mesures correctives, par exemple en choisissant un autre type d'instance, en corrigeant les scripts du cycle de vie ou en réessayant dans une autre zone de disponibilité.

Conditions préalables

Le provisionnement continu nécessite que les paramètres de provisionnement de Slurm (types de nœuds, noms de partition) soient fournis via la charge utile de l'API dans le champ de chaque groupe d'instances. SlurmConfig Les clusters qui s'appuient sur l'ancien provisioning_parameters.json fichier d'Amazon S3 ne sont pas compatibles avec le provisionnement continu.

Note

Les fonctionnalités suivantes ne sont actuellement pas prises en charge avec le provisionnement continu sur les clusters Slurm : configuration de nœuds multi-têtes via la topologie API-based Slurm, et. SlurmConfigStrategy Le provisionnement continu fonctionne exclusivement en mode fusion pour la slurm.conf gestion.

Comptage d’utilisation

HyperPod les clusters dotés d'un provisionnement continu utilisent des compteurs au niveau de l'instance pour fournir une facturation précise qui reflète l'utilisation réelle des ressources. Cette approche des mesures diffère de la facturation traditionnelle au niveau du cluster, car elle permet de suivre chaque instance indépendamment.

Instance-level facturation

Avec le provisionnement continu, la facturation commence et s’arrête au niveau de l’instance individuelle au lieu d’attendre les changements d’état au niveau du cluster. Cette approche présente les avantages suivants :

  • Exactitude précise de la facturation : la facturation commence lorsque l’exécution du script de cycle de vie commence. Si le script de cycle de vie échoue, le provisionnement de l'instance sera réessayé et la durée d'exécution du script de cycle de vie vous sera facturée.

  • Comptage indépendant  : le cycle de vie de facturation de chaque instance est géré séparément, ce qui permet d'éviter les erreurs de facturation en cascade.

  • Real-time mises à jour de facturation  : la facturation commence lorsqu'une instance commence à exécuter son script de configuration du cycle de vie et s'arrête lorsque l'instance entre dans un état de terminaison.

Cycle de vie de facturation

Chaque instance de votre HyperPod cluster suit ce cycle de vie de facturation :

  • La facturation commence  : lorsque l'instance est lancée avec succès et commence à exécuter son script de configuration du cycle de vie.

  • La facturation se poursuit  : pendant toute la durée de vie opérationnelle de l'instance.

  • Arrêt de la facturation  : lorsque l'instance passe à l'état de terminaison, quel que soit le motif de la résiliation.

Note

La facturation ne démarre pas pour les instances qui ne démarrent pas. Si le lancement d’une instance échoue en raison d’une capacité insuffisante ou d’autres problèmes, cette tentative infructueuse ne vous est pas facturée. La facturation est calculée au niveau de l’instance et les coûts sont agrégés et signalés sous l’Amazon Resource Name (ARN) de votre cluster.

Création d’un cluster avec le provisionnement continu activé

Note

Préparez un script de configuration du cycle de vie et téléchargez-le dans un compartiment Amazon S3 auquel votre rôle d'exécution peut accéder. Pour de plus amples informations, veuillez consulter SageMaker HyperPod Opérations du cluster Slurm.

Préparez un fichier de demande d'CreateClusterAPI au format JSON. Définissez Continuous et fournissez NodeProvisioningMode les informations de topologie de Slurm dans le champ de chaque groupe d'instances. SlurmConfig

// create_cluster.json { "ClusterName": "my-training-cluster", "NodeProvisioningMode": "Continuous", "Orchestrator": { "Slurm": {} }, "InstanceGroups": [ { "InstanceGroupName": "controller-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket/lifecycle-scripts/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "SlurmConfig": { "NodeType": "Controller" } }, { "InstanceGroupName": "login-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket/lifecycle-scripts/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "SlurmConfig": { "NodeType": "Login" } }, { "InstanceGroupName": "worker-gpu-a", "InstanceType": "ml.p5.48xlarge", "InstanceCount": 16, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket/lifecycle-scripts/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["gpu-training"] } } ], "VpcConfig": { "SecurityGroupIds": ["sg-12345678"], "Subnets": ["subnet-12345678"] } }

Exécutez la create-cluster commande pour soumettre la demande.

aws sagemaker create-cluster \ --cli-input-json file://complete/path/to/create_cluster.json

Cela renvoie l'ARN du nouveau cluster.

{ "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/abcde12345" }

Gestion de la configuration de Slurm

Le provisionnement continu fonctionne exclusivement en mode fusion pour la gestion des slurm.conf partitions. En mode fusion, HyperPod applique les modifications de configuration de sa partition de manière additive en plus de celles que vous avez modifiées. slurm.conf HyperPod met uniquement à jour les sections relatives aux partitions de slurm.conf (telles que les entrées de nom de partition et de nom de nœud) ; les autres paramètres de configuration de Slurm ne sont pas modifiés. Autrement dit :

  • Vos modifications manuelles slurm.conf sont conservées.

  • Il n'y a pas de détection automatique de dérive ni de résolution des conflits entre vos modifications et HyperPod l'état attendu.

Le SlurmConfigStrategy paramètre (Managed,Merge,Overwrite) n'est pas pris en charge avec le provisionnement continu. La transmission d'une SlurmConfigStrategy valeur entraîne une erreur d'API.

Exigences de capacité minimale (MinCount)

MinCount Cette fonctionnalité vous permet de spécifier le nombre minimum d'instances qui doivent être correctement provisionnées avant qu'un groupe d'instances ne passe au InService statut. Cette fonctionnalité permet de mieux contrôler les opérations de dimensionnement et permet d'éviter les scénarios dans lesquels des groupes d'instances partiellement provisionnés ne peuvent pas être utilisés efficacement pour les charges de travail de formation.

Important

MinCount n'est pas une garantie permanente de capacité minimale. Il garantit uniquement que le nombre minimum d'instances spécifié est disponible lorsque le groupe d'instances est créé pour la première foisInService. De brèves baisses en dessous MinCount peuvent survenir pendant les opérations normales, telles que le remplacement d'instances défectueuses ou les activités de maintenance.

Comment MinCount fonctionne

Lorsque vous créez ou mettez à jour un groupe d'instances avec MinCount activé, le comportement suivant se produit :

  • Nouveaux groupes d'instances  : le groupe d'instances conserve Creating son statut jusqu'à ce qu'au moins les MinCount instances soient correctement provisionnées et prêtes. Une fois ce seuil atteint, le groupe d'instances passe àInService.

  • Groupes d'instances existants  : lors de la mise à MinCount jour d'un groupe d'instances existant, le statut passe à « Updating Jusqu'à ce que la nouvelle MinCount exigence soit satisfaite ».

  • Mise à l'échelle continue  : si elle TargetCount est supérieure à MinCount, le système de mise à l'échelle continue d'essayer de lancer des instances supplémentaires jusqu'à ce qu'elle TargetCount soit atteinte.

  • Délai d'attente et restauration  : si le groupe d'instances MinCount ne peut pas être satisfait dans les 3 heures, le système ramène automatiquement le groupe d'instances à son dernier état de fonctionnement connu. Pour plus d'informations sur le comportement de restauration, voir Comportement d'annulation automatique.

État du groupe d'instances pendant MinCount les opérations

Les groupes d'instances MinCount configurés présentent le comportement d'état suivant :

Création

Pour les nouveaux groupes d'instances lorsque CurrentCount < MinCount. Le groupe d'instances conserve cet état jusqu'à ce que la capacité minimale requise soit atteinte.

Mise à jour

Pour les groupes d'instances existants, lorsque MinCount est modifié et CurrentCount < MinCount. Le groupe d'instances conserve cet état jusqu'à ce que la nouvelle exigence de capacité minimale soit satisfaite.

InService

Quand MinCount ≤ CurrentCount ≤ TargetCount. Le groupe d'instances est prêt à être utilisé et toutes les opérations de mutation sont débloquées.

Pendant Creating ou pendant le Updating statut, les restrictions suivantes s'appliquent :

  • Les opérations de mutation telles que BatchAddClusterNodesBatchDeleteClusterNodes, ou UpdateClusterSoftware sont bloquées

  • Vous pouvez toujours modifier les TargetCount valeurs MinCount et pour corriger les erreurs de configuration

  • La suppression de clusters et de groupes d'instances est toujours autorisée

Comportement de restauration automatique

Si un groupe d'instances ne peut pas atteindre le sien MinCount dans les 3 heures, le système lance automatiquement un rollback pour éviter une attente indéfinie :

  • Nouveaux groupes d'instances  : MinCount et TargetCount sont réinitialisés à (0, 0)

  • Groupes d'instances existants  : MinCount et leurs valeurs TargetCount sont restaurées depuis le dernier InService état

  • Sélection des instances en vue de leur résiliation : si des instances doivent être résiliées pendant la restauration, le système sélectionne d'abord les instances défectueuses, puis celles qui ont été mises en service pour la dernière fois.

  • Transition de statut  : le groupe d'instances passe immédiatement à l'InServiceétat après le lancement de la restauration, ce qui permet au système de dimensionnement continu de gérer la capacité en fonction des paramètres de restauration

Le délai d'expiration de 3 heures est réinitialisé à chaque MinCount mise à jour. Par exemple, si vous effectuez MinCount plusieurs mises à jour, le délai d'expiration recommence à partir de la dernière mise à jour.

MinCount événements

Le système émet des événements spécifiques pour vous aider à suivre les MinCount opérations :

  • Capacité minimale atteinte  : émise lorsqu'un groupe d'instances atteint avec succès le sien MinCount et passe à InService

  • Annulation initiée  : émise lorsque le délai de 3 heures expire et que la restauration automatique commence

Vous pouvez surveiller ces événements ListClusterEvents pour suivre la progression de vos MinCount opérations.

Utilisation de l'API

MinCount est spécifié à l'aide du MinInstanceCount paramètre dans les configurations de groupes d'instances :

aws sagemaker create-cluster \ --cluster-name $HP_CLUSTER_NAME \ --instance-groups '[ { "InstanceGroupName": "controller-machine", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": {"NodeType": "Controller"}, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 2 }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": {"NodeType": "Login"}, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1 }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.c5.xlarge", "MinInstanceCount": 1, "InstanceCount": 2, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["p1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://'$BUCKET_NAME'", "OnCreate": "on_create.sh" }, "ExecutionRole": "'$EXECUTION_ROLE'", "ThreadsPerCore": 1 } ]' \ --vpc-config '{ "SecurityGroupIds": ["'$SECURITY_GROUP'"], "Subnets": ["'$SUBNET'"] }' \ --node-provisioning-mode Continuous

Principales considérations relatives à MinCount l'utilisation :

  • MinInstanceCountdoit être compris entre 0 et la valeur InstanceCount (incluse) du groupe d'instances spécifié dans CreateCluster ou UpdateCluster requête

  • Le réglage MinInstanceCount sur 0 (par défaut) préserve le comportement de mise à l'échelle continue standard

  • La valeur par défaut MinInstanceCount pour Controller et Login InstanceGroup est définie sur 1 lors de la création du cluster.

  • La MinInstanceCount valeur égale à InstanceCount fournit un comportement de mise à l'échelle « tout ou rien »

  • MinCount n'est disponible que pour les clusters NodeProvisioningMode définis sur Continuous