Crear un trabajo de ajuste de optimización de hiperparámetros para uno o varios algoritmos (Consola) - 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.

Crear un trabajo de ajuste de optimización de hiperparámetros para uno o varios algoritmos (Consola)

En esta guía, se muestra cómo crear un nuevo trabajo de optimización de hiperparámetros (HPO) para uno o más algoritmos. Para crear un HPO trabajo, defina los ajustes del trabajo de ajuste y cree definiciones de trabajos de entrenamiento para cada algoritmo que se esté ajustando. A continuación, configure los recursos y cree el trabajo de ajuste. En las secciones siguientes se proporciona información sobre cómo completar cada paso. Proporcionamos un ejemplo de cómo ajustar varios algoritmos mediante el SageMaker SDK for Python cliente al final de esta guía.

Componentes de un trabajo de ajuste

Un trabajo de HPO ajuste contiene los tres componentes siguientes:

  • Configuración de trabajos de ajuste

  • Definiciones de trabajos de entrenamiento

  • Configuración de trabajos de ajuste

La forma en que se incluyen estos componentes en el trabajo de HPO ajuste depende de si el trabajo de ajuste contiene uno o varios algoritmos de entrenamiento. La siguiente guía describe cada uno de los componentes y ofrece un ejemplo de ambos tipos de trabajos de ajuste.

La configuración del trabajo de ajuste se aplica a todos los algoritmos del trabajo de HPO ajuste. El inicio en caliente y la parada temprana solo están disponibles cuando se ajusta un solo algoritmo. Después de definir la configuración del trabajo, puede crear definiciones de entrenamiento individuales para cada algoritmo o variación que desee ajustar.

Inicio en caliente

Si clonó este trabajo, puede utilizar los resultados de un trabajo de ajuste anterior para mejorar el rendimiento de este trabajo de ajuste. Se trata de la característica de inicio en caliente y solo está disponible cuando se ajusta un único algoritmo. Con la opción de inicio en caliente, puede seleccionar hasta cinco trabajos de ajuste de hiperparámetros anteriores para utilizarlos. Como alternativa, puede utilizar el aprendizaje por transferencia para añadir datos adicionales al trabajo de ajuste principal. Al seleccionar esta opción, se elige un trabajo de ajuste anterior como principal.

nota

El inicio en caliente es compatible exclusivamente con trabajos de ajuste creados después del 1 de octubre de 2018. Para obtener más información, consulte Ejecutar un trabajo de inicio en caliente.

Parada temprana

Para reducir el tiempo de cálculo y evitar ajustes excesivos del modelo, puede realizar la parada temprana de los trabajos de entrenamiento. La parada temprana es útil cuando es poco probable que el trabajo de entrenamiento mejore la mejor métrica objetiva actual del trabajo de ajuste de hiperparámetros. Al igual que el inicio en caliente, esta característica solo está disponible cuando se ajusta un algoritmo único. Se trata de una característica automática sin opciones de configuración y está desactivada de forma predeterminada. Para obtener más información sobre cómo funciona la parada temprana, los algoritmos que la admiten y cómo utilizarla con sus propios algoritmos, consulte Parada temprana de trabajos de entrenamiento.

Estrategia de ajuste

La estrategia de ajuste puede ser aleatoria, bayesiana o Hyperband. Estas selecciones especifican cómo los algoritmos de ajuste automático buscan los rangos de hiperparámetros especificados que se seleccionan en un paso posterior. La búsqueda aleatoria elige combinaciones aleatorias de valores de los rangos especificados y se puede ejecutar secuencialmente o en paralelo. La optimización bayesiana elige los valores en función de lo que es más probable que obtenga el mejor resultado según el historial conocido de selecciones anteriores. Hyperband utiliza una estrategia de fidelidad múltiple que asigna recursos de forma dinámica a trabajos bien utilizados y detiene automáticamente aquellos que tienen un rendimiento inferior. La nueva configuración que se inicia después de detener otras configuraciones se elige de forma aleatoria.

