Exemples de commandes AWS CLI de gouvernance des tâches HyperPod - Amazon SageMaker AI

Exemples de commandes AWS CLI de gouvernance des tâches HyperPod

Vous pouvez utiliser HyperPod avec EKS via Kubectl ou via une CLI personnalisée d’HyperPod. Vous pouvez utiliser ces commandes via Studio ou AWS CLI. Vous trouverez ci-dessous des exemples de gouvernance des tâches SageMaker HyperPod, expliquant comment afficher les détails du cluster à l’aide des commandes AWS CLI HyperPod. Pour plus d’informations, notamment sur la procédure d’installation, consultez le référentiel Github de la CLI d’HyperPod.

Obtention d’informations sur les quotas d’appareil accélérateur de cluster

L’exemple de commande suivant permet d’obtenir des informations sur le quota d’appareil accélérateur de cluster.

hyperpod get-clusters -n hyperpod-ns-test-team

L’espace de noms de cet exemple, hyperpod-ns-test-team, est créé dans Kubernetes en fonction du nom d’équipe fourni, test-team, lors de la création de l’allocation de calcul. Pour plus d’informations, consultez Modification des politiques.

Exemple de réponse :

[ { "Cluster": "hyperpod-eks-test-cluster-id", "InstanceType": "ml.g5.xlarge", "TotalNodes": 2, "AcceleratorDevicesAvailable": 1, "NodeHealthStatus=Schedulable": 2, "DeepHealthCheckStatus=Passed": "N/A", "Namespaces": { "hyperpod-ns-test-team": { "TotalAcceleratorDevices": 1, "AvailableAcceleratorDevices": 1 } } } ]

Soumission d’une tâche à la file d’attente et à l’espace de noms gérés par SageMaker AI

L’exemple de commande suivant soumet une tâche à votre cluster HyperPod. Si vous n’avez accès qu’à une seule équipe, l’HyperPod AWS CLI vous attribuera automatiquement la file d’attente dans ce cas. Sinon, si plusieurs files d’attente sont découvertes, nous vous proposerons toutes les options viables que vous pourrez sélectionner.

hyperpod start-job --job-name hyperpod-cli-test --job-kind kubeflow/PyTorchJob --image docker.io/kubeflowkatib/pytorch-mnist-cpu:v1beta1-bc09cfd --entry-script /opt/pytorch-mnist/mnist.py --pull-policy IfNotPresent --instance-type ml.g5.xlarge --node-count 1 --tasks-per-node 1 --results-dir ./result --priority training-priority

Les classes de priorité sont définies dans la politique du cluster, qui définit la manière dont les tâches sont priorisées et les ressources de calcul inactives allouées. Lorsqu’un scientifique des données soumet une tâche, il utilise l’un des noms de classe de priorité avec le format priority-class-name-priority. Dans cet exemple, training-priority fait référence à la classe de priorité nommée « entraînement ». Pour plus d’informations sur les concepts de la politique, consultez Politiques.

Si aucune classe de priorité n’est spécifiée, la tâche est traitée comme une tâche de faible priorité, avec une valeur de classement des tâches de 0.

Si une classe de priorité est spécifiée, mais qu’elle ne correspond pas à l’une des classes de priorité définies dans la politique de cluster, la soumission échoue et un message d’erreur fournit l’ensemble défini de classes de priorité.

Vous pouvez également soumettre la tâche à l’aide d’un fichier de configuration YAML en utilisant la commande suivante :

hyperpod start-job --config-file ./yaml-configuration-file-name.yaml

Voici un exemple de fichier de configuration YAML équivalent à la soumission d’une tâche, comme indiqué ci-dessus.

defaults: - override hydra/job_logging: stdout hydra: run: dir: . output_subdir: null training_cfg: entry_script: /opt/pytorch-mnist/mnist.py script_args: [] run: name: hyperpod-cli-test nodes: 1 ntasks_per_node: 1 cluster: cluster_type: k8s instance_type: ml.g5.xlarge custom_labels: kueue.x-k8s.io/priority-class: training-priority cluster_config: label_selector: required: sagemaker.amazonaws.com/node-health-status: - Schedulable preferred: sagemaker.amazonaws.com/deep-health-check-status: - Passed weights: - 100 pullPolicy: IfNotPresent base_results_dir: ./result container: docker.io/kubeflowkatib/pytorch-mnist-cpu:v1beta1-bc09cfd env_vars: NCCL_DEBUG: INFO

