Utilisation de la planification basée sur la topologie dans la gouvernance des tâches Amazon SageMaker HyperPod - 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.

Utilisation de la planification basée sur la topologie dans la gouvernance des tâches Amazon SageMaker HyperPod

La planification basée sur la topologie dans le cadre de la gouvernance des SageMaker HyperPod tâches Amazon optimise l'efficacité de la formation des charges de travail d'apprentissage automatique distribuées en plaçant des pods en fonction de la topologie du réseau physique de vos instances Amazon. EC2 En tenant compte de la structure hiérarchique de l' AWS infrastructure, y compris les zones de disponibilité, les blocs réseau et les racks physiques, la planification basée sur la topologie garantit que les pods nécessitant des communications fréquentes sont planifiés à proximité afin de minimiser la latence du réseau. Ce placement intelligent est particulièrement utile pour les tâches de formation à l'apprentissage automatique à grande échelle qui impliquent une pod-to-pod communication intensive, ce qui se traduit par une réduction des temps de formation et une utilisation plus efficace des ressources au sein de votre cluster.

Note

Pour utiliser la planification basée sur la topologie, assurez-vous que votre version de la gouvernance des HyperPod tâches est v1.2.2-eksbuild.1 ou supérieure.

La planification basée sur la topologie prend en charge les types d'instances suivants :

  • ml.p3dn.24xlarge

  • ml.p4d.24xlarge

  • ml.p4de.24xlarge

  • ml.p 5,48 x large

  • ml.p5e.48 x large

  • ml.p5en.48xlarge

  • ml.p6e-gb200.36 x large

  • ml.trn 1,2 x large

  • ml.trn 1,32 x large

  • ml.trn1n.32xlarge

  • ml.trn 2,48 x large

  • ml.trn2u.48xlarge

La planification basée sur la topologie s'intègre à vos HyperPod flux de travail existants tout en fournissant des préférences topologiques flexibles via les fichiers KUBECTL YAML et la CLI. HyperPod HyperPod la gouvernance des tâches configure automatiquement les nœuds du cluster avec des étiquettes topologiques et fonctionne avec des politiques de gouvernance des HyperPod tâches et des mécanismes d'emprunt de ressources, garantissant ainsi que la planification tenant compte de la topologie ne perturbe pas vos processus opérationnels actuels. Grâce à la prise en charge intégrée des spécifications topologiques préférées et requises, vous pouvez affiner le placement de la charge de travail en fonction de vos exigences de performances spécifiques tout en conservant la flexibilité nécessaire pour revenir à une planification standard lorsque les contraintes topologiques ne peuvent pas être satisfaites.

En intégrant des étiquettes adaptées à la topologie HyperPod, vous pouvez améliorer leurs charges de travail d'apprentissage automatique grâce à un placement intelligent des modules qui tient compte de l'infrastructure réseau physique. HyperPod la gouvernance des tâches optimise automatiquement la planification des pods en fonction de la topologie hiérarchique du centre de données, ce qui se traduit directement par une réduction de la latence du réseau et une amélioration des performances de formation pour les tâches de machine learning distribuées. Cette connaissance de la topologie est particulièrement utile pour les charges de travail d'apprentissage automatique à grande échelle, car elle minimise les frais de communication en rapprochant stratégiquement les modules associés dans la hiérarchie du réseau. Il en résulte une latence du réseau de communication optimisée entre les pods, une utilisation plus efficace des ressources et de meilleures performances globales pour les AI/ML applications gourmandes en calcul, le tout sans que vous ayez à gérer manuellement des configurations de topologie réseau complexes.

Les étiquettes suivantes indiquent les couches réseau topologiques disponibles dans lesquelles la gouvernance des HyperPod tâches peut planifier des pods :

  • topologie.k8s.aws/ -1 network-node-layer

  • topologie.k8s.aws/ -2 network-node-layer

  • topologie.k8s.aws/ -3 network-node-layer

Pour utiliser la planification basée sur la topologie, incluez les libellés suivants dans votre fichier YAML :

  • kueue.x-k8s.io/ podset-required-topology - indique que cette tâche doit disposer des pods requis et que tous les pods des nœuds doivent être planifiés au sein de la même couche topologique.

  • kueue.x-k8s.io/ podset-preferred-topology - indique que cette tâche doit comporter les pods, mais que la planification des pods au sein de la même couche topologique est préférable mais pas obligatoire. HyperPod la gouvernance des tâches essaiera de planifier les pods au sein d'une couche avant d'essayer la couche topologique suivante.

Si les ressources ne partagent pas le même label topologique, le travail sera suspendu. Le poste figurera sur la liste d'attente. Une fois que Kueue aura constaté qu'il y a suffisamment de ressources, il admettra et exécutera le travail.

L'exemple suivant montre comment utiliser les étiquettes dans vos fichiers YAML :