Hyperband solo se puede usar con algoritmos iterativos o algoritmos que ejecutan pasos en iteraciones, como XGBoosto Random Cut Forest. Hyperband no se puede usar con algoritmos no iterativos, como árboles de decisión o K-near Neighbors. Para obtener más información sobre estrategias de búsqueda, consulte Cómo funciona el ajuste de hiperparámetros.

nota

Hyperband utiliza un mecanismo interno avanzado para detener anticipadamente. Por lo tanto, cuando se utiliza el Hyperband función interna de parada temprana, el parámetro TrainingJobEarlyStoppingType en el HyperParameterTuningJobConfig API debe estar establecido enOFF.

Etiquetas

Para ayudarle a gestionar los trabajos de ajuste, puede introducir etiquetas como pares clave-valor para asignar metadatos a trabajos de ajuste. Los valores del par clave-valor no son obligatorios. Puede utilizar la clave sin valores. Para ver las claves asociadas a un trabajo, elija la pestaña Etiquetas en la página de detalles del trabajo de ajuste. Para obtener más información acerca del etiquetado de trabajos de ajuste, consulte Gestión de trabajos de ajuste y entrenamiento de hiperparámetros.

Para crear una definición de trabajo de entrenamiento, debe configurar el algoritmo y los parámetros, definir la entrada y salida de datos y configurar recursos. Proporcione al menos uno TrainingJobDefinitionpara cada trabajo de HPO ajuste. Cada definición de entrenamiento especifica la configuración de un algoritmo.

Para crear varias definiciones para su trabajo de entrenamiento, puede clonar una definición. La clonación de un trabajo puede ahorrar tiempo porque copia todos los ajustes del trabajo, incluidos los canales de datos y las ubicaciones de almacenamiento de Amazon S3 para artefactos de salida. Puede editar un trabajo clonado para cambiar lo que necesite según su caso de uso.

Configuración de algoritmo y parámetros

La siguiente lista describe lo que necesita para configurar el conjunto de valores de hiperparámetros para cada trabajo de entrenamiento.

  • Un nombre para su trabajo de ajuste

  • Permiso para acceder a servicios

  • Parámetros para cualquier opción de algoritmo

  • Una métrica objetiva

  • El rango de valores de los hiperparámetros, cuando sea necesario

Nombre

Proporcione un nombre único para la definición de entrenamiento.

Permisos

Amazon SageMaker requiere permisos para llamar a otros servicios en tu nombre. Elige un rol AWS Identity and Access Management (IAM) o deja que AWS cree uno con la AmazonSageMakerFullAccess IAM política adjunta.

Configuración de seguridad opcional

La configuración de aislamiento de red impide que el contenedor realice llamadas de red salientes. Esto es obligatorio para las ofertas AWS Marketplace de aprendizaje automático.

También puede optar por utilizar una nube privada virtual (VPC).

nota

El cifrado entre contenedores solo está disponible cuando se crea una definición de trabajo a partir deAPI.

Opciones de algoritmo

Puede elegir uno de los algoritmos integrados, su propio algoritmo, su propio contenedor con un algoritmo o puede suscribirse a un algoritmo desde AWS Marketplace.

  • Si eliges un algoritmo integrado, este incluirá la información de imagen de Amazon Elastic Container Registry (AmazonECR) rellenada previamente.

  • Si eliges tu propio contenedor, debes especificar la información de la imagen (AmazonECR). Puede seleccionar el modo de entrada para el algoritmo como archivo o canal.

  • Si piensa proporcionar sus datos mediante un CSV archivo de Amazon S3, debe seleccionar el archivo.

Métricas

Si elige un algoritmo integrado, se le proporcionan las métricas. Si elige su propio algoritmo, debe definir sus métricas. Puede definir hasta 20 métricas para que su trabajo de ajuste las monitorice. Debe elegir una métrica como métrica objetiva. Para obtener más información sobre cómo definir una métrica para un trabajo de ajuste, consulte Definición de métricas.

