Configuration et lancement de la tâche de réglage des hyperparamètres - Amazon SageMaker

Configuration et lancement de la tâche de réglage des hyperparamètres

Pour configurer et lancer une tâche de réglage des hyperparamètres, procédez aux étapes suivantes.

Spécification des paramètres de tâche de réglage des hyperparamètres

Pour spécifier les paramètres de la tâche de réglage des hyperparamètres, vous devez définir un objet JSON. Vous transmettez l'objet en tant que valeur du paramètre HyperParameterTuningJobConfig à CreateHyperParameterTuningJob lorsque vous créez la tâche de réglage.

Dans cet objet JSON, vous spécifiez :

  • Les plages d'hyperparamètres que vous souhaitez régler. Pour de plus amples informations, veuillez consulter Définition des plages d'hyperparamètres

  • Les limites de la ressource que la tâche de réglage des hyperparamètres peut consommer.

  • La métrique d'objectif pour la tâche de réglage des hyperparamètres. Une métrique d'objectif est la métrique que la tâche de réglage des hyperparamètres utilise pour évaluer la tâche de formation qu'elle lance.

    Note

    Pour utiliser votre propre algorithme de réglage des hyperparamètres, vous devez définir des métriques pour votre algorithme. Pour plus d'informations, veuillez consulter Définition des métriques.

La tâche de réglage des hyperparamètres définit des plages pour les hyperparamètres eta, alpha, min_child_weight et max_depth de l'algorithme intégré Algorithme XGBoost. La métrique d'objectif de la tâche de réglage des hyperparamètres optimise la métrique validation:auc envoyée par l'algorithme aux journaux CloudWatch Logs.

tuning_job_config = { "ParameterRanges": { "CategoricalParameterRanges": [], "ContinuousParameterRanges": [ { "MaxValue": "1", "MinValue": "0", "Name": "eta" }, { "MaxValue": "2", "MinValue": "0", "Name": "alpha" }, { "MaxValue": "10", "MinValue": "1", "Name": "min_child_weight" } ], "IntegerParameterRanges": [ { "MaxValue": "10", "MinValue": "1", "Name": "max_depth" } ] }, "ResourceLimits": { "MaxNumberOfTrainingJobs": 20, "MaxParallelTrainingJobs": 3 }, "Strategy": "Bayesian", "HyperParameterTuningJobObjective": { "MetricName": "validation:auc", "Type": "Maximize" } }

Configuration des tâches d'entraînement

Pour configurer les tâches d'entraînement lancées par la tâche de réglage, définissez un objet JSON que vous transmettrez en tant que valeur du paramètre TrainingJobDefinition de l'appel CreateHyperParameterTuningJob.

Dans cet objet JSON, vous spécifiez :

  • Facultatif : métriques émises par les tâches d'entraînement.

    Note

    Ne définissez des métriques que lorsque vous utilisez un algorithme d'entraînement personnalisé. Comme cet exemple utilise un algorithme intégré, aucune métrique ne doit être spécifiée. Pour de plus amples informations sur la définition des métriques, veuillez consulter Définition des métriques.

  • L'image de conteneur qui spécifie l'algorithme de formation.

  • La configuration d'entrée pour vos données de formation et de test.

  • L'emplacement de stockage pour la sortie de l'algorithme. Spécifiez le compartiment S3 où vous souhaitez stocker la sortie des tâches d'entraînement.

  • Les valeurs des hyperparamètres de l'algorithme qui ne sont pas configurés dans le réglage de tâche.

  • Le type d'instance à utiliser pour les tâches de formation.

  • La condition d'arrêt pour les tâches d'entraînement. Il s'agit de la durée maximale pour chaque tâche de formation.

Dans cet exemple, nous avons défini des valeurs statiques pour les paramètres eval_metric, num_round, objective, rate_drop et tweedie_variance_power de l'algorithme intégré Algorithme XGBoost.

SageMaker Python SDK v1
from sagemaker.amazon.amazon_estimator import get_image_uri training_image = get_image_uri(region, 'xgboost', repo_version='1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }
SageMaker Python SDK v2
training_image = sagemaker.image_uris.retrieve('xgboost', region, '1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }

Attribution d'un nom et lancement de la tâche de réglage des hyperparamètres

Maintenant, vous pouvez fournir un nom pour la tâche de réglage des hyperparamètres, puis la lancer en appelant l'API CreateHyperParameterTuningJob. Transmettez tuning_job_config et training_job_definition, que vous avez créé dans les étapes précédentes comme valeurs des paramètres.

tuning_job_name = "MyTuningJob" smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = tuning_job_name, HyperParameterTuningJobConfig = tuning_job_config, TrainingJobDefinition = training_job_definition)

Étape suivante

Surveillance de la progression d'une tâche de réglage des hyperparamètres