Ejecución de un trabajo de ajuste de hiperparámetros de inicio en caliente - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecución de un trabajo de ajuste de hiperparámetros de inicio en caliente

Utilice el inicio en caliente para iniciar un trabajo de ajuste de hiperparámetros utilizando uno o varios trabajos de ajuste anteriores como punto de partida. Los resultados de los trabajos de ajuste anteriores se utilizan para informar de en qué combinaciones de hiperparámetros deben realizarse búsquedas en el nuevo trabajo de ajuste. El ajuste de hiperparámetros usa una búsqueda bien bayesiana o aleatoria para elegir combinaciones de valores de hiperparámetros de intervalos que especifica. Para obtener más información, consulte Cómo funciona el ajuste de hiperparámetros. El uso de información de trabajos de ajuste de hiperparámetros anteriores puede ayudar a incrementar el rendimiento del nuevo trabajo de ajuste de hiperparámetros al hacer que la búsqueda de la mejor combinación de hiperparámetros sea más eficaz.

nota

Los trabajos de ajuste de inicio en caliente suelen tardar más en iniciarse que los trabajos de ajuste de hiperparámetros estándar, ya que los resultados de los trabajos principales tienen que cargarse antes de que el trabajo pueda comenzar. El aumento de tiempo depende del número total de trabajos de entrenamiento lanzados por los trabajos principales.

Entre las razones para considerar un arranque en caliente se incluyen las siguientes:

  • Desea aumentar gradualmente el número de trabajos de entrenamiento en varios trabajos de ajuste en función de los resultados posteriores a cada iteración.

  • Para ajustar un modelo con los nuevos datos que haya recibido.

  • Para cambiar los intervalos de hiperparámetros que ha utilizado en un trabajo de ajuste anterior, cambie los hiperparámetros estáticos para que sean ajustables o cambie hiperparámetros ajustables a valores estáticos.

  • Ha detenido un trabajo de hiperparámetros anterior de forma anticipada o bien este se detuvo forma inesperada.

Tipos de trabajos de ajuste de inicio en caliente

Existen dos tipos de trabajos de ajuste de inicio en caliente:

IDENTICAL_DATA_AND_ALGORITHM

El nuevo trabajo de ajuste de hiperparámetros utiliza los mismos datos de entrada e imagen de entrenamiento que los trabajos de ajuste principales. Puede cambiar los intervalos de hiperparámetros para realizar búsquedas y el número máximo de trabajos de entrenamiento que el trabajo de ajuste de hiperparámetros lanza. También puede cambiar los hiperparámetros de ajustables a estáticos o de estáticos a ajustables, pero el número total de parámetros estáticos y ajustables debe seguir siendo el mismo que en todos los trabajos principales. No puede utilizar una nueva versión del algoritmo de entrenamiento, a menos que los cambios de la nueva versión no afecten al algoritmo en sí. Por ejemplo, están permitidos los cambios que mejoran el registro o la incorporación de compatibilidad con un formato de datos diferente.

Utilice un algoritmo y datos idénticos cuando utilice los mismos datos de entrenamiento que utilizó en un trabajo de ajuste de hiperparámetros anterior, pero desea aumentar el número total de trabajos de entrenamiento o cambiar intervalos o valores de hiperparámetros.

Cuando se ejecuta un trabajo de ajuste de inicio en caliente del tipo IDENTICAL_DATA_AND_ALGORITHM, existe un campo adicional en la respuesta a DescribeHyperParameterTuningJob denominado OverallBestTrainingJob. El valor de este campo es TrainingJobSummary para el trabajo de capacitación con el mejor valor métrico objetivo de todos los trabajos de capacitación que ha lanzado este trabajo de ajuste y todos los trabajos principales especificados para el trabajo de ajuste de inicio en caliente.

TRANSFER_LEARNING

El nuevo trabajo de ajuste de hiperparámetros puede incluir datos de entrada, intervalos de hiperparámetros, el número máximo de trabajos de entrenamiento simultáneos y el número máximo de trabajos de entrenamiento que son diferentes de sus trabajos de ajuste de hiperparámetros principales. También puede cambiar los hiperparámetros de ajustables a estáticos o de estáticos a ajustables, pero el número total de parámetros estáticos y ajustables debe seguir siendo el mismo que en todos los trabajos principales. La imagen del algoritmo de entrenamiento también puede ser una versión diferente de la versión que se ha utilizado en el trabajo de ajuste de hiperparámetros. Cuando se utiliza la transferencia de aprendizaje, los cambios en el conjunto de datos o el algoritmo que influyen significativamente en el valor de la métrica objetiva podrían reducir la utilidad de usar el ajuste de inicio en caliente.

Restricciones del ajuste de inicio en caliente