Métrica objetiva

Para buscar el mejor trabajo de entrenamiento, defina una métrica objetiva e indique si desea maximizarla o minimizarla. Una vez finalizado el trabajo de entrenamiento, podrá ver la página de detalles del trabajo de ajuste. La página de detalles proporciona un resumen del mejor trabajo de entrenamiento que se encuentra utilizando esta métrica objetiva.

Configuración de hiperparámetros

Cuando elige un algoritmo integrado, los valores predeterminados de los hiperparámetros se establecen automáticamente, utilizando rangos optimizados para el algoritmo en particular. Puede cambiar estos valores como considere oportuno. Por ejemplo, en lugar de un rango, puede establecer un valor fijo para un hiperparámetro estableciendo el tipo del parámetro en estático. Cada algoritmo tiene distintos parámetros requeridos y opcionales. Para obtener más información, consulte Prácticas recomendadas para ajustar hiperparámetros y Definición de rangos de hiperparámetros.

Definir entrada y salida de datos

Cada definición de trabajo de entrenamiento para un trabajo de ajuste debe configurar los canales para entradas de datos, ubicaciones de salida de datos y, opcionalmente, cualquier ubicación de almacenamiento de puntos de control para cada trabajo de entrenamiento.

Configuración de datos de entrada

Los datos de entrada se definen mediante canales. Cada canal tiene su propia ubicación de origen (Amazon S3 o Amazon Elastic File System), compresión y opciones de formato. Puede definir hasta 20 canales de orígenes de entrada. Si el algoritmo elegido admite varios canales de entrada, también puede especificarlos. Por ejemplo, cuando utiliza el XGBoost En el cuaderno de predicciones de abandono, puedes añadir dos canales: tren y validación.

Configuración del punto de comprobación

Los puntos de comprobación se generan periódicamente durante el entrenamiento. Debe elegir una ubicación de Amazon S3 para guardar los puntos de comprobación. Los puntos de comprobación se utilizan en los informes de métricas y también se utilizan para reanudar los trabajos de entrenamiento de spot administrados. Para obtener más información, consulte Puntos de control en Amazon SageMaker.

Configuración de datos de salida

Defina una ubicación de Amazon S3 para almacenar los artefactos del trabajo de entrenamiento. Tiene la opción de añadir el cifrado a la salida mediante una clave AWS Key Management Service (AWS KMS).

Configure recursos del trabajo de entrenamiento

Cada definición de trabajo de entrenamiento para un trabajo de ajuste debe configurar los recursos que se van a implementar, incluidos los tipos y recuentos de instancias, el entrenamiento de spot administrado y las condiciones de parada.

Configuración de recursos

Cada definición de entrenamiento puede tener una configuración de recursos diferente. Elija el tipo de instancia y el número de nodos.

Entrenamiento de spot administrado

Puede ahorrar costes informáticos si dispone de flexibilidad en cuanto a las horas de inicio y finalización, ya que permite utilizar SageMaker la capacidad sobrante para ejecutar los trabajos. Para obtener más información, consulte Formación presencial gestionada en Amazon SageMaker.

Condición de parada

La condición de parada especifica la duración máxima permitida para cada trabajo de entrenamiento.

Agregar o clonar un trabajo de entrenamiento

Tras crear una definición de trabajo de entrenamiento para un trabajo de ajuste, volverá al panel Definiciones de trabajos de entrenamiento. En este panel puede crear definiciones de trabajos de entrenamiento adicionales para formar algoritmos adicionales. Puede seleccionar la opción Añadir definición de trabajo de entrenamiento y seguir los pasos para volver a definir un trabajo de entrenamiento.

