

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 des 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 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 communes 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 de GPU prises en charge
+ Opérateur GPU NVIDIA installé
+ Autorisations IAM appropriées pour la gestion des clusters

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

### En utilisant 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
```

### En utilisant 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>

### Installer l'opérateur GPU
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-install"></a>

`{$AWS_REGION}`Remplacez-le 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érateur GPU fonctionnent :

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

**Capsules attendues :**
+ gpu-operator-\$1 - 1 instance (contrôleur de cluster)
+ nvidia-device-plugin-daemonset-\$1 - 1 par nœud GPU (toutes les instances GPU)
+ nvidia-mig-manager-\$1 - 1 par nœud compatible MiG (A100/H100)

### Supprimer l'ancien plugin d'appareil
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-add-operator-remove"></a>

Désactivez l'existant nvidia-device-plugin :

```
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 indiquent la capacité du GPU. Il devrait afficher : nvidia.com/gpu : 8 (ou votre nombre réel de GPU).

```
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 du MIG**  
Avant de mettre à jour les configurations MIG sur votre groupe d'instances, vous devez préparer les nœuds afin d'éviter toute interruption de la charge de travail. Suivez ces étapes pour évacuer 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 appartenant 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 une liste de tous les nœuds du groupe d'instances spécifié. Notez le nom de chaque nœud pour les étapes suivantes.

### Étape 2 : Cordon et vidange 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 :

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

Le cordoning 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 pods 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 du 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 à l'opération de vidange de se poursuivre même en présence de DaemonSet capsules
+ `--delete-emptydir-data`- Supprime les pods à l'aide de volumes EmptyDir (nécessaires pour que le vidage 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 capsules et de leurs délais de fin.
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érifier 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 le vidage, vérifiez qu'aucun module de charge de travail ne reste sur les nœuds (à l'exception des espaces de noms du 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 uniquement afficher la ligne d'en-tête). Si des pods fonctionnent toujours, déterminez 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 du 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 communes pour le débogage de la configuration MIG
<a name="sagemaker-hyperpod-eks-gpu-partitioning-setup-debug-commands"></a>

Utilisez les commandes suivantes pour résoudre les problèmes 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 réels des pods de votre cluster et `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. Sélectionnez **Orchestré par EKS**

1. Choisissez **Configuration personnalisée** et vérifiez que **l'opérateur GPU** 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** de votre choix dans le menu déroulant.

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** sur le groupe d'instances que vous souhaitez modifier

1. Dans **Configuration avancée**, activez l'option **Utiliser la partition GPU** si ce n'est déjà fait et sélectionnez une autre **configuration MIG dans le menu** déroulant

1. Cliquez sur **Enregistrer les modifications**