apiVersion: batch/v1 kind: Job metadata: name: test-tas-job 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-priority spec: parallelism: 10 completions: 10 suspend: true template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue annotations: kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" or kueue.x-k8s.io/podset-preferred-topology: "topology.k8s.aws/network-node-layer-3" spec: nodeSelector: topology.k8s.aws/network-node-layer-3: TOPOLOGY_LABEL_VALUE containers: - name: dummy-job image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0 args: ["3600s"] resources: requests: cpu: "100" restartPolicy: Never

Le tableau suivant explique les nouveaux paramètres que vous pouvez utiliser dans le fichier YAML kubectl.

Paramètre Description
kueue.x-k8s.io/nom-de-file Nom de la file d'attente à utiliser pour exécuter le job. Le format de ce nom de file d'attente doit être. hyperpod-ns-team-name-localqueue
kueue.x-k8s.io/classe-priorité Permet de définir une priorité pour la planification des modules. Cette spécification est facultative.
annotations Contient l'annotation topologique que vous attachez à la tâche. Les topologies disponibles sont kueue.x-k8s.io/ et podset-required-topology kueue.x-k8s.io/. podset-preferred-topology Vous pouvez utiliser une annotation ou NodeSelector, mais pas les deux en même temps.
Sélecteur de nœuds Spécifie la couche réseau qui représente la couche de placement des EC2 instances Amazon. Utilisez ce champ ou une annotation, mais pas les deux en même temps. Dans votre fichier YAML, vous pouvez également utiliser le paramètre NodeSelector pour choisir la couche exacte pour vos pods. Pour obtenir la valeur de votre étiquette, utilisez l'opération DescribeInstanceTopologyAPI.

Vous pouvez également utiliser la HyperPod CLI pour exécuter votre tâche et utiliser une planification adaptée à la topologie. Pour plus d'informations sur la HyperPod CLI, consultezSageMaker HyperPod Commandes CLI.

hyp create hyp-pytorch-job \ --version 1.1 \ --job-name sample-pytorch-job \ --image 123456789012.dkr.ecr.us-west-2.amazonaws.com/ptjob:latest \ --pull-policy "Always" \ --tasks-per-node 1 \ --max-retry 1 \ --priority high-priority \ --namespace hyperpod-ns-team-name \ --queue-name hyperpod-ns-team-name-localqueue \ --preferred-topology-label topology.k8s.aws/network-node-layer-1

Voici un exemple de fichier de configuration que vous pouvez utiliser pour exécuter un PytorchJob avec des étiquettes topologiques. Le fichier est largement similaire si vous souhaitez exécuter des tâches MPI et Tensorflow. Si vous souhaitez plutôt exécuter ces tâches, n'oubliez pas de modifier le fichier de configuration en conséquence, par exemple en utilisant la bonne image au lieu de PyTorchJob. Si vous exécutez un PyTorchJob, vous pouvez attribuer différentes topologies aux nœuds maître et secondaire. PyTorchJob possède toujours un nœud principal. Nous vous recommandons donc d'utiliser plutôt la topologie pour prendre en charge les modules de travail.

apiVersion: kubeflow.org/v1 kind: PyTorchJob metadata: annotations: {} labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue name: tas-test-pytorch-job namespace: hyperpod-ns-team-name spec: pytorchReplicaSpecs: Master: replicas: 1 restartPolicy: OnFailure template: metadata: labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch Worker: replicas: 10 restartPolicy: OnFailure template: metadata: # annotations: # kueue.x-k8s.io/podset-required-topology: "topology.k8s.aws/network-node-layer-3" labels: kueue.x-k8s.io/queue-name: hyperpod-ns-team-name-localqueue spec: containers: - command: - python3 - /opt/pytorch-mnist/mnist.py - --epochs=1 image: docker.io/kubeflowkatib/pytorch-mnist:v1beta1-45c5727 imagePullPolicy: Always name: pytorch resources: limits: cpu: 1 requests: memory: 200Mi cpu: 1 #nodeSelector: # topology.k8s.aws/network-node-layer-3: xxxxxxxxxxx

Pour voir les topologies de votre cluster, utilisez l'opération DescribeInstanceTopologyAPI. Par défaut, les topologies sont masquées dans AWS Management Console Amazon SageMaker Studio. Suivez ces étapes pour les afficher dans l'interface que vous utilisez.

SageMaker Studio

  1. Dans SageMaker Studio, accédez à votre cluster.

  2. Dans la vue Tâches, choisissez le menu des options dans la colonne Nom, puis sélectionnez Gérer les colonnes.

  3. Sélectionnez Topologie demandée et Contrainte de topologie pour ajouter les colonnes permettant d'afficher les informations topologiques dans la liste des pods Kubernetes.

AWS Management Console

  1. Ouvrez la console Amazon SageMaker AI à l'adresse https://console.aws.amazon.com/sagemaker/.

  2. Sous HyperPod clusters, choisissez Cluster management.

  3. Cliquez sur l'onglet Tâches, puis sur l'icône représentant un engrenage.

  4. Sous les attributs de l'instance, activez Topologie demandée et Contrainte topologique.

  5. Choisissez Confirmer pour voir les informations topologiques dans le tableau.