Gestion des clusters SageMaker HyperPod Slurm à l’aide de l’AWS CLI - Amazon SageMaker AI

Gestion des clusters SageMaker HyperPod Slurm à l’aide de l’AWS CLI

Les rubriques suivantes fournissent des conseils sur la rédaction de fichiers de demande d’API SageMaker HyperPod au format JSON et sur leur exécution à l’aide des commandes AWS CLI.

Création d’un nouveau cluster

  1. Préparez des scripts de configuration de cycle de vie et chargez-les sur un compartiment S3, tel que s3://sagemaker-amzn-s3-demo-bucket/lifecycle-script-directory/src/. L’étape 2 suivante suppose qu’il existe un script de point d’entrée nommé on_create.sh dans le compartiment S3 spécifié.

    Important

    Vérifiez que vous avez défini le chemin S3 pour qu’il commence par s3://sagemaker-. Le Rôle IAM pour SageMaker HyperPod dispose de la politique AmazonSageMakerClusterInstanceRolePolicy gérée attachée, qui permet d’accéder aux compartiments S3 avec le préfixe sagemaker- spécifique.

  2. Préparez un fichier de demande d’API CreateCluster au format JSON. Vous devez configurer les groupes d’instances pour qu’ils correspondent au cluster Slurm que vous concevez dans le fichier provisioning_parameters.json, qui sera utilisé lors de la création du cluster dans le cadre de l’exécution d’un ensemble de scripts de cycle de vie. Pour en savoir plus, consultez Personnalisation des clusters SageMaker HyperPod à l’aide de scripts de cycle de vie. Le modèle suivant comporte deux groupes d’instances répondant aux exigences minimales d’un cluster Slurm : un nœud de contrôleur (principal) et un nœud de calcul (composant master). Pour ExecutionRole, fournissez l’ARN du rôle IAM que vous avez créé avec la politique AmazonSageMakerClusterInstanceRolePolicy gérée à partir de la section Rôle IAM pour SageMaker HyperPod.

    // create_cluster.json { "ClusterName": "your-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "controller-group", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", // Optional: Configure an additional storage per instance group. "InstanceStorageConfigs": [ { // Attach an additional EBS volume to each instance within the instance group. // The default mount path for the additional EBS volume is /opt/sagemaker. "EbsVolumeConfig":{ // Specify an integer between 1 and 16384 in gigabytes (GB). "VolumeSizeInGB": integer, } } ] }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster" } ], // Optional "Tags": [ { "Key": "string", "Value": "string" } ], // Optional "VpcConfig": { "SecurityGroupIds": [ "string" ], "Subnets": [ "string" ] } }

    Selon la façon dont vous concevez la structure du cluster par le biais de vos scripts de cycle de vie, vous pouvez configurer jusqu’à 20 groupes d’instances sous le paramètre InstanceGroups.

    Pour le paramètre de demande Tags, vous pouvez ajouter des balises personnalisées pour gérer le cluster SageMaker HyperPod en tant que ressource AWS. Vous pouvez ajouter des balises à votre cluster de la même manière que vous les ajoutez dans d’autres services AWS qui prennent en charge le balisage. Pour en savoir plus sur le balisage des ressources AWS en général, consultez le Guide de l’utilisateur Ressources AWS de balisage.

    Pour le paramètre de demande VpcConfig, spécifiez les informations d’un VPC que vous souhaitez utiliser. Pour plus d’informations, consultez Configuration de SageMaker HyperPod avec un réseau Amazon VPC personnalisé.

  3. Exécutez la commande create-cluster comme suit.

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

    L’ARN du nouveau cluster devrait être renvoyé.

Description d’un cluster

Exécutez describe-cluster pour vérifier le statut du cluster. Vous pouvez spécifier le nom ou l’ARN du cluster.

aws sagemaker describe-cluster --cluster-name your-hyperpod-cluster

Une fois que le statut du cluster passe à InService, passez à l’étape suivante. À l’aide de cette API, vous pouvez également récupérer les messages d’échec liés à l’exécution d’autres opérations d’API HyperPod.

Liste des détails des nœuds du cluster

Exécutez list-cluster-nodes pour vérifier les informations clés des nœuds du cluster.

aws sagemaker list-cluster-nodes --cluster-name your-hyperpod-cluster

Cela renvoie une réponse et InstanceId correspond à ce dont vous avez besoin pour vous y connecter (en utilisant aws ssm).

Description des détails d’un nœud de cluster

Exécutez describe-cluster-node pour récupérer les détails d’un nœud de cluster. Vous pouvez obtenir l’ID du nœud du cluster à partir de la sortie list-cluster-nodes. Vous pouvez spécifier le nom ou l’ARN du cluster.

aws sagemaker describe-cluster-node \ --cluster-name your-hyperpod-cluster \ --node-id i-111222333444555aa

