

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.

# HyperPod point de contrôle hiérarchisé géré
<a name="managed-tier-checkpointing"></a>

Cette section explique le fonctionnement du point de contrôle hiérarchisé géré et les avantages qu'il apporte pour la formation de modèles à grande échelle.

Le point de contrôle hiérarchisé SageMaker HyperPod géré par Amazon vous permet de former plus efficacement des modèles d'IA générative à grande échelle. Il utilise plusieurs niveaux de stockage, y compris la mémoire CPU de votre cluster. Cette approche réduit votre temps de récupération et minimise les pertes de progression de l’entraînement. Elle utilise également des ressources de mémoire sous-utilisées dans votre infrastructure d’entraînement.

Le point de contrôle hiérarchisé géré permet d'enregistrer les points de contrôle à une fréquence plus élevée dans la mémoire. Il les conserve périodiquement dans un stockage durable. Cela permet de maintenir à la fois les performances et la fiabilité au cours de votre processus d’entraînement.

Ce guide explique comment configurer, configurer et utiliser le point de contrôle hiérarchisé géré avec des PyTorch frameworks sur des clusters Amazon EKS HyperPod .

## Comment fonctionne le point de contrôle hiérarchisé géré
<a name="managed-tier-checkpointing-works"></a>

Le point de contrôle hiérarchisé géré utilise une approche de stockage multiniveau. La mémoire CPU sert de niveau principal pour stocker les points de contrôle du modèle. Les niveaux secondaires incluent des options de stockage permanent telles qu’Amazon S3.

Lorsque vous enregistrez un point de contrôle, le système le stocke dans l’espace mémoire alloué sur les nœuds de votre cluster. Il réplique automatiquement les données sur les nœuds de calcul adjacents pour renforcer la fiabilité. Cette stratégie de réplication protège contre les défaillances d’un ou de plusieurs nœuds tout en fournissant un accès rapide pour les opérations de récupération.

Le système enregistre également régulièrement les points de contrôle dans le stockage permanent en fonction de votre configuration. Cela garantit la durabilité à long terme de votre progression d’entraînement.

Les composants clés sont les suivants :
+ **Système de gestion de la mémoire** : démon de gestion de mémoire qui fournit de la mémoire désagrégée en tant que service pour le stockage des points de contrôle.
+ **HyperPod Bibliothèque Python** : interface avec le stockage désagrégé APIs et fournit des utilitaires pour enregistrer, charger et gérer les points de contrôle à tous les niveaux
+ **Réplication des points de contrôle** : réplique automatiquement les points de contrôle sur plusieurs nœuds pour garantir la tolérance aux pannes.

Le système s'intègre parfaitement aux boucles d' PyTorch entraînement par le biais de simples appels d'API. Cela nécessite des modifications minimales de votre code existant.

## Avantages
<a name="managed-tier-checkpointing-benefits"></a>

Le point de contrôle hiérarchisé géré offre plusieurs avantages pour la formation de modèles à grande échelle :
+ **Facilité d’utilisation améliorée** : gère l’enregistrement, la réplication, la persistance et la récupération des points de contrôle.
+ **Opérations de point de contrôle plus rapides** : le stockage basé sur la mémoire permet des temps d’enregistrement et de chargement plus rapides que les points de contrôle sur disque, ce qui permet une récupération plus rapide.
+ **Tolérance aux pannes** : la réplication automatique des points de contrôle entre les nœuds protège contre les défaillances matérielles des nœuds.
+ **Changements de code minimaux** : l’intégration simple des API ne nécessite que des modifications mineures aux scripts d’entraînement existants.
+ **Débit d’entraînement amélioré** : la réduction des frais liés aux points de contrôle signifie plus de temps consacré à l’entraînement proprement dit.

