

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.

# Repérez les instances sur Amazon SageMaker HyperPod
<a name="sagemaker-hyperpod-spot"></a>

Amazon SageMaker HyperPod prend en charge les instances Spot Amazon EC2, ce qui permet de réaliser des économies importantes pour les charges de travail tolérantes aux pannes et apatrides. AI/ML Les cas d'utilisation incluent les tâches d'inférence et de formation par lots, le réglage des hyperparamètres et les charges de travail expérimentales. Vous pouvez également utiliser les instances Spot pour adapter automatiquement votre capacité de calcul lorsque cette capacité à faible coût est disponible et la réduire à la capacité à la demande lorsque la capacité Spot ajoutée est récupérée.

Par défaut, la [fonctionnalité de provisionnement continu des instances Spot on HyperPod work with HyperPod permet de SageMaker HyperPod provisionner](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-scaling-eks.html) automatiquement la capacité restante en arrière-plan tandis que les charges de travail démarrent immédiatement sur les instances disponibles. Lorsque le provisionnement des nœuds échoue en raison de contraintes de capacité ou d'autres problèmes, réessayez SageMaker HyperPod automatiquement en arrière-plan jusqu'à ce que les clusters atteignent l'échelle souhaitée, afin que vos opérations de mise à l'échelle automatique restent résilientes et non bloquantes. Vous pouvez également utiliser des instances Spot avec une mise à l'échelle automatique basée sur [Karpenter](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html).