Liste des clusters

Exécutez list-clusters pour répertorier tous les clusters figurant dans votre compte.

aws sagemaker list-clusters

Vous pouvez également ajouter des indicateurs supplémentaires pour filtrer la liste des clusters. Pour en savoir plus sur ce que cette commande exécute à bas niveau et sur les indicateurs supplémentaires pour le filtrage, consultez la référence de l’API ListClusters.

Mise à jour de la configuration du cluster

Exécutez update-cluster pour mettre à jour la configuration d’un cluster.

Note

Vous pouvez utiliser l’API UpdateCluster pour réduire verticalement ou supprimer les groupes d’instances entiers de votre cluster SageMaker HyperPod. Pour obtenir des instructions supplémentaires sur la manière de réduire verticalement ou de supprimer les groupes d’instances, consultez Réduction verticale d’un cluster.

  1. Créez un fichier de demande UpdateCluster au format JSON. Assurez-vous de spécifier le nom du cluster et le nom du groupe d’instances appropriés à mettre à jour. Vous pouvez modifier le type d’instance, le nombre d’instances, le script de point d’entrée de configuration de cycle de vie et le chemin vers ce script.

    1. Pour ClusterName, spécifiez le nom du cluster que vous voulez mettre à jour.

    2. Pour InstanceGroupName

      1. Pour mettre à jour un groupe d’instances existant, spécifiez le nom du groupe d’instances que vous souhaitez mettre à jour.

      2. Pour ajouter un nouveau groupe d’instances, spécifiez un nouveau nom qui n’existe pas dans votre cluster.

    3. Pour InstanceType

      1. Pour mettre à jour un groupe d’instances existant, vous devez mettre en correspondance le type d’instance que vous avez initialement spécifié avec ce groupe.

      2. Pour ajouter un nouveau groupe d’instances, spécifiez un type d’instance avec lequel vous souhaitez configurer le groupe.

    4. Pour InstanceCount

      1. Pour mettre à jour un groupe d’instances existant, spécifiez un entier correspondant au nombre d’instances que vous souhaitez. Vous pouvez fournir une valeur supérieure ou inférieure (jusqu’à 0) pour augmenter ou réduire verticalement le groupe d’instances.

      2. Pour ajouter un nouveau groupe d’instances, spécifiez un entier supérieur ou égal à 1.

    5. Pour LifeCycleConfig, vous pouvez modifier à la fois les valeurs SourceS3Uri et OnCreate comme vous le souhaitez pour mettre à jour le groupe d’instances.

    6. Pour ExecutionRole

      1. Pour mettre à jour un groupe d’instances existant, continuez à utiliser le même rôle IAM que celui que vous avez attaché lors de la création du cluster.

      2. Pour ajouter un nouveau groupe d’instances, spécifiez un rôle IAM que vous souhaitez attacher.

    7. Pour ThreadsPerCore

      1. Pour mettre à jour un groupe d’instances existant, continuez à utiliser la même valeur que vous avez spécifiée lors de la création du cluster.

      2. Pour ajouter un nouveau groupe d’instances, vous pouvez choisir n’importe quelle valeur parmi les options autorisées par type d’instance. Pour plus d’informations, recherchez le type d’instance et consultez la colonne Threads valides par cœur dans le tableau de référence dans Cœurs de CPU et threads par cœur de CPU par type d’instance dans le Guide de l’utilisateur Amazon EC2.

    L’extrait de code suivant est un modèle de fichier de demande JSON que vous pouvez utiliser. Pour plus d’informations sur la syntaxe et les paramètres de demande de cette API, consultez la référence de l’API UpdateCluster.

    // update_cluster.json { // Required "ClusterName": "name-of-cluster-to-update", // Required "InstanceGroups": [ { "InstanceGroupName": "name-of-instance-group-to-update", "InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster", // Optional: Configure an additional storage per instance group. "InstanceStorageConfigs": [ { // Attach an additional EBS volume to each instance within the instance group. // The default mount path for the additional EBS volume is /opt/sagemaker. "EbsVolumeConfig":{ // Specify an integer between 1 and 16384 in gigabytes (GB). "VolumeSizeInGB": integer, } } ] }, // add more blocks of instance groups as needed { ... } ] }
  2. Exécutez la commande update-cluster suivante pour soumettre la demande.

    aws sagemaker update-cluster \ --cli-input-json file://complete/path/to/update_cluster.json

Mise à jour du logiciel de plateforme SageMaker HyperPod d’un cluster

Exécutez update-cluster-software pour mettre à jour les clusters existants à l’aide des logiciels et des correctifs de sécurité fournis par le service SageMaker HyperPod. Pour --cluster-name, spécifiez le nom ou l’ARN du cluster à mettre à jour.

Important

