

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.

# Exécution de tâches sur SageMaker HyperPod des clusters orchestrés par Amazon EKS
<a name="sagemaker-hyperpod-eks-run-jobs"></a>

Les rubriques suivantes fournissent des procédures et des exemples d'accès aux nœuds de calcul et d'exécution de charges de travail ML sur des SageMaker HyperPod clusters provisionnés orchestrés avec Amazon EKS. Selon la façon dont vous avez configuré l'environnement sur votre HyperPod cluster, il existe de nombreuses manières d'exécuter des charges de travail ML sur des HyperPod clusters.

**Note**  
Lorsque vous exécutez des tâches via la SageMaker HyperPod CLI ou kubectl, HyperPod vous pouvez suivre l'utilisation du calcul (heures GPU/CPU) dans les espaces de noms (équipes). Ces métriques alimentent des rapports d’utilisation, qui fournissent :  
Visibilité au niveau de la consommation des ressources allouées et empruntées
Utilisation des ressources des équipes pour l’audit (jusqu’à 180 jours)
Attribution des coûts conforme aux politiques de gouvernance des tâches
Pour utiliser les rapports d’utilisation, vous devez installer l’infrastructure des rapports d’utilisation. Nous vous recommandons vivement de configurer la [gouvernance des tâches](sagemaker-hyperpod-eks-operate-console-ui-governance.md) pour appliquer des quotas de calcul et permettre une attribution granulaire des coûts.  
Pour plus d'informations sur la configuration et la génération de rapports d'utilisation, voir [Signaler l'utilisation du calcul dans HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-usage-reporting.html).

**Astuce**  
Pour une expérience pratique et des conseils sur la façon de configurer et d'utiliser un SageMaker HyperPod cluster orchestré avec Amazon EKS, nous vous recommandons de suivre cet SageMaker HyperPod atelier de [support Amazon EKS](https://catalog.us-east-1.prod.workshops.aws/workshops/2433d39e-ccfe-4c00-9d3d-9917b729258e).

Les utilisateurs de data scientists peuvent entraîner des modèles fondamentaux à l'aide du cluster EKS défini comme orchestrateur du SageMaker HyperPod cluster. Les scientifiques utilisent la [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) et les `kubectl` commandes natives pour trouver les SageMaker HyperPod clusters disponibles, soumettre des tâches de formation (Pods) et gérer leurs charges de travail. La SageMaker HyperPod CLI permet de soumettre des tâches à l'aide d'un fichier de schéma de tâches de formation et fournit des fonctionnalités de liste, de description, d'annulation et d'exécution des tâches. Les scientifiques peuvent utiliser [Kubeflow Training Operator](https://www.kubeflow.org/docs/components/training/overview/) conformément aux quotas de calcul gérés par et gérés par HyperPod l'[SageMaker IA MLflow pour gérer les expériences de machine](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html) learning et les cycles d'entraînement. 

**Topics**
+ [Installation de la SageMaker HyperPod CLI](sagemaker-hyperpod-eks-run-jobs-access-nodes.md)
+ [SageMaker HyperPod Commandes CLI](sagemaker-hyperpod-eks-hyperpod-cli-reference.md)
+ [Exécution de tâches à l'aide de la SageMaker HyperPod CLI](sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.md)
+ [Exécution de tâches à l’aide de `kubectl`](sagemaker-hyperpod-eks-run-jobs-kubectl.md)

# Installation de la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-eks-run-jobs-access-nodes"></a>

SageMaker HyperPod fournit le SageMaker HyperPod package d'[interface de ligne](https://github.com/aws/sagemaker-hyperpod-cli) de commande (CLI). 

1. Vérifiez si la version de Python sur votre ordinateur local est comprise entre 3.8 et 3.11.

1. Vérifiez les prérequis dans le fichier `README` Markdown du package [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli).

1. Clonez le package SageMaker HyperPod CLI à partir de GitHub.

   ```
   git clone https://github.com/aws/sagemaker-hyperpod-cli.git
   ```

1. Installez la SageMaker HyperPod CLI.

   ```
   cd sagemaker-hyperpod-cli && pip install .
   ```

1. Vérifiez si la SageMaker HyperPod CLI est correctement installée en exécutant la commande suivante. 

   ```
   hyperpod --help
   ```

**Note**  
Si vous êtes un data scientist et que vous souhaitez utiliser la SageMaker HyperPod CLI, assurez-vous que votre rôle IAM est correctement configuré par les administrateurs de votre cluster en suivant les instructions figurant aux [Utilisateurs IAM pour les scientifiques](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-user) points et. [Configuration du contrôle d’accès basé sur les rôles Kubernetes](sagemaker-hyperpod-eks-setup-rbac.md)

# SageMaker HyperPod Commandes CLI
<a name="sagemaker-hyperpod-eks-hyperpod-cli-reference"></a>

Le tableau suivant récapitule les commandes de la SageMaker HyperPod CLI.

**Note**  
Pour une référence complète de la CLI, voir [README](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#sagemaker-hyperpod-command-line-interface) dans le [ GitHubréférentiel de la SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli).


| SageMaker HyperPod commande CLI | Entité  | Description | 
| --- | --- | --- | 
| hyperpod get-clusters | cluster/accès | Répertorie tous les clusters auxquels l'utilisateur a été autorisé à soumettre des charges de travail de formation avec les autorisations IAM. Fournit un aperçu actuel de l'ensemble des instances disponibles qui n'exécutent aucune charge de travail ou aucune tâche, avec une capacité maximale, en les regroupant par état de santé (par exemple :) BurnInPassed | 
| hyperpod connect-cluster | cluster/accès | Configure kubectl pour fonctionner sur le HyperPod cluster et l'espace de noms spécifiés | 
| hyperpod start-job  | tâche | Soumet la tâche au cluster ciblé. Le nom de la tâche sera unique au niveau de l’espace de noms. Les utilisateurs pourront remplacer les spécifications yaml en les transmettant comme arguments de la CLI | 
| hyperpod get-job | tâche | Affiche les métadonnées de la tâche soumise | 
| hyperpod list-jobs | tâche | Répertorie toutes les tâches connectées cluster/namespace auxquelles l'utilisateur a été ajouté avec les autorisations IAM pour soumettre des charges de travail de formation | 
| hyperpod cancel-job | tâche | Arrête et supprime la tâche et abandonne les ressources de calcul sous-jacentes. Cette tâche ne peut pas être reprise. Une nouvelle tâche doit être démarrée, si nécessaire. | 
| hyperpod list-pods | pod | Répertorie tous les pods de la tâche donnée dans un espace de noms | 
| hyperpod get-log | pod | Extrait les journaux d’un pod particulier dans le cadre d’une tâche spécifiée | 
| hyperpod exec | pod | Exécute la commande bash dans le shell du ou des pods spécifiés et publie le résultat | 
| hyperpod --help | utilitaire | Répertorie toutes les commandes prises en charge | 

# Exécution de tâches à l'aide de la SageMaker HyperPod CLI
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli"></a>

Pour exécuter des tâches, assurez-vous d’avoir installé Kubeflow Training Operator dans les clusters EKS. Pour de plus amples informations, veuillez consulter [Installation de packages sur le cluster Amazon EKS à l’aide de Helm](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md).

Exécutez la `hyperpod get-cluster` commande pour obtenir la liste des HyperPod clusters disponibles.

```
hyperpod get-clusters
```

Exécutez le `hyperpod connect-cluster` pour configurer la SageMaker HyperPod CLI avec le cluster EKS orchestrant le HyperPod cluster.

```
hyperpod connect-cluster --cluster-name <hyperpod-cluster-name>
```

Utilisez la commande `hyperpod start-job` pour exécuter une tâche. La commande suivante montre la commande avec les options requises. 

```
hyperpod start-job \
    --job-name <job-name>
    --image <docker-image-uri>
    --entry-script <entrypoint-script>
    --instance-type <ml.instance.type>
    --node-count <integer>
```

La commande `hyperpod start-job` propose également diverses options telles que la reprise automatique des tâches et la planification des tâches.

## Activation de la reprise automatique des tâches
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-enable-auto-resume"></a>

La commande `hyperpod start-job` dispose également des options suivantes pour spécifier la reprise automatique des tâches. Pour que la reprise automatique des tâches fonctionne avec les fonctionnalités de résilience des SageMaker HyperPod nœuds, vous devez définir la valeur de l'`restart-policy`option sur. `OnFailure` La tâche doit être exécutée sous l’espace de noms `kubeflow` ou sous un espace de noms préfixé par `hyperpod`.
+ [--auto-resume <bool>] \$1Optional, activez la reprise automatique des tâches en cas d’échec, la valeur par défaut est false.
+ [--max-retry <int>] \$1Optional, si la reprise automatique est true, la valeur par défaut de max-retry est 1 si elle n’est pas spécifiée.
+ [--restart-policy<enum>] \$1Optional, PyTorchJob politique de redémarrage. Les valeurs disponibles sont `Always`, `OnFailure`, `Never` ou `ExitCode`. La valeur par défaut est `OnFailure`. 

```
hyperpod start-job \
    ... // required options \
    --auto-resume true \
    --max-retry 3 \
    --restart-policy OnFailure
```

## Exécution de tâches avec options de planification
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-scheduling"></a>

La commande `hyperpod start-job` dispose des options suivantes pour configurer la tâche avec des mécanismes de mise en file d’attente. 

**Note**  
[Kueue](https://kueue.sigs.k8s.io/docs/overview/) doit être installé dans le cluster EKS. Si vous ne l’avez pas encore fait, suivez les instructions fournies dans [Configuration pour la gouvernance des SageMaker HyperPod tâches](sagemaker-hyperpod-eks-operate-console-ui-governance-setup.md).
+ [--scheduler-type <enum>] \$1Optional, spécifiez le type de planificateur. La valeur par défaut est `Kueue`.
+ [--queue-name <string>] \$1Optional, spécifiez le nom de la [file d’attente locale](https://kueue.sigs.k8s.io/docs/concepts/local_queue/) ou de la [file d’attente de cluster](https://kueue.sigs.k8s.io/docs/concepts/cluster_queue/) que vous souhaitez soumettre avec la tâche. La file d’attente doit être créée par les administrateurs du cluster à l’aide de `CreateComputeQuota`.
+ [--priority <string>] \$1Optional, spécifiez le nom de la [classe de priorité de charge de travail](https://kueue.sigs.k8s.io/docs/concepts/workload_priority_class/), qui doit être créée par les administrateurs du cluster.

```
hyperpod start-job \
    ... // required options
    --scheduler-type Kueue \
    --queue-name high-priority-queue \
    --priority high
```

## Exécution de tâches à partir d’un fichier de configuration
<a name="sagemaker-hyperpod-eks-run-jobs-hyperpod-cli-from-config"></a>

Vous pouvez également créer un fichier de configuration de tâche contenant tous les paramètres requis par la tâche, puis transmettre ce fichier de configuration à la commande `hyperpod start-job` à l’aide de l’option --config-file. Dans ce cas :

1. Créez votre fichier de configuration de tâche avec les paramètres requis. Reportez-vous au fichier de configuration des tâches dans le GitHub référentiel de la SageMaker HyperPod CLI pour obtenir un [fichier de configuration de base](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-run-jobs-hyperpod-cli.html#sagemaker-hyperpod-eks-hyperpod-cli-from-config).

1. Démarrez la tâche en utilisant le fichier de configuration comme suit.

   ```
   hyperpod start-job --config-file /path/to/test_job.yaml
   ```

**Astuce**  
Pour une liste complète des paramètres de la `hyperpod start-job` commande, consultez la section [Soumission d'un Job](https://github.com/aws/sagemaker-hyperpod-cli?tab=readme-ov-file#submitting-a-job) dans le `README.md` GitHub référentiel SageMaker HyperPod CLI.

# Exécution de tâches à l’aide de `kubectl`
<a name="sagemaker-hyperpod-eks-run-jobs-kubectl"></a>

**Note**  
La reprise automatique des tâches d’entraînement nécessite la version `1.7.0`, `1.8.0` ou `1.8.1` de Kubeflow Training Operator.

Notez que vous devez installer Kubeflow Training Operator dans les clusters à l’aide de Charts de Helm. Pour de plus amples informations, veuillez consulter [Installation de packages sur le cluster Amazon EKS à l’aide de Helm](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md). Vérifiez si le plan de contrôle de Kubeflow Training Operator est correctement configuré en exécutant la commande suivante.

```
kubectl get pods -n kubeflow
```

Cela devrait retourner une sortie semblable à ce qui suit.

```
NAME                                             READY   STATUS    RESTARTS   AGE
training-operator-658c68d697-46zmn               1/1     Running   0          90s
```

**Pour soumettre une tâche d’entraînement**

Pour exécuter une tâche d’entraînement, préparez le fichier de configuration de la tâche et exécutez la commande [https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) comme suit.

```
kubectl apply -f /path/to/training_job.yaml
```

**Pour décrire une tâche d’entraînement**

Pour extraire les détails de la tâche soumise au cluster EKS, utilisez la commande suivante. Elle renvoie des informations sur la tâche telles que l’heure de soumission, le temps d’exécution, le statut et les détails de configuration de la tâche.

```
kubectl get -o yaml training-job -n kubeflow
```

**Pour arrêter une tâche d’entraînement et supprimer les ressources EKS**

Pour arrêter une tâche d’entraînement, utilisez kubectl delete. Voici un exemple d’arrêt d’une tâche d’entraînement créée à partir du fichier de configuration `pytorch_job_simple.yaml`.

```
kubectl delete -f /path/to/training_job.yaml 
```

La sortie suivante doit être renvoyée :

```
pytorchjob.kubeflow.org "training-job" deleted
```

**Pour activer la reprise automatique des tâches**

SageMaker HyperPod prend en charge la fonctionnalité de reprise automatique des tâches pour les tâches Kubernetes, en s'intégrant au plan de contrôle Kubeflow Training Operator.

Assurez-vous que le cluster compte un nombre suffisant de nœuds ayant passé avec succès le test SageMaker HyperPod de santé. Les nœuds doivent avoir le rejet `sagemaker.amazonaws.com/node-health-status` défini sur `Schedulable`. Il est recommandé d’inclure un sélecteur de nœuds dans le fichier YAML de tâche pour sélectionner les nœuds avec la configuration appropriée comme suit.

```
sagemaker.amazonaws.com/node-health-status: Schedulable
```

L'extrait de code suivant est un exemple de modification de la configuration YAML d'une tâche Kubeflow pour activer la fonctionnalité de reprise automatique de la PyTorch tâche. Vous devez ajouter deux annotations et définir `restartPolicy` sur `OnFailure` comme suit.

```
apiVersion: "kubeflow.org/v1"
kind: PyTorchJob 
metadata:
    name: pytorch-simple
    namespace: kubeflow
    annotations: { // config for job auto resume
      sagemaker.amazonaws.com/enable-job-auto-resume: "true"
      sagemaker.amazonaws.com/job-max-retry-count: "2"
    }
spec:
  pytorchReplicaSpecs:
  ......
  Worker:
      replicas: 10
      restartPolicy: OnFailure
      template:
          spec:
              nodeSelector:
                  sagemaker.amazonaws.com/node-health-status: Schedulable
```

**Pour vérifier le statut de reprise automatique des tâches**

Exécutez la commande suivante pour vérifier le statut de la reprise automatique des tâches.

```
kubectl describe pytorchjob -n kubeflow <job-name>
```

En fonction des modèles d’échec, vous pouvez observer deux modèles de redémarrage des tâches d’entraînement Kubeflow, comme suit.

**Modèle 1** :

```
Start Time:    2024-07-11T05:53:10Z
Events:
  Type     Reason                   Age                    From                   Message
  ----     ------                   ----                   ----                   -------
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-0
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-worker-1
  Normal   SuccessfulCreateService  9m45s                  pytorchjob-controller  Created service: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m59s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Master replica(s) failed.
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-0
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-worker-1
  Normal   SuccessfulCreatePod      7m58s (x2 over 9m45s)  pytorchjob-controller  Created pod: pt-job-1-master-0
  Warning  PyTorchJobRestarting     7m58s                  pytorchjob-controller  PyTorchJob pt-job-1 is restarting because 1 Worker replica(s) failed.
```

**Modèle 2** : 

```
Events:
  Type    Reason                   Age    From                   Message
  ----    ------                   ----   ----                   -------
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      19m    pytorchjob-controller  Created pod: pt-job-2-master-0
  Normal  SuccessfulCreateService  19m    pytorchjob-controller  Created service: pt-job-2-master-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-worker-0
  Normal  SuccessfulCreatePod      4m48s  pytorchjob-controller  Created pod: pt-job-2-master-0
```