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.
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. Proporcionamos un ejemplo de cómo ajustar varios algoritmos mediante la SageMaker IA SDK for Python cliente al final de esta guía.
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 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
de la HyperParameterTuningJobConfig
API debe estar configurado 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 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.
Temas
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 AI requiere permisos para llamar a otros servicios en tu nombre. Elija un rol AWS Identity and Access Management (de IAM) o deje 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, cuando se utiliza el XGBoost En el cuaderno de predicciones de abandono
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 AI 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 los horarios de inicio y finalización, ya que permite que la SageMaker IA utilice la capacidad sobrante para ejecutar los trabajos. Para obtener más información, consulte Formación puntual gestionada en Amazon SageMaker AI.
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 ajuste de SageMaker IA llamará directamente a la HyperparameterTuner
API y le 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 la IA 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 contenedores de SageMaker IA 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 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
En el siguiente ejemplo de código, se muestra cómo inicializar un sintonizador y establecer los rangos de hiperparámetros para un algoritmo integrado de IA: 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 de IA: 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,
)
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 ={})