Exécution d'une tâche de réglage des hyperparamètres avec démarrage à chaud - Amazon SageMaker

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.

Exécution d'une tâche de réglage des hyperparamètres avec démarrage à chaud

Utilisez le démarrage à chaud pour lancer une tâche de réglage d'hyperparamètres en utilisant une ou plusieurs tâches de réglage précédentes comme point de départ. Les résultats des tâches de réglage précédentes permettent d'indiquer les combinaisons d'hyperparamètres sur lesquelles se concentrer pour la nouvelle tâche de réglage. Le réglage des hyperparamètres utilise la recherche bayésienne ou la recherche aléatoire pour choisir des combinaisons de valeurs d'hyperparamètres à partir des plages que vous spécifiez. Pour de plus amples informations, veuillez consulter Comment fonctionne le réglage des hyperparamètres avec Amazon SageMaker . L'emploi d'informations issues de tâches de réglage d'hyperparamètres précédentes peut améliorer les performances de la nouvelle tâche de réglage des hyperparamètres grâce à une recherche plus efficace de la meilleure combinaison des hyperparamètres.

Note

En général, des tâches de réglage avec démarrage à chaud prennent plus longtemps à démarrer que les tâches de réglage des hyperparamètres standard, car les résultats des tâches parentes doivent être chargés avant de pouvoir lancer la tâche. L'augmentation du temps dépend du nombre total de tâches d'entraînement lancées par les tâches parentes.

Certaines raisons d'envisager un démarrage à chaud :

  • Pour augmenter progressivement le nombre de tâches d'entraînement sur plusieurs tâches de réglage en fonction des résultats obtenus après chaque itération.

  • Pour régler un modèle à l'aide des nouvelles données que vous avez reçues.

  • Pour modifier les plages d'hyperparamètres utilisées dans une tâche de réglage précédente, remplacer les hyperparamètres statiques par des réglables, ou remplacer les hyperparamètres réglables par des valeurs statiques.

  • Vous avez arrêté de façon précoce une tâche d'hyperparamètres précédente ou elle s'est arrêtée de manière inattendue.

Types de tâches de réglage avec démarrage à chaud

Il existe deux différents types de tâches de réglage avec démarrage à chaud :

IDENTICAL_DATA_AND_ALGORITHM

La nouvelle tâche de réglage des hyperparamètres utilise les mêmes données d'entrée et la même image d'entraînement que les tâches d'entraînement parentes. Vous pouvez modifier les plages des hyperparamètres de la recherche et le nombre maximal de tâches d'entraînement lancées par la tâche de réglage des hyperparamètres. Vous pouvez également inverser les hyperparamètres de réglables à statiques, et inversement, mais le nombre total de d'hyperparamètres statiques et réglables doit être identique à celui de toutes les tâches parentes. Vous ne pouvez pas utiliser une nouvelle version de l'algorithme d'entraînement, à moins que les modifications de la nouvelle version n'affectent pas l'algorithme lui-même. Par exemple, les modifications qui améliorent la journalisation ou l'ajout de la prise en charge d'un autre format de données sont autorisées.

Utilisez des données et un algorithme identiques lorsque vous utilisez les mêmes données d'entraînement que celles d'une tâche de réglage d'hyperparamètres précédente, mais que vous souhaitez augmenter le nombre total de tâches d'entraînement ou modifier des plages ou des valeurs d'hyperparamètres.

Lorsque vous exécutez une tâche de réglage avec démarrage à chaud de type IDENTICAL_DATA_AND_ALGORITHM, un champ supplémentaire apparaît dans la réponse à DescribeHyperParameterTuningJob nommé OverallBestTrainingJob. La valeur de ce champ correspond à la tâche TrainingJobSummaryde formation présentant la meilleure valeur métrique objective parmi toutes les tâches de formation lancées par cette tâche de réglage et toutes les tâches parentales spécifiées pour la tâche de réglage Warm Start.

TRANSFER_LEARNING

