

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.

# Configuration de partitions GPU sur Amazon SageMaker HyperPod
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup"></a>

**Topics**
+ [Conditions préalables](#sagemaker-hyperpod-eks-gpu-partitioning-setup-prerequisites)
+ [Création d'un cluster avec une configuration MIG](#sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster)
+ [Ajouter un opérateur GPU à un cluster existant](#sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator)
+ [Mise à jour de la configuration MIG](#sagemaker-hyperpod-eks-gpu-partitioning-setup-update)
+ [Vérification de la configuration MIG](#sagemaker-hyperpod-eks-gpu-partitioning-setup-verify)
+ [Commandes courantes pour le débogage de la configuration MIG](#sagemaker-hyperpod-eks-gpu-partitioning-setup-debug-commands)
+ [Utilisation de la console SageMaker AI](#sagemaker-hyperpod-eks-gpu-partitioning-setup-console)

## Conditions préalables
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-prerequisites"></a>
+ HyperPod Cluster Amazon EKS avec instances GPU prises en charge
+ Opérateur GPU NVIDIA installé
+ Autorisations IAM appropriées pour la gestion des clusters

## Création d'un cluster avec une configuration MIG
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster"></a>

### Utilisation AWS CLI
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster-cli"></a>

```
aws sagemaker create-cluster \
  --cluster-name my-mig-cluster \
  --orchestrator 'Eks={ClusterArn=arn:aws:eks:{{region}}:{{account}}:cluster/{{cluster-name}}}' \
  --instance-groups '{
    "InstanceGroupName": "gpu-group",
    "InstanceType": "ml.p4d.24xlarge",
    "InstanceCount": 1,
    "LifeCycleConfig": {
       "SourceS3Uri": "s3://{{my-bucket}}",
       "OnCreate": "on_create_script.sh"
    },
    "KubernetesConfig": {
       "Labels": {
          "nvidia.com/mig.config": "all-1g.5gb"
       }
    },
    "ExecutionRole": "arn:aws:iam::{{account}}:role/{{execution-role}}",
    "ThreadsPerCore": 1
  }' \
  --vpc-config '{
     "SecurityGroupIds": ["{{sg-12345}}"],
     "Subnets": ["{{subnet-12345}}"]
  }' \
  --node-provisioning-mode Continuous
```

### Utilisation CloudFormation
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-create-cluster-cfn"></a>

```
{
  "ClusterName": "my-mig-cluster",
  "InstanceGroups": [
    {
      "InstanceGroupName": "gpu-group",
      "InstanceType": "ml.p4d.24xlarge",
      "InstanceCount": 1,
      "KubernetesConfig": {
        "Labels": {
          "nvidia.com/mig.config": "all-2g.10gb"
        }
      },
      "ExecutionRole": "arn:aws:iam::{{account}}:role/{{execution-role}}"
    }
  ],
  "Orchestrator": {
    "Eks": {
      "ClusterArn": "arn:aws:eks:{{region}}:{{account}}:cluster/{{cluster-name}}"
    }
  },
  "NodeProvisioningMode": "Continuous"
}
```

## Ajouter un opérateur GPU à un cluster existant
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator"></a>

### Installez GPU Operator
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-install"></a>

`{$AWS_REGION}`Remplacez-la par la région de votre cluster (par exemple, us-east-1, us-west-2).

```
helm install gpuo helm_chart/HyperPodHelmChart/charts/gpu-operator \
-f helm_chart/HyperPodHelmChart/charts/gpu-operator/regional-values/values-{$AWS_REGION}.yaml \
-n kube-system
```

### Vérifiez l'installation (attendez 2 à 3 minutes)
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-verify"></a>

Vérifiez que tous les pods d'opérateurs GPU sont en cours d'exécution :

```
kubectl get pods -n kube-system | grep -E "(gpu-operator|nvidia-)"
```

**Pods attendus : **
+ gpu-operator-\* - 1 instance (contrôleur de cluster)
+ nvidia-device-plugin-daemonset-\* - 1 par nœud GPU (toutes les instances GPU)
+ nvidia-mig-manager-\* - 1 par nœud () MIG-capable A100/H100

### Supprimer le plug-in de l'ancien appareil
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-remove"></a>

Désactivez le plugin nvidia-device-plugin existant :

```
helm upgrade dependencies helm_chart/HyperPodHelmChart \
--set nvidia-device-plugin.devicePlugin.enabled=false \
-n kube-system
```

### Vérifier les ressources du GPU
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-verify-gpu"></a>

Vérifiez que les nœuds affichent la capacité du processeur graphique. Il devrait afficher : nvidia. com/gpu: 8 (ou votre nombre de GPU réel).

```
kubectl describe nodes | grep "nvidia.com/gpu"
```

## Mise à jour de la configuration MIG
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update"></a>

**Préparation des nœuds avant les mises à jour MIG**  
Avant de mettre à jour les configurations MIG de votre groupe d'instances, vous devez préparer les nœuds pour éviter toute interruption de la charge de travail. Suivez ces étapes pour vider en toute sécurité les charges de travail des nœuds qui seront reconfigurés.

### Étape 1 : Identifier les nœuds du groupe d'instances
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-identify"></a>

Tout d'abord, identifiez tous les nœuds qui appartiennent au groupe d'instances que vous souhaitez mettre à jour :

```
# List all nodes in the instance group
kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name={{INSTANCE_GROUP_NAME}}

# Example:
kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name=p4d-group
```

Cette commande renvoie la liste de tous les nœuds du groupe d'instances spécifié. Prenez note du nom de chaque nœud pour les étapes suivantes.

### Étape 2 : bouclez et égouttez chaque nœud
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-drain"></a>

Pour chaque nœud identifié à l'étape 1, effectuez les actions suivantes :

#### Bouclez le nœud
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-drain-cordon"></a>

Le bouclage empêche la planification de nouveaux pods sur le nœud :

```
# Cordon a single node
kubectl cordon {{NODE_NAME}}

# Example:
kubectl cordon hyperpod-i-014a41a7001adca60
```

#### Videz les modules de charge de travail du nœud
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-drain-evict"></a>

Videz le nœud pour expulser tous les modules de charge de travail tout en préservant les modules système :

```
# Drain the node (ignore DaemonSets and evict pods)
kubectl drain {{NODE_NAME}} \
  --ignore-daemonsets \
  --delete-emptydir-data \
  --force \
  --grace-period=300

# Example:
kubectl drain hyperpod-i-014a41a7001adca60 \
  --ignore-daemonsets \
  --delete-emptydir-data \
  --force \
  --grace-period=300
```

**Explication des options de commande : **
+ `--ignore-daemonsets`- Permet de poursuivre l'opération de vidange même en présence de DaemonSet gousses
+ `--delete-emptydir-data`- Supprime les pods à l'aide de volumes EmptyDir (requis pour que le drainage réussisse)
+ `--force`- Force la suppression des pods non gérés par un contrôleur (à utiliser avec prudence)
+ `--grace-period=300`- Donne aux capsules 5 minutes pour se terminer gracieusement

**Important**  
L'opération de vidange peut prendre plusieurs minutes en fonction du nombre de dosettes et de leurs délais de résiliation.
Les pods système des espaces de noms suivants continueront de fonctionner : `kube-system` `cert-manager``kubeflow`,`hyperpod-inference-system`,`kube-public`,`mpi-operator`,`gpu-operator`,`aws-hyperpod`,`jupyter-k8s-system`, `hyperpod-observability``kueue-system`, et `keda`
DaemonSet les pods resteront sur le nœud (ils sont ignorés par conception)

### Étape 3 : Vérifiez qu'aucun module de charge de travail n'est en cours d'exécution
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-verify"></a>

Après la vidange, vérifiez qu'il ne reste aucun module de charge de travail sur les nœuds (à l'exception des espaces de noms système) :

```
# Check for any remaining pods outside system namespaces
kubectl get pods --all-namespaces --field-selector spec.nodeName={{NODE_NAME}} \
  | grep -v "kube-system" \
  | grep -v "cert-manager" \
  | grep -v "kubeflow" \
  | grep -v "hyperpod-inference-system" \
  | grep -v "kube-public" \
  | grep -v "mpi-operator" \
  | grep -v "gpu-operator" \
  | grep -v "aws-hyperpod" \
  | grep -v "jupyter-k8s-system" \
  | grep -v "hyperpod-observability" \
  | grep -v "kueue-system" \
  | grep -v "keda"

# Example:
kubectl get pods --all-namespaces --field-selector spec.nodeName=hyperpod-i-014a41a7001adca60 \
  | grep -v "kube-system" \
  | grep -v "cert-manager" \
  | grep -v "kubeflow" \
  | grep -v "hyperpod-inference-system" \
  | grep -v "kube-public" \
  | grep -v "mpi-operator" \
  | grep -v "gpu-operator" \
  | grep -v "aws-hyperpod" \
  | grep -v "jupyter-k8s-system" \
  | grep -v "hyperpod-observability" \
  | grep -v "kueue-system" \
  | grep -v "keda"
```

**Résultat attendu : ** si le nœud est correctement vidé, cette commande ne doit renvoyer aucun résultat (ou afficher uniquement la ligne d'en-tête). Si des pods fonctionnent toujours, recherchez pourquoi ils n'ont pas été expulsés et supprimez-les manuellement si nécessaire.

### Étape 4 : Vérifier l'état de préparation du nœud
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-readiness"></a>

Avant de procéder à la mise à jour du MIG, vérifiez que tous les nœuds sont bouclés :

```
# Check node status - should show "SchedulingDisabled"
kubectl get nodes -l sagemaker.amazonaws.com/instance-group-name={{INSTANCE_GROUP_NAME}}
```

Les nœuds doivent apparaître `SchedulingDisabled` dans la colonne STATUS, indiquant qu'ils sont bouclés et prêts pour la mise à jour MIG.

### Mettre à jour le profil MIG sur un cluster existant
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-update-change"></a>

Vous pouvez modifier les profils MIG sur les clusters existants :

```
aws sagemaker update-cluster \
  --cluster-name my-mig-cluster \
  --instance-groups '{
    "InstanceGroupName": "gpu-group",
    "InstanceType": "ml.p4d.24xlarge",
    "InstanceCount": 1,
    "KubernetesConfig": {
       "Labels": {
          "nvidia.com/mig.config": "all-3g.20gb"
       }
    },
    "ExecutionRole": "arn:aws:iam::{{account}}:role/{{execution-role}}"
  }'
```

**Note**  
Si des tâches sont déjà en cours d'exécution sur un nœud, le partitionnement MIG échouera. L'utilisateur recevra un message d'erreur lui demandant de vider les nœuds avant de tenter à nouveau le partitionnement MIG.

## Vérification de la configuration MIG
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-verify"></a>

Après la création ou la mise à jour du cluster, vérifiez la configuration MIG :

```
# Update kubeconfig
aws eks update-kubeconfig --name {{your-eks-cluster}} --region {{us-east-2}}

# Check MIG labels
kubectl get node {{NODE_NAME}} -o=jsonpath='{.metadata.labels}' | grep mig

# Check available MIG resources
kubectl describe node {{NODE_NAME}} | grep -A 10 "Allocatable:"
```

## Commandes courantes pour le débogage de la configuration MIG
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-debug-commands"></a>

Utilisez les commandes suivantes pour dépanner et valider la configuration MIG dans votre cluster :

```
# Check GPU Operator status
kubectl get pods -n gpu-operator-resources

# View MIG configuration
kubectl exec -n gpu-operator-resources nvidia-driver-XXXXX -- nvidia-smi mig -lgi

# Check device plugin configuration
kubectl logs -n gpu-operator-resources nvidia-device-plugin-XXXXX

# Monitor node events
kubectl get events --field-selector involvedObject.name={{NODE_NAME}}
```

**Note**  
Remplacez `nvidia-driver-XXXXX` et `nvidia-device-plugin-XXXXX` par les noms de pod réels de votre cluster, ainsi que `NODE_NAME` par le nom de votre nœud.

## Utilisation de la console SageMaker AI
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-console"></a>

### Création d'un nouveau cluster avec MIG
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-console-create"></a>

1. Accédez à ** Amazon SageMaker AI ** > ** HyperPod Clusters ** > Gestion des ** clusters ** > ** Créer un HyperPod cluster **

1. Select ** Orchestrated by EKS **

1. Choisissez Configuration ** personnalisée ** et vérifiez que ** GPU Operator ** est activé par défaut

1. Dans la ** section Groupes d'**instances, cliquez sur ** Ajouter un groupe **

1. Configurez le groupe d'instances et accédez à Configuration ** avancée ** pour activer ** l'**option Utiliser la partition GPU et choisissez la configuration ** MIG souhaitée dans la liste ** déroulante.

1. Cliquez sur ** Ajouter un groupe d'instances ** et terminez la configuration de cluster restante.

1. Cliquez sur ** ** Soumettre pour créer le cluster

### Mise à jour de la configuration MIG sur un cluster existant
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-console-update"></a>

1. Accédez à ** Amazon SageMaker AI ** > ** HyperPod Clusters ** > Gestion des ** clusters **

1. Sélectionnez votre cluster existant et cliquez ** sur ** Modifier dans le groupe d'instances que vous souhaitez modifier

1. Dans Configuration ** avancée**, cochez ** Utiliser la partition GPU ** si ce n'est pas déjà fait et sélectionnez une autre configuration ** MIG dans la liste ** déroulante

1. Cliquez sur ** Enregistrer les modifications **