Como alternativa, para replicar una definición de trabajo de entrenamiento existente y editarla para el nuevo algoritmo, seleccione Clonar en el menú Acción. La opción de clonación puede ahorrar tiempo porque copia todos los ajustes del trabajo, incluidos los canales de datos y las ubicaciones de almacenamiento de Amazon S3. Consulte Gestión de trabajos de ajuste y entrenamiento de hiperparámetros para obtener información sobre clonación.

Límites de recursos

Puede especificar el número máximo de trabajos de entrenamiento simultáneos que un trabajo de ajuste de hiperparámetros puede ejecutar simultáneamente (10 como máximo). También puede especificar el número máximo de trabajos de entrenamiento que puede ejecutar el trabajo de ajuste de hiperparámetros (500 como máximo). El número de trabajos paralelos no debe superar el número de nodos que ha solicitado en todas sus definiciones de entrenamiento. El número total de trabajos no puede superar el número de trabajos que se espera que ejecuten las definiciones.

Revise la configuración de los trabajos, las definiciones de los trabajos de entrenamiento y los límites de recursos. Elija Crear trabajo de ajuste de hiperparámetros.

HPOejemplo de trabajo de ajuste

Para ejecutar un trabajo de entrenamiento de optimización de hiperparámetros (HPO), cree primero una definición de trabajo de entrenamiento para cada algoritmo que se esté ajustando. A continuación, defina los parámetros del trabajo de ajuste y configure los recursos para el trabajo de ajuste. Por último, ejecute el trabajo de ajuste.

Si tu trabajo de HPO ajuste contiene un único algoritmo de entrenamiento, la función de SageMaker ajuste lo llamará HyperparameterTuner API directamente y transferirá tus parámetros. Si el trabajo de HPO ajuste contiene varios algoritmos de entrenamiento, la función de ajuste llamará a la create función del HyperparameterTunerAPI. La create función les indica API que esperen un diccionario que contenga uno o más estimadores.

En la siguiente sección, los ejemplos de código muestran cómo ajustar un trabajo que contiene un único algoritmo de entrenamiento o varios algoritmos mediante el SageMaker Python SDK.

Crear definiciones de trabajos de entrenamiento

Al crear un trabajo de ajuste que incluye varios algoritmos de entrenamiento, la configuración del trabajo de ajuste incluirá los estimadores y métricas y otros parámetros de los trabajos de entrenamiento. Por tanto, primero debe crear la definición del trabajo de entrenamiento y, a continuación, configurar el trabajo de ajuste.

El siguiente ejemplo de código muestra cómo recuperar dos SageMaker contenedores que contienen los algoritmos integrados XGBoost y Linear Learner. Si su trabajo de ajuste contiene solo un algoritmo de entrenamiento, omita uno de los contenedores y uno de los estimadores.

import sagemaker from sagemaker import image_uris from sagemaker.estimator import Estimator sess = sagemaker.Session() region = sess.boto_region_name role = sagemaker.get_execution_role() bucket = sess.default_bucket() prefix = "sagemaker/multi-algo-hpo" # Define the training containers and intialize the estimators xgb_container = image_uris.retrieve("xgboost", region, "latest") ll_container = image_uris.retrieve("linear-learner", region, "latest") xgb_estimator = Estimator( xgb_container, role=role, instance_count=1, instance_type="ml.m4.xlarge", output_path='s3://{}/{}/xgb_output".format(bucket, prefix)', sagemaker_session=sess, ) ll_estimator = Estimator( ll_container, role, instance_count=1, instance_type="ml.c4.xlarge", output_path="s3://{}/{}/ll_output".format(bucket, prefix), sagemaker_session=sess, ) # Set static hyperparameters ll_estimator.set_hyperparameters(predictor_type="binary_classifier") xgb_estimator.set_hyperparameters( eval_metric="auc", objective="binary:logistic", num_round=100, rate_drop=0.3, tweedie_variance_power=1.4, )