La nouvelle tâche de réglage des hyperparamètres peut inclure des données d'entrée, les plages d'hyperparamètres, un nombre maximal de tâches d'entraînement simultanées et un nombre maximal de tâches d'entraînement qui sont différents de ceux des tâches d'entraînement d'hyperparamètres parentes. Vous pouvez également inverser les hyperparamètres de réglables à statiques, et inversement, mais le nombre total de d'hyperparamètres statiques et réglables doit être identique à celui de toutes les tâches parentes. La version de l'image d'algorithme d'entraînement peut également être différente de celle utilisée pour la tâche de réglage d'hyperparamètres parente. Lorsque vous utilisez le transfert d'apprentissage, les modifications du jeu de données ou l'algorithme qui affectent de manière significative la valeur de la métrique d'objectif peuvent réduire l'utilité de l'utilisation du réglage avec démarrage à chaud.

Restrictions relatives au réglage avec démarrage à chaud

Les restrictions suivantes s'appliquent à toutes les tâches de réglage avec démarrage à chaud :

  • Une tâche de réglage peut avoir un maximum de 5 tâches parentes, et toutes les tâches parentes doivent être dans un état final (Completed, Stopped ou Failed) avant de lancer la nouvelle tâche de réglage.

  • La métrique d'objectif utilisée pour la nouvelle tâche de réglage doit être identique à celle employée pour les tâches parentes.

  • Le nombre total d'hyperparamètres statiques et réglables doit être identique entre les tâches parentes et la nouvelle tâche de réglage. Pour cette raison, si vous pensez avoir besoin d'utiliser un hyperparamètre en tant que réglable dans une prochaine tâche de réglage avec démarrage à chaud, vous devez l'ajouter en tant qu'hyperparamètre statique lors de la création de la tâche de réglage.

  • Le type de chaque hyperparamètre (continu, entier, catégorie) ne doit pas changer entre les tâches parentes et la nouvelle tâche de réglage.

  • Le nombre du total des modifications entre les hyperparamètres réglables des tâches parentes et les hyperparamètres statiques de la nouvelle tâche de réglage, plus le nombre de modifications des valeurs des hyperparamètres statiques ne peut pas être supérieure à 10. Par exemple, si la tâche parente comporte un hyperparamètres catégorie réglable avec red et blue comme valeurs possibles, et si vous modifiez que cet hyperparamètre en tant que statique dans la nouvelle tâche, ceci compte pour 2 modifications sur les 10 autorisées au total. Si le même hyperparamètre avait une valeur statique red dans la tâche parente, et si vous modifiez la valeur statique en blue pour la nouvelle tâche de réglage, ceci compte également pour 2 modifications.

  • Le réglage avec démarrage à chaud est non récursif. Par exemple, si vous créez MyTuningJob3 en tant que tâche de réglage avec démarrage à chaud avec MyTuningJob2 comme tâche parente, et si MyTuningJob2 est elle-même une tâche de réglage avec démarrage à chaud, avec MyTuningJob1 comme tâche parente, les informations apprises lors de l'exécution de MyTuningJob1 ne sont pas utilisées pour MyTuningJob3. Si vous souhaitez utiliser les informations de MyTuningJob1, vous devez explicitement l'ajouter en tant que parente pour MyTuningJob3.

  • Les tâches d'entraînement lancées par chaque tâche parente dans une tâche de réglage à démarrage à chaud sont comptabilisées par rapport aux 500 tâches d'entraînement maximum pour une tâche de réglage.

  • Les tâches de réglage des hyperparamètres créées avant le 1er octobre 2018 ne peuvent pas être utilisées en tant que tâches parentes pour les tâches de réglage avec démarrage à chaud.

Exemple de bloc-notes de réglage avec démarrage à chaud

Pour un exemple de bloc-notes expliquant comment utiliser le réglage du démarrage à chaud, voir https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb. Pour savoir comment créer et accéder à des instances de bloc-notes Jupyter dans lesquelles vous pouvez exécuter l'exemple SageMaker, consultez. Exemples de blocs-notes Une fois que vous avez créé une instance de bloc-notes et que vous l'avez ouverte, sélectionnez l'onglet SageMaker Exemples pour afficher la liste de tous les SageMaker exemples. L'exemple de bloc-notes de réglage avec démarrage à chaud se trouve dans la section Réglage des hyperparamètres et s'appelle hpo_image_classification_warmstart.ipynb. Pour ouvrir un bloc-notes, cliquez sur son onglet Use (Utiliser) et sélectionnez Create copy (Créer une copie).

