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)

Esta guía muestra cómo crear un nuevo trabajo de ajuste de optimización de hiperparámetros (HPO) para uno o varios algoritmos. Para crear un trabajo de HPO, defina la configuración 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. Al final de esta guía, incluimos un ejemplo de cómo ajustar varios algoritmos con el Python cliente SageMaker SDK for.

Componentes de un trabajo de ajuste

Un trabajo de ajuste de HPO 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 estos componentes se incluyen en su trabajo de ajuste de HPO depende de si su 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 ajuste de HPO. 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 específicos 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 XGBoost Random Cut Forest. Hyperband no se puede usar con algoritmos no iterativos, como árboles de decisión o k-Nearest 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 tanto, cuando se utiliza la característica interna de parada temprana Hyperband, el parámetro TrainingJobEarlyStoppingType de la API HyperParameterTuningJobConfig debe estar configurado en OFF.

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 una TrainingJobDefinition para cada trabajo de ajuste de HPO. 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 (de IAM) o deja que AWS cree uno con la política de AmazonSageMakerFullAccess IAM 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 de aprendizaje AWS Marketplace 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 desde la API.

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 elige un algoritmo integrado, este incluirá la información de imagen de Amazon Elastic Container Registry (Amazon ECR).

  • Si elige su propio contenedor, debe especificar la información de la imagen (Amazon ECR). Puede seleccionar el modo de entrada del algoritmo como archivo o canal.

  • Si prevé facilitar sus datos mediante un archivo CSV desde 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, al usar el XGBoost cuaderno de predicción de abandono, puede agregar dos canales: entrenamiento 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 Usa 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 Utilice Managed Spot Training 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.

Ejemplo de trabajo de ajuste de HPO

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 su trabajo de ajuste de HPO contiene un único algoritmo de entrenamiento, la función de SageMaker ajuste llamará directamente a la HyperparameterTuner API y transmitirá sus parámetros. Si su trabajo de ajuste de HPO contiene varios algoritmos de entrenamiento, la función de ajuste llamará a la función create de la API HyperparameterTuner. La create función indica a la API que espere 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 XGBoosty 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 formación en su bucket de Amazon S3 antes de utilizarlas en un trabajo de ajuste de HPO.

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 SageMaker integrado,. 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 SageMaker algoritmos integrados y. XGBoost Linear Learner El ejemplo de código también muestra cómo establecer una estrategia de ajuste y otros ajustes del 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, )

Ejecutar su trabajo de ajuste de HPO

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 ={})