A continuación, defina los datos de entrada especificando los conjuntos de datos de entrenamiento, validación y prueba, tal y como se muestra en el siguiente ejemplo de código. En este ejemplo, se muestra cómo ajustar varios algoritmos de entrenamiento.

training_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/train".format(bucket, prefix), content_type="csv" ) validation_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/validate".format(bucket, prefix), content_type="csv" ) test_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/test".format(bucket, prefix), content_type="csv" ) train_inputs = { "estimator-1": { "train": training_data, "validation": validation_data, "test": test_data, }, "estimator-2": { "train": training_data, "validation": validation_data, "test": test_data, }, }

Si su algoritmo de ajuste contiene solo un algoritmo de entrenamiento, train_inputs debe contener solo un estimador.

Debe cargar las entradas de los conjuntos de datos de entrenamiento, validación y entrenamiento en su bucket de Amazon S3 antes de utilizarlos en un trabajo de HPO ajuste.

Definición de recursos y configuración para su trabajo de ajuste

En esta sección se muestra cómo inicializar un ajustador, definir recursos y especificar la configuración del trabajo de ajuste. Si su trabajo de ajuste contiene varios algoritmos de entrenamiento, estos ajustes se aplican a todos los algoritmos incluidos en el trabajo de ajuste. En esta sección se proporcionan dos ejemplos de código para definir un ajustador. Los ejemplos de código muestran cómo optimizar un único algoritmo de entrenamiento, seguido de un ejemplo de cómo ajustar varios algoritmos de entrenamiento.

Ajuste de un único algoritmo de entrenamiento

El siguiente ejemplo de código muestra cómo inicializar un sintonizador y establecer los rangos de hiperparámetros para un algoritmo integrado: SageMaker XGBoost.

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter hyperparameter_ranges = { "max_depth": IntegerParameter(1, 10), "eta": ContinuousParameter(0.1, 0.3), } objective_metric_name = "validation:accuracy" tuner = HyperparameterTuner( xgb_estimator, objective_metric_name, hyperparameter_ranges, objective_type="Maximize", max_jobs=5, max_parallel_jobs=2, )

Ajuste de varios algoritmos de entrenamiento

Cada trabajo de entrenamiento requiere configuraciones diferentes, que se especifican mediante un diccionario. El siguiente ejemplo de código muestra cómo inicializar un sintonizador con configuraciones para dos algoritmos integrados: SageMaker XGBoost y Linear Learner. El ejemplo de código también muestra cómo establecer una estrategia de ajuste y otros ajustes de trabajo, como los recursos de cálculo para el trabajo de ajuste. En el siguiente ejemplo de código se utiliza metric_definitions_dict, que es opcional.

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter # Initialize your tuner tuner = HyperparameterTuner.create( estimator_dict={ "estimator-1": xgb_estimator, "estimator-2": ll_estimator, }, objective_metric_name_dict={ "estimator-1": "validation:auc", "estimator-2": "test:binary_classification_accuracy", }, hyperparameter_ranges_dict={ "estimator-1": {"eta": ContinuousParameter(0.1, 0.3)}, "estimator-2": {"learning_rate": ContinuousParameter(0.1, 0.3)}, }, metric_definitions_dict={ "estimator-1": [ {"Name": "validation:auc", "Regex": "Overall test accuracy: (.*?);"} ], "estimator-2": [ { "Name": "test:binary_classification_accuracy", "Regex": "Overall test accuracy: (.*?);", } ], }, strategy="Bayesian", max_jobs=10, max_parallel_jobs=3, )

Ejecute su trabajo de HPO afinación

Ahora puede ejecutar su trabajo de ajuste pasando las entradas de entrenamiento a la función fit de la clase HyperparameterTuner. El siguiente ejemplo de código muestra cómo pasar el parámetro train_inputs, que se define en un ejemplo de código anterior, al ajustador.

tuner.fit(inputs=train_inputs, include_cls_metadata ={}, estimator_kwargs ={})