Las siguientes restricciones se aplican a todos los trabajos de ajuste de inicio en caliente:

  • Un trabajo de ajuste puede tener un máximo de 5 trabajos principales y todos los trabajos principales deben estar en un estado terminal (Completed, Stopped o Failed) antes de comenzar el nuevo trabajo de ajuste.

  • La métrica objetiva utilizada en el nuevo trabajo de ajuste debe ser la misma que la métrica objetiva usada en los trabajos principales.

  • El número total de hiperparámetros estáticos y ajustables debe seguir siendo el mismo si se tienen en cuenta los trabajos principales y el nuevo trabajo de ajuste. Por este motivo, si cree que le interesa utilizar un hiperparámetro como ajustable en un futuro trabajo de ajuste de inicio en caliente, debe añadirlo como hiperparámetro estático al crear un trabajo.

  • El tipo de cada hiperparámetro (continuo, entero, de categoría) no debe cambiar entre los trabajos principales y el nuevo trabajo de ajuste.

  • El número de cambios totales de hiperparámetros ajustables en trabajos principales, parámetros estáticos en nuevo trabajo de ajuste, más el número de cambios en los valores de hiperparámetros estáticos no puede ser superior a 10. Por ejemplo, si el trabajo principal tiene un hiperparámetro de categoría ajustable con los posibles valores red y blue, puede cambiar dicho hiperparámetro a estático en el nuevo trabajo de ajuste; esto cuenta como 2 cambios dentro del límite total permitido de 10. Si el mismo hiperparámetro tenía un valor estático de red en el trabajo principal y cambia el valor estático a blue en el nuevo trabajo de ajuste, esto también cuenta como 2 cambios.

  • El ajuste de inicio en caliente no es recursivo. Por ejemplo, si crea MyTuningJob3 como un trabajo de ajuste de inicio en caliente con MyTuningJob2 como elemento principal y MyTuningJob2 es en sí un trabajo de ajuste de inicio en caliente con un trabajo principal MyTuningJob1, la información que se ha aprendido al ejecutar MyTuningJob1 no se utiliza para MyTuningJob3. Si desea utilizar la información de MyTuningJob1, debe añadirla de forma explícita como un elemento principal para MyTuningJob3.

  • Los trabajos de entrenamiento que cada trabajo principal lanza en un trabajo de ajuste de inicio en caliente cuentan en el recuento de 500 trabajos de entrenamiento máximos para un trabajo de ajuste.

  • Los trabajos de ajuste de hiperparámetros creados antes del 1 de octubre de 2018 no se pueden utilizar como trabajos principales para trabajos de ajuste de inicio en caliente.

Cuaderno de muestra de ajuste de inicio en caliente

Para ver un ejemplo de cuaderno que muestre cómo utilizar el ajuste de arranque en caliente, consulte https://github.com/awslabs/ amazon-sagemaker-examples /blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb. Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas con las que puede ejecutar el ejemplo, consulte. SageMaker Ejemplo de cuadernos Una vez que haya creado una instancia de bloc de notas y la haya abierto, seleccione la pestaña SageMaker Ejemplos para ver una lista de todos los SageMaker ejemplos. El cuaderno de muestra de ajuste de inicio en caliente se encuentra en la sección de ajuste de hiperparámetros y se llama hpo_image_classification_warmstart.ipynb. Para abrir un cuaderno, haga clic en la pestaña Usar y seleccione Crear copia.

Creación de un trabajo de ajuste de inicio en caliente

Puede utilizar el SDK de AWS de bajo nivel para Python (Boto 3) o el SDK Python de SageMaker de alto nivel para crear un trabajo de ajuste de inicio en caliente.

Crear un trabajo de ajuste de Warm Start ( SageMaker API de bajo nivel para Python (Boto 3))

Para utilizar el ajuste de inicio en caliente, debe especificar los valores de un objeto HyperParameterTuningJobWarmStartConfig y pasarlo como el campo WarmStartConfig en una llamada a CreateHyperParameterTuningJob.

El código siguiente muestra cómo crear un HyperParameterTuningJobWarmStartConfigobjeto y pasarlo a un CreateHyperParameterTuningJobtrabajo mediante la SageMaker API de bajo nivel para Python (Boto 3).

Cree el objeto HyperParameterTuningJobWarmStartConfig:

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

Cree el objeto de ajuste de inicio en caliente:

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)

Creación de un trabajo de ajuste de inicio en caliente (SageMaker Python SDK)

Para usar el SDK de Amazon SageMaker Python para ejecutar un trabajo de ajuste inicial, debe:

  • Debe especificar los trabajos principales y el tipo de inicio en caliente usando un objeto WarmStartConfig.

  • Pase el WarmStartConfig objeto como el valor del warm_start_config argumento de un HyperparameterTunerobjeto.

  • Llame al método fit del objeto HyperparameterTuner.

Para obtener más información sobre el uso del SDK de Amazon SageMaker Python para ajustar hiperparámetros, consulte https://github.com/aws/ sagemaker-python-sdk # sagemaker-automatic-model-tuning.

En este ejemplo se utiliza un estimador que utiliza el algoritmo Image Classification - MXNet para el entrenamiento. El siguiente código establece los intervalos de hiperparámetros donde realiza las búsquedas el trabajo de ajuste de inicio en caliente para encontrar la mejor combinación de valores. Para obtener información sobre cómo configurar intervalos de hiperparámetros, consulte Definición de intervalos de hiperparámetros.

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

El código siguiente configura el trabajo de ajuste de inicio en caliente creando un objeto 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})

Ahora establezca los valores de los hiperparámetros estáticos, que son hiperparámetros que mantienen el mismo valor para cada trabajo de entrenamiento que el trabajo de ajuste de inicio en caliente lanza. En el código siguiente, imageclassification es un estimador que se creó anteriormente.

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')

Ahora cree el objeto HyperparameterTuner y pase el objeto WarmStartConfig que ha creado anteriormente como argumento 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)

Por último, llame al método fit del objeto HyperparameterTuner para lanzar el trabajo de ajuste de inicio en caliente.

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