Vous pouvez également soumettre une tâche en utilisant kubectl pour vous assurer que la tâche apparaît dans l’onglet Tableau de bord. Voici un exemple de commande kubectl.

kubectl apply -f ./yaml-configuration-file-name.yaml

Lorsque vous soumettez la tâche, assurez-vous d’inclure le nom de votre file d’attente et les étiquettes de classe de priorité. Par exemple, avec le nom de la file d’attente hyperpod-ns-team-name-localqueue et la classe de priorité priority-class-name-priority, vous devez inclure les étiquettes suivantes :

  • kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue

  • kueue.x-k8s.io/priority-class: priority-class-name-priority

L’extrait de configuration YAML suivant montre comment ajouter des étiquettes à votre fichier de configuration d’origine pour vous assurer que votre tâche apparaîtra dans l’onglet Tableau de bord :

metadata: name: job-name namespace: hyperpod-ns-team-name labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue kueue.x-k8s.io/priority-class: priority-class-name-priority

Affichage des tâches

La commande suivante répertorie les tâches et leurs détails.

hyperpod list-jobs

Exemple de réponse :

{ "jobs": [ { "Name": "hyperpod-cli-test", "Namespace": "hyperpod-ns-test-team", "CreationTime": "2024-11-18T21:21:15Z", "Priority": "training", "State": "Succeeded" } ] }

Obtention des informations détaillées sur une tâche

La commande suivante fournit les détails d’une tâche. Si aucun espace de noms n’est spécifié, l’AWS CLI d’HyperPod récupère un espace de noms géré par SageMaker AI auquel vous avez accès.

hyperpod get-job --job-name hyperpod-cli-test

Exemple de réponse :

{ "Name": "hyperpod-cli-test", "Namespace": "hyperpod-ns-test-team", "Label": { "app": "hyperpod-cli-test", "app.kubernetes.io/managed-by": "Helm", "kueue.x-k8s.io/priority-class": "training" }, "CreationTimestamp": "2024-11-18T21:21:15Z", "Status": { "completionTime": "2024-11-18T21:25:24Z", "conditions": [ { "lastTransitionTime": "2024-11-18T21:21:15Z", "lastUpdateTime": "2024-11-18T21:21:15Z", "message": "PyTorchJob hyperpod-cli-test is created.", "reason": "PyTorchJobCreated", "status": "True", "type": "Created" }, { "lastTransitionTime": "2024-11-18T21:21:17Z", "lastUpdateTime": "2024-11-18T21:21:17Z", "message": "PyTorchJob hyperpod-ns-test-team/hyperpod-cli-test is running.", "reason": "PyTorchJobRunning", "status": "False", "type": "Running" }, { "lastTransitionTime": "2024-11-18T21:25:24Z", "lastUpdateTime": "2024-11-18T21:25:24Z", "message": "PyTorchJob hyperpod-ns-test-team/hyperpod-cli-test successfully completed.", "reason": "PyTorchJobSucceeded", "status": "True", "type": "Succeeded" } ], "replicaStatuses": { "Worker": { "selector": "training.kubeflow.org/job-name=hyperpod-cli-test,training.kubeflow.org/operator-name=pytorchjob-controller,training.kubeflow.org/replica-type=worker", "succeeded": 1 } }, "startTime": "2024-11-18T21:21:15Z" }, "ConsoleURL": "https://us-west-2.console.aws.amazon.com/sagemaker/home?region=us-west-2#/cluster-management/hyperpod-eks-test-cluster-id“ }

Suspension et annulation de la suspension de tâches

Si vous souhaitez supprimer une tâche soumise du planificateur, l’AWS CLI d’HyperPod fournit la commande suspend permettant de supprimer temporairement la tâche de l’orchestration. La tâche suspendue ne sera plus planifiée à moins que la suspension de la tâche soit annulée manuellement par la commande unsuspend.

Pour suspendre temporairement une tâche :

hyperpod patch-job suspend --job-name hyperpod-cli-test

Pour replacer une tâche dans la file d’attente :

hyperpod patch-job unsuspend --job-name hyperpod-cli-test

Débogage de tâches

L’AWS CLI d’HyperPod fournit également d’autres commandes vous permettant de résoudre les problèmes de soumission de tâches. Par exemple, list-pods et get-logs dans le référentiel Github de l’AWS CLI d’HyperPod.