Notez que vous devez sauvegarder votre travail avant d’exécuter cette API. Le processus d’application de correctifs remplace le volume racine par l’AMI mise à jour, ce qui signifie que les données précédemment stockées dans le volume racine de l’instance seront perdues. Assurez-vous de sauvegarder vos données depuis le volume racine de l’instance vers Amazon S3 ou Amazon FSx pour Lustre. Pour plus d’informations, consultez Utilisation du script de sauvegarde fourni par SageMaker HyperPod.

aws sagemaker update-cluster-software --cluster-name your-hyperpod-cluster

Cette commande appelle l’API UpdateClusterSoftware. Après l’appel d’API, SageMaker HyperPod vérifie si un DLAMI plus récent est disponible pour les instances de cluster. Si une mise à jour de la DLAMI est requise, SageMaker HyperPod mettra à jour les instances de cluster pour utiliser la dernière DLAMI SageMaker HyperPod et exécutera vos scripts de cycle de vie dans le compartiment Amazon S3 que vous avez spécifié lors de la création ou de la mise à jour du cluster. Si le cluster utilise déjà la dernière DLAMI, SageMaker HyperPod n’apportera aucune modification au cluster et ne réexécutera pas les scripts de cycle de vie. L’équipe de service SageMaker HyperPod lance régulièrement de nouvelles DLAMI SageMaker HyperPod destinées à renforcer la sécurité et à améliorer l’expérience utilisateur. Nous vous recommandons de toujours utiliser la dernière DLAMI SageMaker HyperPod. Pour les futures mises à jour de la DLAMI SageMaker HyperPod relatives aux correctifs de sécurité, consultez les Notes de mise à jour d’Amazon SageMaker HyperPod.

Astuce

Si l’application du correctif de sécurité échoue, vous pouvez extraire les messages d’échec en exécutant l’API DescribeCluster comme indiqué dans Description d’un cluster.

Note

Vous pouvez exécuter cette API uniquement par programmation. La fonctionnalité d’application de correctifs n’est pas implémentée dans l’interface utilisateur de la console SageMaker HyperPod.

Utilisation du script de sauvegarde fourni par SageMaker HyperPod

SageMaker HyperPod fournit un script pour sauvegarder et restaurer vos données dans 1.architectures/5.sagemaker-hyperpod/patching-backup.sh, dans le référentiel GitHub Awsome Distributed Training. Le script fournit les deux fonctions suivantes.

Pour sauvegarder les données dans un compartiment S3 avant d’appliquer des correctifs

sudo bash patching-backup.sh --create <s3-buckup-bucket-path>

Après avoir exécuté la commande, le script vérifie squeue s’il existe des tâches en file d’attente, arrête Slurm s’il n’y a aucune tâche dans la file d’attente, sauvegarde mariadb et copie les éléments locaux sur le disque défini sous LOCAL_ITEMS. Vous pouvez ajouter d’autres fichiers et répertoires dans LOCAL_ITEMS.

# Define files and directories to back up. LOCAL_ITEMS=( "/var/spool/slurmd" "/var/spool/slurmctld" "/etc/systemd/system/slurmctld.service" "/home/ubuntu/backup_slurm_acct_db.sql" # ... Add more items as needed )

Vous pouvez également ajouter du code personnalisé au script fourni pour sauvegarder toutes les applications adaptées à votre cas d’utilisation.

Pour restaurer des données à partir d’un compartiment S3 après avoir appliqué des correctifs

sudo bash patching-backup.sh --restore <s3-buckup-bucket-path>

Réduction verticale d’un cluster

Vous pouvez réduire verticalement le nombre d’instances ou supprimer des groupes d’instances dans votre cluster SageMaker HyperPod afin d’optimiser l’allocation des ressources ou de réduire les coûts.

Pour réduire verticalement, vous pouvez utiliser l’opération d’API UpdateCluster pour résilier de manière aléatoire des instances de votre groupe d’instances jusqu’à un nombre spécifié, ou résilier des instances spécifiques à l’aide de l’opération d’API BatchDeleteClusterNodes. Vous pouvez également supprimer complètement des groupes d’instances entiers à l’aide de l’API UpdateCluster. Pour plus d’informations sur la réduction verticale à l’aide de ces méthodes, consultez Réduction verticale d’un cluster SageMaker HyperPod.

Note

Vous ne pouvez pas supprimer des instances configurées en tant que nœuds de contrôleur Slurm. Toute tentative de suppression d’un nœud de contrôleur Slurm entraîne une erreur de validation avec le code d’erreur NODE_ID_IN_USE.

Supprimer un cluster

Exécutez delete-cluster pour supprimer un cluster. Vous pouvez spécifier le nom ou l’ARN du cluster.

aws sagemaker delete-cluster --cluster-name your-hyperpod-cluster