Création d'une tâche de réglage avec démarrage à chaud

Vous pouvez utiliser le Python de bas niveau AWS SDK (Boto 3) ou le SageMaker Python de haut niveau SDK pour créer une tâche de réglage à chaud.

Create a Warm Start Tuning Job (niveau bas SageMaker API pour Python (Boto 3))

Pour utiliser le réglage avec démarrage à chaud, vous devez spécifier les valeurs d'un objet HyperParameterTuningJobWarmStartConfig et les transmettre avec le champ WarmStartConfig dans un appel à CreateHyperParameterTuningJob.

Le code suivant montre comment créer un HyperParameterTuningJobWarmStartConfigobjet et le transmettre à une CreateHyperParameterTuningJobtâche en utilisant le bas niveau SageMaker API pour Python (Boto 3).

Création de l'objet HyperParameterTuningJobWarmStartConfig :

warm_start_config = { "ParentHyperParameterTuningJobs" : [ {"HyperParameterTuningJobName" : 'MyParentTuningJob'} ], "WarmStartType" : "IdenticalDataAndAlgorithm" }

Créez la tâche de réglage avec démarrage à chaud :

smclient = boto3.Session().client('sagemaker') smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = 'MyWarmStartTuningJob', HyperParameterTuningJobConfig = tuning_job_config, # See notebook for tuning configuration TrainingJobDefinition = training_job_definition, # See notebook for job definition WarmStartConfig = warm_start_config)

Création d'un job de réglage Warm Start (SageMakerPythonSDK)

Pour utiliser Amazon SageMaker Python SDK afin d'exécuter une tâche de réglage au démarrage à chaud, vous devez :

  • Spécifier les tâches parentes et le type de démarrage à chaud à l'aide d'un objet WarmStartConfig.

  • Passez l'WarmStartConfigobjet comme valeur de l'warm_start_configargument d'un HyperparameterTunerobjet.

  • Appelez la méthode fit de l'objet HyperparameterTuner.

Pour plus d'informations sur l'utilisation d'Amazon SageMaker Python SDK pour le réglage des hyperparamètres, consultez https://github.com/aws/sagemaker-pysagemaker-automatic-model-tuningthon-sdk#.

Cet exemple utilise un évaluateur qui utilise l'algorithme Classification des images – MXNet pour l'entraînement. Le code suivant définit les plages d'hyperparamètres sur lesquelles portent la recherche de la tâche de réglage avec démarrage à chaud afin de trouver la meilleure combinaison de valeurs. Pour plus d'informations sur la configuration des plages d'hyperparamètres, consultez Définition des plages d'hyperparamètres.

hyperparameter_ranges = {'learning_rate': ContinuousParameter(0.0, 0.1), 'momentum': ContinuousParameter(0.0, 0.99)}

Le code suivant configure la tâche de réglage avec démarrage à chaud job en créant un objet WarmStartConfig.

from sagemaker.tuner import WarmStartConfig,WarmStartTypes parent_tuning_job_name = "MyParentTuningJob" warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents={parent_tuning_job_name})

Définissez ensuite les valeurs des hyperparamètres statiques, qui sont des hyperparamètres qui conservent la même valeur pour chaque tâche d'entraînement lancée par la tâche de réglage avec démarrage à chaud. Dans le code suivant, imageclassification est un évaluateur qui a été créé précédemment.

imageclassification.set_hyperparameters(num_layers=18, image_shape='3,224,224', num_classes=257, num_training_samples=15420, mini_batch_size=128, epochs=30, optimizer='sgd', top_k='2', precision_dtype='float32', augmentation_type='crop')

À présent, créez l'objet HyperparameterTuner et transmettez l'objet WarmStartConfig créé précédemment comme argument warm_start_config.

tuner_warm_start = HyperparameterTuner(imageclassification, 'validation:accuracy', hyperparameter_ranges, objective_type='Maximize', max_jobs=10, max_parallel_jobs=2, base_tuning_job_name='warmstart', warm_start_config=warm_start_config)

Terminez en appelant la méthode fit de l'objet HyperparameterTuner pour lancer la tâche de réglage avec démarrage à chaud.

tuner_warm_start.fit( {'train': s3_input_train, 'validation': s3_input_validation}, include_cls_metadata=False)