Configuration d’une tâche d’entraînement avec un cluster hétérogène dans Amazon SageMaker AI - Amazon SageMaker AI

Configuration d’une tâche d’entraînement avec un cluster hétérogène dans Amazon SageMaker AI

Cette section fournit des instructions sur la façon d’exécuter une tâche d’entraînement à l’aide d’un cluster hétérogène composé de plusieurs types d’instances.

Notez les points suivants avant de démarrer.

  • Tous les groupes d’instances partagent la même image Docker et le même script d’entraînement. Par conséquent, votre script d’entraînement doit être modifié afin de détecter à quel groupe d’instances il appartient et de l’exécuter en conséquence.

  • La fonctionnalité de cluster hétérogène n’est pas compatible avec le mode local de SageMaker AI.

  • Les flux de journaux Amazon CloudWatch d’une tâche d’entraînement de cluster hétérogène ne sont pas regroupés par groupes d’instances. Vous devez déterminer à partir des journaux quels nœuds appartiennent à quel groupe.

Option 1 : utilisation du kit SageMaker Python SDK

Suivez les instructions pour configurer des groupes d’instances pour un cluster hétérogène à l’aide du kit SageMaker Python SDK.

  1. Pour configurer des groupes d’instances d’un cluster hétérogène pour une tâche d’entraînement, utilisez la classe sagemaker.instance_group.InstanceGroup. Vous pouvez spécifier un nom personnalisé pour chaque groupe d’instances, le type d’instance et le nombre d’instances pour chaque groupe d’instances. Pour plus d’informations, consultez sagemaker.instance_group.InstanceGroup dans la documentation du kit SageMaker AI Python SDK.

    Note

    Pour plus d’informations sur les types d’instances disponibles et le nombre maximum de groupes d’instances que vous pouvez configurer dans un cluster hétérogène, consultez la Référence des API InstanceGroup.

    L’exemple de code suivant illustre comment configurer deux groupes d’instances composés de deux instances ml.c5.18xlarge réservées au processeur nommées instance_group_1 et une instance ml.p3dn.24xlarge du processeur graphique nommée instance_group_2, comme illustré dans le schéma suivant.

    Exemple conceptuel de la manière dont les données peuvent être attribuées dans une tâche d’entraînement SageMaker.

    Le schéma précédent montre un exemple conceptuel de la manière dont les processus de pré-entraînement, tels que le prétraitement des données, peuvent être affectés au groupe d’instances CPU et transmettre les données prétraitées au groupe d’instances GPU.

    from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "instance_group_1", "ml.c5.18xlarge", 2 ) instance_group_2 = InstanceGroup( "instance_group_2", "ml.p3dn.24xlarge", 1 )
  2. À l’aide des objets de groupe d’instances, configurez des canaux d’entrée d’entraînement et affectez des groupes d’instances aux canaux via l’argument instance_group_names de la classe sagemaker.inputs.TrainingInput. L’argument instance_group_names accepte une liste de chaînes de noms de groupes d’instances.

    L’exemple suivant montre comment définir deux canaux d’entrée d’entraînement et attribuer les groupes d’instances créés dans l’exemple de l’étape précédente. Vous pouvez également spécifier des chemins de compartiment Amazon S3 vers l’argument s3_data pour que les groupes d’instances traitent les données à des fins d’utilisation.

    from sagemaker.inputs import TrainingInput training_input_channel_1 = TrainingInput( s3_data_type='S3Prefix', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile s3_data='s3://your-training-data-storage/folder1', distribution='FullyReplicated', # Available Options: FullyReplicated | ShardedByS3Key input_mode='File', # Available Options: File | Pipe | FastFile instance_groups=["instance_group_1"] ) training_input_channel_2 = TrainingInput( s3_data_type='S3Prefix', s3_data='s3://your-training-data-storage/folder2', distribution='FullyReplicated', input_mode='File', instance_groups=["instance_group_2"] )

    Pour plus d’informations sur les arguments de TrainingInput, consultez les liens suivants.

  3. Configurez un estimateur SageMaker AI avec l’argument instance_groups, comme illustré dans l’exemple de code suivant. L’argument instance_groups accepte une liste de InstanceGroup objets.

    Note

    La fonctionnalité de cluster hétérogène est disponible via les classes d’estimateur de cadre de SageMaker AI PyTorch et TensorFlow. Les cadres pris en charge sont PyTorch v1.10 ou versions ultérieures, et TensorFlow v2.6 ou versions ultérieures. Pour obtenir la liste complète des conteneurs de cadre, des versions de cadres et des versions Python disponibles, consultez Conteneurs de cadre SageMaker AI dans le référentiel GitHub des conteneurs de Deep Learning AWS.

    PyTorch
    from sagemaker.pytorch import PyTorch estimator = PyTorch( ... entry_point='my-training-script.py', framework_version='x.y.z', # 1.10.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    TensorFlow
    from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... entry_point='my-training-script.py', framework_version='x.y.z', # 2.6.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    Note

    La paire d’arguments instance_type et instance_count et l’argument instance_groups de la classe d’estimateur SageMaker AI s’excluent mutuellement. Pour une formation en cluster homogène, utilisez la paire d’arguments instance_type et instance_count. Pour l’entraînement sur les clusters hétérogènes, utilisez instance_groups.

    Note

    Pour obtenir la liste complète des conteneurs de cadre, des versions de cadres et des versions Python disponibles, consultez Conteneurs de cadre SageMaker AI dans le référentiel GitHub des conteneurs de Deep Learning AWS.

  4. Configurez la méthode estimator.fit avec les canaux d’entrée d’entraînement configurés avec les groupes d’instances et démarrez la tâche d’entraînement.

    estimator.fit( inputs={ 'training': training_input_channel_1, 'dummy-input-channel': training_input_channel_2 } )

Option 2 : utilisation des API de bas niveau de SageMaker

Si vous utilisez le AWS Command Line Interface ou AWS SDK pour Python (Boto3) et souhaitez utiliser des API SageMaker de bas niveau pour soumettre une demande de tâche d’entraînement sur un cluster hétérogène, consultez les références d’API suivantes.