**Capacités et concepts clés à prendre en compte**
+ Réalisez jusqu'à 90 % d'économies par rapport aux instances à la demande
+ Utilisez les instances Spot pour les tâches qui peuvent gérer des interruptions et pour lesquelles les délais de début et de fin des tâches sont flexibles
+ Lorsque vous utilisez Karpenter pour le dimensionnement automatique, vous pouvez configurer pour revenir automatiquement HyperPod à On-Demand lorsque la capacité du Spot est interrompue ou indisponible
+ Accédez à un large éventail de types d'instances de processeur, de GPU et d'accélérateur pris en charge par HyperPod
+ La disponibilité des capacités dépend de l'approvisionnement fourni par EC2 et varie en fonction de la région et du type d'instance
+ Vous pouvez effectuer diverses actions, telles que l'identification de la probabilité d'obtenir les instances souhaitées ou d'être interrompu, à l'aide de divers outils tels que le [Spot Instance Advisor](https://aws.amazon.com/ec2/spot/instance-advisor/) fourni par EC2

## Prise en main
<a name="sagemaker-hyperpod-spot-instance-getstart"></a>

### Conditions préalables
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq"></a>

Avant de commencer, assurez-vous de disposer des éléments suivants :

#### AWS CLI installé et configuré
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-cli"></a>

Configurez vos AWS informations d'identification et votre région :

```
aws configure
```

Reportez-vous à la [documentation relative aux AWS informations d'identification](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html) pour obtenir des instructions détaillées.

#### Rôle IAM pour l'exécution SageMaker HyperPod
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-iam"></a>

Pour mettre à jour le cluster, vous devez d'abord créer des autorisations [AWS Identity and Access Management](https://aws.amazon.com/iam/) (IAM) pour Karpenter. Pour obtenir des instructions, voir [Création d'un rôle IAM pour le HyperPod dimensionnement automatique avec Karpenter](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling-iam.html).

#### Configuration des clusters VPC et EKS
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-cluster"></a>

**2.1 Création d'un VPC et d'un cluster EKS**

Suivez le [guide de configuration d'HyperPod EKS](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-install-packages-using-helm-chart.html) pour :

1. Création d'un VPC avec des sous-réseaux dans plusieurs zones de disponibilité

1. Création d'un cluster EKS

1. Installez les [dépendances requises](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-install-packages-using-helm-chart.html) à l'aide des diagrammes Helm

**2.2 Définir les variables d'environnement**

```
export EKS_CLUSTER_ARN="arn:aws:eks:REGION:ACCOUNT_ID:cluster/CLUSTER_NAME"
export EXECUTION_ROLE="arn:aws:iam::ACCOUNT_ID:role/SageMakerExecutionRole"
export BUCKET_NAME="your-s3-bucket-name"
export SECURITY_GROUP="sg-xxxxx"
export SUBNET="subnet-xxxxx"
export SUBNET1="subnet-xxxxx"
export SUBNET2="subnet-xxxxx"
export SUBNET3="subnet-xxxxx"
```

#### Quotas de service pour les instances Spot
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-quota"></a>

Vérifiez que vous disposez des quotas requis pour les instances que vous allez créer dans le SageMaker HyperPod cluster. Pour consulter vos quotas, sur la console Service Quotas, sélectionnez les AWS services dans le volet de navigation, puis choisissez SageMaker. Par exemple, la capture d'écran suivante montre le quota disponible pour les instances c5.

![\[Image contenant des informations sur la région de coûts.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/Screenshot-cluster-quota.png)


#### Vérifiez la disponibilité des places
<a name="sagemaker-hyperpod-spot-instance-getstart-prereq-availability"></a>

Avant de créer des groupes d'instances Spot, vérifiez la disponibilité dans les différentes zones de disponibilité :

```
aws ec2 get-spot-placement-scores \
  --region us-west-2 \
  --instance-types c5.2xlarge \
  --target-capacity 10 \
  --single-availability-zone \
  --region-names us-west-2
```

**Conseil** : ciblez les zones de disponibilité présentant des scores de placement plus élevés pour une meilleure disponibilité. Vous pouvez également consulter les tarifs de Spot Instance Advisor et d'EC2 Spot pour connaître la disponibilité. Sélectionnez la zone de disponibilité requise avec un meilleur score de disponibilité et configurez le groupe d'instances avec le sous-réseau associé pour lancer l'instance dans cette zone de disponibilité.

### Création d'un groupe d'instances (pas de mise à l'échelle automatique)
<a name="sagemaker-hyperpod-spot-instance-getstart-create"></a>

**CreateCluster (Endroit)**

```
aws sagemaker create-cluster \
    --cluster-name clusterNameHere \
    --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \
    --node-provisioning-mode "Continuous" \
    --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \
    --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]' 
    --vpc-config '{
        "SecurityGroupIds": ["'$SECURITY_GROUP'"],
        "Subnets": ["'$SUBNET'"] 
    }'
```

**Mettre à jour le cluster (Spot \$1 On-Demand)**

```
aws sagemaker update-cluster \
   --cluster-name "my-cluster" \
   --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-x-az3",
        "InstanceType": "ml.c5.xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} },
        "LifeCycleConfig": {
            "SourceS3Uri": "s3://'$BUCKET_NAME'",
            "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET3'"]
        }
    },
    {
        "InstanceGroupName": "auto-spot-c5-2x-az2",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET2'"]
         }
    },
    {   
        "InstanceGroupName": "auto-ondemand-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]'
```

`CapacityRequirements`ne peut pas être modifié une fois qu'un groupe d'instances est créé.

**Décrire le cluster**

```
aws sagemaker describe-cluster --cluster-name $HP_CLUSTER_NAME --region us-west-2
```

```
## Sample Response
{
    "ClusterName": "my-cluster",
    "InstanceGroups": [
        {
            "InstanceGroupName": "ml.c5.2xlarge",
            "InstanceType": "ml.c5.xlarge",
            "InstanceCount": 5,
            "CurrentCount": 3,
            "CapacityRequirements: { "Spot": {} },
            "ExecutionRole": "arn:aws:iam::account:role/SageMakerExecutionRole",
            "InstanceStorageConfigs": [...],
            "OverrideVpcConfig": {...}
        }
        // Other IGs
    ]
}
```

**DescribeClusterNode**

```
aws sagemaker describe-cluster-node --cluster-name $HP_CLUSTER_NAME --region us-west-2
```

```
## Sample Response
{
  "NodeDetails": {
    "InstanceId": "i-1234567890abcdef1",
    "InstanceGroupName": "ml.c5.2xlarge",
    "CapacityType": "Spot",
    "InstanceStatus": {...}
  }
}
```

### Utilisation de la console
<a name="sagemaker-hyperpod-spot-instance-getstart-console"></a>

#### Création et configuration d'un SageMaker HyperPod cluster
<a name="sagemaker-hyperpod-spot-instance-getstart-console-create"></a>

Pour commencer, lancez et configurez votre cluster SageMaker HyperPod EKS et vérifiez que le mode de provisionnement continu est activé lors de la création du cluster. Procédez comme suit :

1. Sur la console SageMaker AI, choisissez les HyperPod clusters dans le volet de navigation.

1. Choisissez Create HyperPod cluster et Orchestrated on Amazon EKS.

1. Pour les options de configuration, sélectionnez Configuration personnalisée.

1. Pour Nom, entrez un nom.

1. Pour Restauration d'instance, sélectionnez Automatique.

1. Pour le mode de provisionnement des instances, sélectionnez Utiliser le provisionnement continu.

1. CapacityType : Sélectionnez un endroit 

1. Sélectionnez Soumettre.

Capture d'écran de la console : 

![\[Image contenant le flux de création du cluster.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/Screenshot-create-cluster.png)


Cette configuration crée la configuration nécessaire, telle que le cloud privé virtuel (VPC), les sous-réseaux, les groupes de sécurité et le cluster EKS, et installe les opérateurs dans le cluster. Vous pouvez également fournir des ressources existantes telles qu'un cluster EKS si vous souhaitez utiliser un cluster existant au lieu d'en créer un nouveau. Cette configuration prendra environ 20 minutes.

#### Ajouter un nouveau groupe d'instances Spot au même cluster
<a name="sagemaker-hyperpod-spot-instance-getstart-console-add"></a>

Pour ajouter un Spot IG à votre cluster HyperPod EKS existant. Procédez comme suit :

1. Sur la console SageMaker AI, choisissez les HyperPod clusters dans le volet de navigation.

1. Sélectionnez un HyperPod cluster existant avec Amazon EKS Orchestration (assurez-vous que le provisionnement continu est activé).

1. Cliquez sur Modifier.

1. Sur la page Modifier le cluster, cliquez sur Créer un groupe d'instances.

1. Sélectionnez le type de capacité : instance ponctuelle dans la configuration du groupe d'instances.

1. Cliquez sur Créer un groupe d'instances. 

1. Cliquez sur Soumettre.

**Capture d'écran de la console :**

![\[Image contenant le flux de création du groupe d'instances.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/Screenshot-instance-group.png)


### En utilisant CloudFormation
<a name="sagemaker-hyperpod-spot-instance-getstart-cfn"></a>

```
Resources:
  TestCluster:
    Type: AWS::SageMaker::Cluster
    Properties:
      ClusterName: "SampleCluster"
      InstanceGroups:
        - InstanceGroupName: group1
          InstanceType: ml.c5.2xlarge
          InstanceCount: 1
          LifeCycleConfig:
            SourceS3Uri: "s3://'$BUCKET_NAME'"
            OnCreate: "on_create_noop.sh"
          ExecutionRole: "'$EXECUTION_ROLE'",
          ThreadsPerCore: 1
          CapacityRequirements:
            Spot: {}
      VpcConfig:
        Subnets:
          - "'$SUBNET1'"
        SecurityGroupIds:
          - "'$SECURITY_GROUP'"
      Orchestrator:
        Eks:
          ClusterArn:
            '$EKS_CLUSTER_ARN'
      NodeProvisioningMode: "Continuous"
      NodeRecovery: "Automatic"
```

Consultez [https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster- getting-started-eks-console - create-cluster-cfn .html](https://docs.aws.amazon.com/sagemaker/latest/dg/smcluster-getting-started-eks-console-create-cluster-cfn.html) pour plus de détails.

### Autoscaling basé sur Karpenter
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter"></a>

#### Créer un rôle de cluster
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-role"></a>

**Étape 1 : accédez à la console IAM**

1. Accédez au **AWS Management Console**→ service **IAM**

1. Cliquez sur **Rôles** dans la barre latérale gauche

1. Cliquez sur **Créer un rôle**

**Étape 2 : Configuration de la politique de confiance**

1. Sélectionnez une politique de confiance personnalisée (au lieu du AWS service)

1. Remplacez le JSON par défaut par cette politique de confiance :

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "hyperpod.sagemaker.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

cliquez sur Suivant

**Étape 3 : créer une politique d'autorisation personnalisée**

Comme il s'agit SageMaker d'autorisations spécifiques, vous devez créer une politique personnalisée :

1. Cliquez sur **Créer une politique** (ouvre un nouvel onglet)

1. Cliquez sur l'onglet **JSON**

1. Entrez cette politique :

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "sagemaker:BatchAddClusterNodes",
           "sagemaker:BatchDeleteClusterNodes"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

1. Cliquez sur **Suivant**

1. Donnez-lui un nom comme `SageMakerHyperPodRolePolicy`

1. Cliquez sur **Créer une politique**

**Étape 4 : associer la politique au rôle**

1. Retournez à l'onglet de création de votre rôle

1. Actualiser la liste des politiques

1. Recherchez et sélectionnez la politique que vous venez de créer

1. Cliquez sur **Suivant**

**Étape 5 : Nommer et créer un rôle**

1. Entrez un nom de rôle (par exemple,`SageMakerHyperPodRole`)

1. Ajoutez une description si vous le souhaitez

1. Passez en revue la politique de confiance et les autorisations

1. Cliquez sur **Créer un rôle**

#### Vérification
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-verify"></a>

Après la création, vous pouvez vérifier en :
+ La vérification de l'onglet Relations de confiance affiche le service Hyperpod
+ La vérification de l'onglet Autorisations indique votre politique personnalisée
+ L'ARN du rôle pourra être utilisé avec HyperPod

Le format de l'ARN du rôle sera le suivant :

```
 arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole
```

#### Créez un cluster avec AutoScaling :
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-create-cluster"></a>

Pour une meilleure disponibilité, créez-en plusieurs IGs en AZs configurant des sous-réseaux. Vous pouvez également inclure OnDemand comme solution IGs de secours.

```
aws sagemaker create-cluster \
    --cluster-name clusterNameHere \
    --orchestrator 'Eks={ClusterArn='$EKS_CLUSTER_ARN'}' \
    --node-provisioning-mode "Continuous" \
    --cluster-role 'arn:aws:iam::YOUR-ACCOUNT-ID:role/SageMakerHyperPodRole' \
    --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 0, // For Auto scaling keep instance count as 0
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]' 
--vpc-config '{
    "SecurityGroupIds": ["'$SECURITY_GROUP'"],
    "Subnets": ["'$SUBNET'"] 
}'
--auto-scaling ' {
    "Mode": "Enable",
    "AutoScalerType": "Karpenter"
}'
```

#### Mettre à jour le cluster (Spot \$1 On-Demand)
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-update-cluster"></a>

```
aws sagemaker update-cluster \
   --cluster-name "my-cluster" \
   --instance-groups '[{
        "InstanceGroupName": "auto-spot-c5-x-az3",
        "InstanceType": "ml.c5.xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} },
        "LifeCycleConfig": {
            "SourceS3Uri": "s3://'$BUCKET_NAME'",
            "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET3'"]
        }
    },
    {
        "InstanceGroupName": "auto-spot-c5-2x-az2",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "CapacityRequirements: { "Spot": {} }
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET2'"]
         }
    },
    {   
        "InstanceGroupName": "auto-ondemand-c5-2x-az1",
        "InstanceType": "ml.c5.2xlarge",
        "InstanceCount": 2,
        "LifeCycleConfig": {
        "SourceS3Uri": "s3://'$BUCKET_NAME'",
        "OnCreate": "on_create_noop.sh"
        },
        "ExecutionRole": "'$EXECUTION_ROLE'",
        "ThreadsPerCore": 1,
        "OverrideVpcConfig": {
            "SecurityGroupIds": ["'$SECURITY_GROUP'"],
            "Subnets": ["'$SUBNET1'"]
         }
    }]'
```

#### Créez HyperpodNodeClass
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-create-class"></a>

`HyperpodNodeClass`est une ressource personnalisée qui correspond à des groupes d'instances précréés dans SageMaker HyperPod, définissant les contraintes relatives aux types d'instances et aux zones de disponibilité pris en charge pour les décisions de Karpenter en matière de dimensionnement automatique. Pour l'utiliser`HyperpodNodeClass`, il vous suffit de spécifier le nom `InstanceGroups` du SageMaker HyperPod cluster que vous souhaitez utiliser comme source pour les ressources de AWS calcul à utiliser pour augmenter le volume de vos pods dans votre NodePools. Le `HyperpodNodeClass` nom que vous utilisez ici est reporté NodePool à la section suivante où vous le référencez. Cela indique de NodePool quelle `HyperpodNodeClass` source puiser les ressources. Pour créer un`HyperpodNodeClass`, procédez comme suit :

1. Créez un fichier YAML (par exemple, nodeclass.yaml) similaire au code suivant. Ajoutez `InstanceGroup` les noms que vous avez utilisés lors de la création du SageMaker HyperPod cluster. Vous pouvez également ajouter de nouveaux groupes d'instances à un cluster SageMaker HyperPod EKS existant.

1. Référencez le `HyperPodNodeClass` nom dans votre NodePool configuration.

Voici un exemple `HyperpodNodeClass` :

```
apiVersion: karpenter.sagemaker.amazonaws.com/v1
kind: HyperpodNodeClass
metadata:
  name: multiazg6
spec:
  instanceGroups:
    # name of InstanceGroup in HyperPod cluster. InstanceGroup needs to pre-created
    # before this step can be completed.
    # MaxItems: 10
    - auto-spot-c5-2x-az1
    - auto-spot-c5-2x-az2
    - auto-spot-c5-x-az3
    - auto-ondemand-c5-2x-az1
```

Karpenter donne la priorité aux groupes d'instances Spot par rapport aux instances à la demande, en utilisant On-Demand comme solution de secours lorsque cela est spécifié dans la configuration. La sélection des instances est triée en fonction des scores de placement ponctuel EC2 associés à la zone de disponibilité de chaque sous-réseau.

**Appliquez la configuration à votre cluster EKS en utilisant `kubectl` :**

```
kubectl apply -f nodeclass.yaml
```

Le HyperPod cluster doit être AutoScaling activé et AutoScaling son statut doit être `InService` changé pour `HyperpodNodeClass` pouvoir être appliqué. Il indique également les capacités des groupes d'instances sous forme Spot ou OnDemand. Pour plus d'informations et des considérations clés, consultez [Autoscaling sur SageMaker HyperPod EKS](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html).

**Par exemple**

```
apiVersion: karpenter.sagemaker.amazonaws.com/v1
kind: HyperpodNodeClass
metadata:
  creationTimestamp: "2025-11-30T03:25:04Z"
  name: multiazc6
  uid: ef5609be-15dd-4700-89ea-a3370e023690
spec:
  instanceGroups:
  -spot1
status:
  conditions:
  // true when all IGs in the spec are present in SageMaker cluster, false otherwise
  - lastTransitionTime: "2025-11-20T03:25:04Z"
    message: ""
    observedGeneration: 3
    reason: InstanceGroupReady
    status: "True"
    type: InstanceGroupReady
  // true if subnets of IGs are discoverable, false otherwise
  - lastTransitionTime: "2025-11-20T03:25:04Z"
    message: ""
    observedGeneration: 3
    reason: SubnetsReady
    status: "True"
    type: SubnetsReady
  // true when all dependent resources are Ready [InstanceGroup, Subnets]
  - lastTransitionTime: "2025-11-30T05:47:55Z"
    message: ""
    observedGeneration: 3
    reason: Ready
    status: "True"
    type: Ready
  instanceGroups:
  - instanceTypes:
    - ml.c5.2xlarge
    name:auto-spot-c5-2x-az2
    subnets:
    - id: subnet-03ecc649db2ff20d2
      zone: us-west-2a
      zoneId: usw2-az2
  - capacities: {"Spot": {}}
```

#### Créez NodePool
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-create-nodepool"></a>

Le NodePool définit les contraintes sur les nœuds qui peuvent être créés par Karpenter et les pods qui peuvent s'exécuter sur ces nœuds. Il NodePool peut être configuré pour effectuer diverses actions, telles que : 
+ Définissez des étiquettes et des nuances pour limiter le nombre de modules pouvant fonctionner sur les nœuds créés par Karpenter
+ Limitez la création de nœuds à certaines zones, à certains types d'instances et à certaines architectures informatiques, etc.

Pour plus d'informations sur NodePool, reportez-vous à [NodePools](https://karpenter.sh/docs/concepts/nodepools/). SageMaker HyperPod managed Karpenter prend en charge un ensemble limité d'exigences bien connues de Kubernetes et Karpenter, que nous expliquons dans cet article.

Pour créer un NodePool, procédez comme suit :

Créez un fichier YAML portant le nom `nodepool.yaml` de la NodePool configuration souhaitée. Le code suivant est un exemple de configuration pour créer un exemple NodePool. Nous spécifions le NodePool pour inclure notre type d' SageMaker instance ml.g6.xlarge, et nous le spécifions également pour une zone. Reportez-vous à [NodePools](https://karpenter.sh/docs/concepts/nodepools/)pour plus de personnalisations.

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
 name: gpunodepool
spec:
 template:
   spec:
     nodeClassRef:
      group: karpenter.sagemaker.amazonaws.com
      kind: HyperpodNodeClass
      name: multiazg6
     expireAfter: Never
     requirements:
        - key: node.kubernetes.io/instance-type
          operator: Exists
        - key: "node.kubernetes.io/instance-type" // Optional otherwise Karpenter will decide based on Job config resource requirements
          operator: In
          values: ["ml.c5.2xlarge"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-west-2a"]
```

**Conseil** : En cas d'interruption d'EC2 Spot, Hyperpod altère le nœud pour déclencher l'expulsion du nœud. Le processus de **consolidation** de Karpenter respecte les budgets relatifs aux interruptions de service des pods et effectue l'expulsion normale de Kubernetes, mais si vous définissez ConsolidateAfter : 0, la consolidation peut avoir lieu **immédiatement**, ce qui laisse très peu de temps pour une expulsion progressive des pods. Réglez-le sur une valeur différente de zéro pendant 2 minutes pour permettre l'expulsion gracieuse du pod pour tous les besoins liés aux points de contrôle.

**Appliquez le NodePool à votre cluster :**

```
kubectl apply -f nodepool.yaml
```

**Surveillez l' NodePool état pour vous assurer que la condition Prêt est définie sur True :**

```
kubectl get nodepool gpunodepool -oyaml
```

Cet exemple montre comment a NodePool peut être utilisé pour spécifier le matériel (type d'instance) et l'emplacement (zone de disponibilité) des pods.

**Lancez une charge de travail simple**

La charge de travail suivante exécute un déploiement Kubernetes dans lequel les pods en cours de déploiement demandent 1 processeur et 256 Mo de mémoire par réplique et par pod. Les gousses n'ont pas encore été filées.

```
kubectl apply -f https://raw.githubusercontent.com/aws/karpenter-provider-aws/refs/heads/main/examples/workloads/inflate.yaml
```

Lorsque nous appliquons cela, nous pouvons voir un déploiement et le lancement d'un seul nœud dans notre cluster, comme le montre la capture d'écran suivante.

**Pour redimensionner ce composant, utilisez la commande suivante :**

```
kubectl scale deployment inflate --replicas 10
```

Voir [https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker- hyperpod-eks-autoscaling .html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-autoscaling.html) pour plus de détails.

### Gestion de l'interruption des nœuds
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-interrupt"></a>

Les instances Spot peuvent être récupérées à tout moment. EC2 fournit un préavis d'interruption de 2 minutes dans la plupart des cas, mais cet avis n'est pas garanti. Dans certains cas, EC2 peut mettre fin aux instances Spot immédiatement sans avertissement préalable. HyperPod gère automatiquement les deux scénarios :
+ Avec un préavis de 2 minutes : Réessaie automatiquement d'expulser gracieusement le pod et de contrôler le remplacement de la capacité lorsque la capacité Spot devient disponible.
+ Sans préavis (résiliation immédiate) : tente à nouveau automatiquement de remplacer le nœud (lorsque la capacité du Spot devient disponible) sans expulsion gracieuse 

**Fonctionnement**

Lorsque EC2 envoie un avis d'interruption de Spot, HyperPod automatiquement :

1. Détecte le signal d'interruption 

1. Enteinte le nœud : empêche la planification de nouveaux pods sur l'instance interrompue

1. Évacue gracieusement les pods : donne aux pods en cours d'exécution le temps de terminer ou de contrôler leur travail (dans le respect de Kubernetes) `terminationGracePeriodSeconds`

1. Remplace la capacité : tente automatiquement de provisionner les instances de remplacement (sur place ou à la demande en fonction de la disponibilité). 

   Le remplacement de capacité fonctionne en provisionnant automatiquement les instances de remplacement. Lorsque la capacité n'est pas immédiatement disponible, le système continue de vérifier jusqu'à ce que les ressources soient accessibles. Dans le cas de groupes d'instances dont le dimensionnement n'est pas automatique, HyperPod tente de procéder à une mise à l'échelle au sein du même groupe d'instances jusqu'à ce que la capacité requise soit disponible. Pour les groupes d'instances basés sur Karpenter, Karpenter implémente un mécanisme de repli sur les autres groupes d'instances configurés dans la classe Node lorsque le groupe principal ne peut pas répondre à la demande. En outre, vous pouvez configurer On-Demand comme option de secours, permettant à Karpenter de passer automatiquement aux instances On-Demand s'il ne parvient pas à faire évoluer les groupes d'instances Spot avec succès.

1. Replanifie les charges de travail : Kubernetes replanifie automatiquement les pods expulsés sur des nœuds sains

### Trouver votre consommation et votre facture
<a name="sagemaker-hyperpod-spot-instance-getstart-karpenter-bill"></a>

Pour vérifier votre utilisation et la facturation des instances Spot sur, HyperPod vous pouvez utiliser la console AWS Cost Explorer. Accédez à Billing and Cost Management > Bill

![\[Image contenant des informations sur la région de coûts.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/Screenshot-cost-region.png)


**Pour découvrir l'utilisation et la facturation sur console, rendez-vous sur Billing and Cost Management > Cost Explorer**

![\[Une image indiquant le coût et l'utilisation.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/Screenshot-cost-usage.png)