**Topics**
+ [Comment fonctionne le point de contrôle hiérarchisé géré](#managed-tier-checkpointing-works)
+ [Avantages](#managed-tier-checkpointing-benefits)
+ [Configurer des points de contrôle hiérarchisés gérés](managed-tier-checkpointing-setup.md)
+ [Supprimer le point de contrôle hiérarchisé géré](managed-tier-checkpointing-remove.md)
+ [Considérations relatives à la sécurité pour le point de contrôle hiérarchisé géré](managed-tier-security-considerations.md)

# Configurer des points de contrôle hiérarchisés gérés
<a name="managed-tier-checkpointing-setup"></a>

Cette section décrit le processus de configuration du point de contrôle hiérarchisé géré pour Amazon. SageMaker HyperPod Vous allez apprendre à activer cette fonctionnalité sur votre cluster et à implémenter les points de contrôle dans votre code d’entraînement.

**Topics**
+ [Conditions préalables](#managed-tier-checkpointing-setup-prerequisites)
+ [Étape 1 : activer le point de contrôle hiérarchisé géré pour votre cluster](#managed-tier-checkpointing-setup-step-enable-for-cluster)
+ [Étape 2 : Installation de la bibliothèque Python dans votre image d’entraînement](#managed-tier-checkpointing-setup-step-install-library)
+ [Étape 3 : Enregistrez les points de contrôle dans votre boucle d'entraînement](#managed-tier-checkpointing-setup-step-save-checkpoint-in-loop)
+ [Étape 4 : Charger les points de contrôle pour la récupération](#managed-tier-checkpointing-setup-step-load-checkpoint)
+ [Validez vos opérations de point de contrôle hiérarchisé gérées](#managed-tier-checkpointing-setup-validation)

## Conditions préalables
<a name="managed-tier-checkpointing-setup-prerequisites"></a>

Avant de configurer le point de contrôle hiérarchisé géré, assurez-vous d'avoir :
+ Un HyperPod cluster Amazon EKS avec suffisamment de mémoire CPU disponible pour l'allocation des points de contrôle
+ PyTorch charges de travail de formation et emplois de DCP (les deux sont pris en charge)
+ Autorisations IAM appropriées pour la gestion des clusters, notamment :
  + Amazon CloudWatch et Amazon S3 rédigent des autorisations pour le module de formation afin de lire/écrire des points de contrôle et de transmettre des métriques
  + Ces autorisations peuvent être configurées via la [configuration EKS OIDC](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html).

## Étape 1 : activer le point de contrôle hiérarchisé géré pour votre cluster
<a name="managed-tier-checkpointing-setup-step-enable-for-cluster"></a>

**Important**  
Vous devez choisir d'utiliser le point de contrôle hiérarchisé géré.

Activez le point de contrôle hiérarchisé géré HyperPod APIs lors de la création ou de la mise à jour de votre cluster. Le service installe automatiquement le système de gestion de la mémoire lorsque vous spécifiez le paramètre `TieredStorageConfig`.

Pour les nouveaux clusters, vous pouvez utiliser [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-cluster.html) AWS CLI.

```
aws sagemaker create-cluster \
    --cluster-name cluster-name \
    --orchestrator "Eks={ClusterArn=eks-cluster-arn}" \
    --instance-groups '{
        "InstanceGroupName": "instance-group-name",
        "InstanceType": "instance-type",
        "InstanceCount": instance-count,
        "LifeCycleConfig": {
            "SourceS3Uri": "s3-path-to-lifecycle-scripts",
            "OnCreate": "lifecycle-script-name"
        },
        "ExecutionRole": "instance-group-iam-role",
        "ThreadsPerCore": threads-per-core,
        "InstanceStorageConfigs": [
            { "EbsVolumeConfig": {"VolumeSizeInGB": volume-size} }
        ]
    }' \
    --vpc-config '{
        "SecurityGroupIds": ["security-group-ids"],
        "Subnets": ["subnets"]
    }' \
    --tiered-storage-config '{
        "Mode": "Enable"
    }'
```

Le paramètre `InstanceMemoryAllocationPercentage` spécifie le `percentage` (int) de mémoire du cluster à allouer pour les points de contrôle. La plage est comprise entre 20 et 100.

## Étape 2 : Installation de la bibliothèque Python dans votre image d’entraînement
<a name="managed-tier-checkpointing-setup-step-install-library"></a>

Installez la [bibliothèque de points de SageMaker contrôle Amazon](https://pypi.org/project/amzn-sagemaker-checkpointing/) et ses dépendances dans votre image d'entraînement en l'ajoutant à votre Dockerfile :

```
# Add this line to your training image Dockerfile
RUN pip install amzn-sagemaker-checkpointing s3torchconnector tenacity torch boto3 s3torchconnector
```

## Étape 3 : Enregistrez les points de contrôle dans votre boucle d'entraînement
<a name="managed-tier-checkpointing-setup-step-save-checkpoint-in-loop"></a>

Dans votre boucle d'entraînement, vous pouvez enregistrer des points de contrôle de manière asynchrone à l'aide du DCP. PyTorch Voici un exemple sur la façon de procéder.

```
import torch
import torch.distributed as dist
from torch.distributed.checkpoint import async_save, load
from amzn_sagemaker_checkpointing.checkpointing.filesystem.filesystem import (
    SageMakerTieredStorageWriter,
    SageMakerTieredStorageReader
)

# Initialize distributed training
dist.init_process_group(backend="nccl")

# Configure checkpointing
checkpoint_config = SageMakerCheckpointConfig(
    # Unique ID for your training job 
    # Allowed characters in ID include: alphanumeric, hyphens, and underscores
    namespace=os.environ.get('TRAINING_JOB_NAME', f'job-{int(time.time())}'),

    # Number of distributed processes/available GPUs
    world_size=dist.get_world_size(),

    # S3 storage location, required for SageMakerTieredStorageReader for read fallbacks
    # Required for SageMakerTieredStorageWriter when save_to_s3 is True
    s3_tier_base_path="s3://my-bucket/checkpoints"
)

# Your model and optimizer
model = MyModel()
optimizer = torch.optim.AdamW(model.parameters())

# Training loop
future = None
in_memory_ckpt_freq = 10
s3_ckpt_freq = 50

for training_step in range(1000):
    # ... training code ...
    
    # Save checkpoint
    if (training_step % in_memory_ckpt_freq == 0 or 
        training_step % s3_ckpt_freq == 0):
        # Create state dictionary
        state_dict = {
            "model": model.state_dict(),
            "optimizer": optimizer.state_dict(),
            "step": training_step,
            "epoch": epoch
        }
        
        # Create storage writer for current step
        checkpoint_config.save_to_s3 = training_step % s3_ckpt_freq == 0
        storage_writer = SageMakerTieredStorageWriter(
            checkpoint_config=checkpoint_config,
            step=training_step
        )

        # wait for previous checkpoint to get completed
        if future is not None:
            exc = future.exception()
            if exc:
                print(f"Failure in saving previous checkpoint:{str(exc)}")
                # Handle failures as required
            else:
                result = future.result()
                # Process results from save, if required
        
        # Async save checkpoint using PyTorch DCP
        future = async_save(state_dict=state_dict, storage_writer=storage_writer)
        
        # Continue training while checkpoint saves in background
```

## Étape 4 : Charger les points de contrôle pour la récupération
<a name="managed-tier-checkpointing-setup-step-load-checkpoint"></a>

Voici un exemple de chargement d'un point de contrôle.

```
# Create state dictionary template
state_dict = {
    "model": model.state_dict(),
    "optimizer": optimizer.state_dict(),
    "step": 0,
    "epoch": 0
}

# Load latest checkpoint
storage_reader = SageMakerTieredStorageReader(checkpoint_config=checkpoint_config)
load(state_dict, storage_reader=storage_reader)

# Load specific checkpoint step
storage_reader = SageMakerTieredStorageReader(
    checkpoint_config=checkpoint_config, 
    step=500 # Or don't pass step if you have to load the latest available step.
)
try:
    load(state_dict, storage_reader=storage_reader)
except BaseException as e:
    print(f"Checkpoint load failed: {str(e)}")
    # Add additional exception handling
```

## Validez vos opérations de point de contrôle hiérarchisé gérées
<a name="managed-tier-checkpointing-setup-validation"></a>

Vous pouvez valider vos opérations de point de contrôle hiérarchisé gérées à l'aide de journaux.

**Journalisation personnalisée (facultatif)**

Vous pouvez intégrer les journaux de points de contrôle à d’autres journaux en transmettant un enregistreur personnalisé à la bibliothèque. Par exemple, vous pouvez ajouter un enregistreur personnalisé à votre code d’entraînement afin que tous les journaux de la bibliothèque soient également collectés dans l’enregistreur d’entraînement.

**Journalisation des services améliorée (facultatif)**

Pour améliorer le débogage et la visibilité des services, vous pouvez monter le chemin du journal de points de contrôle `/var/log/sagemaker_checkpointing` depuis votre pod vers un chemin `/var/logs/sagemaker_checkpointing` sur votre hôte. Cela garantit que seuls les journaux spécifiques à la bibliothèque sont collectés séparément. Cela fournit à l’équipe de service une meilleure visibilité pour le débogage et le support.

# Supprimer le point de contrôle hiérarchisé géré
<a name="managed-tier-checkpointing-remove"></a>

Cette section explique comment désactiver le point de contrôle hiérarchisé géré lorsque vous n'en avez plus besoin.

Pour désactiver le point de contrôle hiérarchisé géré, utilisez le [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-cluster.html) AWS CLI pour mettre à jour la configuration de votre cluster :

```
aws sagemaker update-cluster \
    --cluster-name cluster-name \
    --tiered-storage-config '{ "Mode": "Disable" }'
```

Cela supprime le démon de gestion de mémoire de votre cluster. Le daemon est implémenté en tant que Kubernetes standard DaemonSet et suit la gestion du cycle de vie standard de Kubernetes.

# Considérations relatives à la sécurité pour le point de contrôle hiérarchisé géré
<a name="managed-tier-security-considerations"></a>

Cette section couvre les considérations de sécurité importantes lors de l'utilisation du point de contrôle hiérarchisé géré. Cela inclut l’utilisation du module pickle Python, le chiffrement Amazon S3 et la sécurité des points de terminaison réseau.

**Utilisation du module pickle Python**

Le point de contrôle hiérarchisé géré utilise le module pickle de Python pour désérialiser les données de point de contrôle stockées dans Amazon S3. Cette mise en œuvre a d’importantes implications en matière de sécurité :
+ **Limite de confiance étendue** : lorsque vous utilisez le point de contrôle hiérarchisé géré avec Amazon S3, le compartiment Amazon S3 fait partie de la limite de confiance de votre cluster.
+ **Risque d’exécution du code** : le module pickle de Python peut exécuter du code arbitraire lors de la désérialisation. Si un utilisateur non autorisé obtient un accès en écriture à votre compartiment Amazon S3 de point de contrôle, il est susceptible de créer des données de pickle malveillantes qui s'exécutent lorsqu'elles sont chargées par un point de contrôle hiérarchisé géré.

**Bonnes pratiques pour le stockage Amazon S3**

Lorsque vous utilisez le point de contrôle hiérarchisé géré avec le stockage Amazon S3 :
+ **Restreindre l’accès au compartiment Amazon S3** : veillez à ce que seuls les utilisateurs autorisés et les rôles associés à votre cluster d’entraînement aient accès au compartiment Amazon S3 utilisé pour les points de contrôle.
+ **Mettre en œuvre des stratégies de compartiment** : configurez des stratégies de compartiment appropriées pour empêcher les accès ou les modifications non autorisés.
+ **Valider les modèles d'accès** : implémentez la journalisation pour valider les modèles d'accès à vos compartiments Amazon S3 de point de contrôle.
+ **Valider les noms des compartiments** : faites preuve de prudence lors de la sélection des noms de compartiments afin d’éviter tout détournement potentiel des compartiments.

**Points de terminaison réseau**

Le point de contrôle hiérarchisé géré active les points de terminaison réseau de chacun de vos nœuds de calcul sur les ports suivants : 9200/TCP, 9209/UDP, 9210/UDP, 9219/UDP, 9220/UDP, 9229/UDP, 9230/UDP, 9240/UDP. Ces ports sont nécessaires au fonctionnement du service de points de contrôle et au maintien de la synchronisation des données.

Par défaut, SageMaker la configuration réseau restreint l'accès à ces points de terminaison pour des raisons de sécurité. Nous vous recommandons de conserver ces restrictions par défaut.

Lorsque vous configurez les paramètres réseau de vos nœuds et de votre VPC, suivez les AWS meilleures pratiques pour les VPCs groupes de sécurité et. ACLs Pour plus d’informations, consultez les ressources suivantes :
+ [ SageMaker HyperPod Conditions préalables d'Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-prerequisites.html#sagemaker-hyperpod-prerequisites-optional-vpcCluster)
+ [Bonnes pratiques de sécurité de VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-best-practices.html)