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 con Amazon SageMaker . 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.
Temas
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 aDescribeHyperParameterTuningJob
denominadoOverallBestTrainingJob
. El valor de este campo corresponde al TrainingJobSummarytrabajo de entrenamiento con el mejor valor métrico objetivo de todos los trabajos de entrenamiento iniciados por este trabajo de ajuste y todos los trabajos principales especificados para el trabajo de ajuste de arranque 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
oFailed
) 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
yblue
, 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 dered
en el trabajo principal y cambia el valor estático ablue
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 conMyTuningJob2
como elemento principal yMyTuningJob2
es en sí un trabajo de ajuste de inicio en caliente con un trabajo principalMyTuningJob1
, la información que se ha aprendido al ejecutarMyTuningJob1
no se utiliza paraMyTuningJob3
. Si desea utilizar la información deMyTuningJob1
, debe añadirla de forma explícita como un elemento principal paraMyTuningJob3
. -
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 muestra cómo utilizar la afinación con arranque en caliente, consulte https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynbhpo_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
Puedes usar el nivel bajo AWS SDK para Python (Boto 3) o el SageMaker Python de alto nivel SDK para crear un trabajo de ajuste inicial.
Temas
Crear un trabajo de ajuste de Warm Start (nivel bajo SageMaker API 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 siguiente código muestra cómo crear un HyperParameterTuningJobWarmStartConfig
objeto y pasarlo a un CreateHyperParameterTuningJob
trabajo mediante el nivel inferior SageMaker API 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)
Crear un trabajo de ajuste de Warm Start (SageMakerPythonSDK)
Para usar Amazon SageMaker Python SDK
-
Debe especificar los trabajos principales y el tipo de inicio en caliente usando un objeto
WarmStartConfig
. -
Pase el
WarmStartConfig
objeto como el valor delwarm_start_config
argumento de un HyperparameterTunerobjeto. -
Llame al método
fit
del objetoHyperparameterTuner
.
Para obtener más información sobre el uso de Amazon SageMaker Python SDK
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)