Configuration des points de contrôle par niveaux gérés
Cette section contient le processus de configuration des points de contrôle par niveaux gérés 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.
Rubriques
Étape 1 : Activation des points de contrôle par niveaux gérés pour votre cluster
Étape 2 : Installation de la bibliothèque Python dans votre image d’entraînement
Étape 3 : Création d’une configuration de points de contrôle
Étape 4 : Définition d’un processus d’écriture dans le système de fichiers SageMaker
Étape 5 : Enregistrement des points de contrôle dans votre boucle d’entraînement
Étape 6 : Chargement des points de contrôle pour la récupération
Prérequis
Avant de configurer les points de contrôle par niveaux gérés, assurez-vous de disposer des éléments suivants :
-
Un cluster Amazon EKS HyperPod avec suffisamment de mémoire CPU disponible pour l’allocation des points de contrôle
-
Des charges de travail d’entraînement PyTorch et des tâches DCP (les deux sont prises en charge)
-
Autorisations IAM appropriées pour la gestion des clusters, notamment :
-
Amazon CloudWatch et Amazon S3 écrivent des autorisations pour le pod d’entraînement 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.
-
Étape 1 : Activation des points de contrôle par niveaux gérés pour votre cluster
Important
Vous devez choisir d’utiliser les points de contrôle par niveaux gérés.
Activez les points de contrôle par niveaux gérés via l’API HyperPod 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 le nouveau cluster, créez :
aws sagemaker update-cluster \ --cluster-name my-training-cluster \ --tiered-storage-config { "Mode": "Enable" "InstanceMemoryAllocationPercentage":percentage}
Le paramètre InstanceMemoryAllocationPercentage spécifie le (int) de mémoire du cluster à allouer pour les points de contrôle. La plage est comprise entre 20 et 100.percentage
Étape 2 : Installation de la bibliothèque Python dans votre image d’entraînement
Installez la bibliothèque de points de contrôle Amazon SageMaker
# Add this line to your training image Dockerfile RUN pip install amzn-sagemaker-checkpointing
Étape 3 : Création d’une configuration de points de contrôle
Créez un objet CheckpointConfig pour spécifier le comportement des points de contrôle. Cela consiste notamment à :
-
Emplacements des points de contrôle
-
Fréquence des points de contrôle
-
Nom de l’espace de noms.
L’exemple suivant montre une configuration des points de contrôle :
from amzn_sagemaker_checkpointing.config.sagemaker_checkpoint_config import SageMakerCheckpointConfig from amzn_sagemaker_checkpointing.checkpointing.filesystem import SageMakerTieredStorageWriter, SageMakerTieredStorageReader checkpoint_config = sm_ckpt.CheckpointConfig( world_size = 100, in_memory_namespace:my-ml-workload, # Logical grouping for checkpoints s3_base_path: "s3://bucket-name/checkpointing-path-prefix/", s3_every_n_steps: 100, # Every 100 steps, save to S3 )
Étape 4 : Définition d’un processus d’écriture dans le système de fichiers SageMaker
Définissez le processus d’écriture dans votre système de fichiers de points de contrôle. Vous pouvez éventuellement spécifier un numéro d’étape lors de l’initialisation.
Processus d’écriture de base (étape spécifiée lors de l’appel d’enregistrement) :
smWriter = sagemaker_checkpointing.SageMakerTieredStorageWriter(checkpoint_config)
Processus d’écriture avec paramètre d’étape (étape spécifiée lors de l’initialisation) :
smWriter = sagemaker_checkpointing.SageMakerTieredStorageWriter( checkpoint_config, step=step_number )
Note
Lorsque vous spécifiez le paramètre step lors de l’initialisation du processus d’écriture, le paramètre checkpoint_id de l’appel d’enregistrement devient facultatif. Le paramètre d’étape a priorité sur le format du répertoire des points de contrôle.
Étape 5 : Enregistrement des points de contrôle dans votre boucle d’entraînement
Dans votre boucle d’entraînement, enregistrez les points de contrôle à l’aide de PyTorch DCP avec FileSystemWriter.
Utilisation de PyTorch DCP avec FileSystemWriter
Appelez la méthode dist_cp.save() avec FileSystemWriter comme entrée :
Option 1 : Utilisation de checkpoint_id avec le format d’étape (lorsque l’étape n’est pas spécifiée dans le processus d’écriture)
# Construct checkpoint directory with step number checkpoint_dir = f"step_number" dist_cp.save_state_dict( state_dict=state_dict, # state_dict is a dictionary containing model parameters, optimizer state, etc. checkpoint_id=checkpoint_dir, # Should contain step number storage_writer=smWriter )
Option 2 : Utilisation du processus d’écriture avec le paramètre d’étape (checkpoint_id devient facultatif)
dist_cp.save_state_dict( state_dict=state_dict, storage_writer=smWriter # Step already specified in writer initialization )
Note
La valeur checkpoint_id (ou la chaîne checkpoint_dir) doit avoir le format step_. Par exemple, numberstep_5. Lors de l’utilisation du paramètre d’étape lors de l’initialisation du processus d’écriture, checkpoint_id devient facultatif.
Étape 6 : Chargement des points de contrôle pour la récupération
Lorsque vous devez charger un point de contrôle, utilisez PyTorch DCP avec FileSystemReader.
Utilisation de PyTorch DCP avec FileSystemReader
Appelez la méthode de chargement DCP avec FileSystemReader comme entrée :
# Define FileSystemReader smReader = sagemaker_checkpointing.SageMakerTieredStorageReader( config=checkpoint_config ) # Load checkpoint dist_cp.load_state_dict( state_dict=state_dict, checkpoint_id=checkpoint_dir, storage_reader=smReader )
Surveillance et validation
Vous pouvez surveiller et valider vos opérations de points de contrôle par niveaux gérés par le biais de métriques et 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.