Logotipo de Zephyrnet

Resuelva de forma eficaz los problemas de convergencia de la formación distribuida con Amazon SageMaker Hyperband Automatic Model Tuning | Servicios web de Amazon

Fecha:

Los últimos años han mostrado un crecimiento sorprendente en las redes neuronales de aprendizaje profundo (DNN). Este crecimiento se puede ver en modelos más precisos e incluso abriendo nuevas posibilidades con IA generativa: modelos de lenguaje grande (LLM) que sintetizan lenguaje natural, generadores de texto a imagen y más. Estas mayores capacidades de las DNN tienen el costo de tener modelos masivos que requieren recursos computacionales significativos para ser entrenados. El entrenamiento distribuido aborda este problema con dos técnicas: paralelismo de datos y paralelismo de modelos. El paralelismo de datos se usa para escalar el proceso de capacitación en varios nodos y trabajadores, y el paralelismo de modelos divide un modelo y lo ajusta a la infraestructura designada. Amazon SageMaker entrenamiento distribuido los trabajos le permiten con un clic (o una llamada a la API) configurar un clúster de cómputo distribuido, entrenar un modelo, guardar el resultado en Servicio de almacenamiento simple de Amazon (Amazon S3) y apague el clúster cuando finalice. Además, SageMaker ha innovado continuamente en el espacio de formación distribuida mediante el lanzamiento de funciones como clústeres heterogéneos y bibliotecas de formación distribuidas para paralelismo de datos y paralelismo modelo.

El entrenamiento eficiente en un entorno distribuido requiere el ajuste de hiperparámetros. Un ejemplo común de buena práctica cuando se entrena en varias GPU es multiplicar el tamaño del lote (o mini-lote) por el número de GPU para mantener el mismo tamaño de lote por GPU. Sin embargo, ajustar los hiperparámetros a menudo afecta la convergencia del modelo. Por lo tanto, el entrenamiento distribuido debe equilibrar tres factores: distribución, hiperparámetros y precisión del modelo.

En esta publicación, exploramos el efecto del entrenamiento distribuido en la convergencia y cómo usar Ajuste automático de modelos de Amazon SageMaker para afinar los hiperparámetros del modelo para el entrenamiento distribuido mediante el paralelismo de datos.

El código fuente mencionado en esta publicación se puede encontrar en el Repositorio GitHub (se recomienda una instancia m5.xlarge).

Escale la capacitación de un solo entorno a uno distribuido

El paralelismo de datos es una forma de escalar el proceso de entrenamiento a múltiples recursos informáticos y lograr un tiempo de entrenamiento más rápido. Con el paralelismo de datos, los datos se dividen entre los nodos de cálculo y cada nodo calcula los gradientes en función de su partición y actualiza el modelo. Estas actualizaciones se pueden realizar utilizando uno o varios servidores de parámetros de forma asíncrona, de uno a muchos o de todos a todos. Otra forma puede ser usar un algoritmo AllReduce. Por ejemplo, en el algoritmo ring-allreduce, cada nodo se comunica con solo dos de sus nodos vecinos, lo que reduce las transferencias de datos en general. Para obtener más información sobre servidores de parámetros y ring-allreduce, consulte Lanzar la capacitación distribuida de TensorFlow fácilmente con Horovod o Parameter Servers en Amazon SageMaker. Con respecto a la partición de datos, si hay n computar nodos, entonces cada nodo debe obtener un subconjunto de los datos, aproximadamente 1/n en tamaño.

Para demostrar el efecto del entrenamiento de escalamiento horizontal en la convergencia del modelo, realizamos dos experimentos simples:

Cada entrenamiento de modelo se ejecutó dos veces: en una sola instancia y distribuido en varias instancias. Para el entrenamiento distribuido de DNN, para utilizar completamente los procesadores distribuidos, multiplicamos el tamaño del mini lote por la cantidad de instancias (cuatro). La siguiente tabla resume la configuración y los resultados.

Tipo de problema Clasificación de la imagen Clasificación binaria
Modelo DNN XGBoost
Ejemplo ml.c4.xgrande ml.m5.2xgrande
Conjunto de datos

MNIST

(Imágenes etiquetadas)

Marketing Directo
(categorías tabulares, numéricas y vectorizadas)
Métrica de validación Exactitud AUC
Épocas/Rondas 20 150
Numero de instancias 1 4 1 3
Tipo de distribución N/A Servidor de parámetros N/A TodoReducir
Tiempo de entrenamiento (minutos) 8 3 3 1
Puntaje de validación final 0.97 0.11 0.78 0.63

Para ambos modelos, el tiempo de entrenamiento se redujo casi linealmente por el factor de distribución. Sin embargo, la convergencia de modelos sufrió una caída significativa. Este comportamiento es consistente para los dos modelos diferentes, las diferentes instancias informáticas, los diferentes métodos de distribución y los diferentes tipos de datos. Entonces, ¿por qué la distribución del proceso de entrenamiento afectó la precisión del modelo?

Hay una serie de teorías que tratan de explicar este efecto:

  • Cuando las actualizaciones de tensor son grandes, el tráfico entre los trabajadores y el servidor de parámetros puede congestionarse. Por lo tanto, los servidores de parámetros asíncronos sufrirán una convergencia significativamente peor debido a los retrasos en las actualizaciones de los pesos [1].
  • El aumento del tamaño del lote puede provocar un ajuste excesivo y una mala generalización, lo que reduce la precisión de la validación [2].
  • Al actualizar de forma asíncrona los parámetros del modelo, es posible que algunos DNN no utilicen las ponderaciones del modelo actualizadas más recientes; por lo tanto, calcularán los gradientes en función de los pesos que están algunas iteraciones por detrás. Esto conduce a la obsolescencia del peso [3] y puede deberse a varias razones.
  • Algunos hiperparámetros son específicos del modelo o del optimizador. Por ejemplo, la documentación oficial de XGBoost dice que el exact valor para el tree_mode el hiperparámetro no admite el entrenamiento distribuido porque XGBoost emplea la distribución de datos de división de filas, mientras que el exact El método de árbol funciona en un formato de columna ordenada.
  • Algunos investigadores propusieron que configurar un mini lote más grande puede generar gradientes con menos estocasticidad. Esto puede suceder cuando la función de pérdida contiene mínimos locales y puntos de silla y no se realiza ningún cambio en el tamaño del paso, por lo que la optimización se atasca en dichos mínimos locales o puntos de silla [4].

Optimizar para entrenamiento distribuido

La optimización de hiperparámetros (HPO) es el proceso de buscar y seleccionar un conjunto de hiperparámetros que son óptimos para un algoritmo de aprendizaje. SageMaker Automatic Model Tuning (AMT) proporciona HPO como un servicio administrado mediante la ejecución de varios trabajos de capacitación en el conjunto de datos proporcionado. SageMaker AMT busca los rangos de hiperparámetros que especifique y devuelve los mejores valores, medidos por una métrica que elija. Puede usar SageMaker AMT con los algoritmos integrados o usar sus algoritmos y contenedores personalizados.

Sin embargo, la optimización para el entrenamiento distribuido difiere del HPO común porque, en lugar de lanzar una sola instancia por trabajo de entrenamiento, cada trabajo en realidad lanza un grupo de instancias. Esto significa un mayor impacto en el costo (especialmente si considera las costosas instancias aceleradas por GPU, que son típicas de DNN). Además de límites de AMT, posiblemente podrías golpear Límites de la cuenta de SageMaker para el número simultáneo de instancias de entrenamiento. Finalmente, el lanzamiento de clústeres puede generar una sobrecarga operativa debido a un tiempo de inicio más prolongado. SageMaker AMT tiene características específicas para abordar estos problemas. Hiperbanda con parada anticipada garantiza que las configuraciones de hiperparámetros que funcionan bien se ajusten con precisión y que las que tienen un rendimiento inferior se detengan automáticamente. Esto permite un uso eficiente del tiempo de formación y reduce los costes innecesarios. Además, SageMaker AMT es totalmente compatible con el uso de instancias de spot de Amazon EC2, que pueden optimizar la coste de la formación hasta el 90% sobre instancias bajo demanda. Con respecto a los tiempos de inicio prolongados, SageMaker AMT reutiliza automáticamente las instancias de capacitación dentro de cada trabajo de ajuste, lo que reduce el tiempo de inicio promedio de cada trabajo de entrenamiento por 20 veces. Además, debe seguir Mejores prácticas de AMT, como elegir los hiperparámetros relevantes, sus rangos y escalas apropiados, y la mejor cantidad de trabajos de entrenamiento simultáneos, y establecer una semilla aleatoria para reproducir los resultados.

En la siguiente sección, vemos estas características en acción mientras configuramos, ejecutamos y analizamos un trabajo de AMT usando el ejemplo de XGBoost que discutimos anteriormente.

Configurar, ejecutar y analizar un trabajo de ajuste

Como se mencionó anteriormente, el código fuente se puede encontrar en el Repositorio GitHub. En los pasos 1 a 5, descargamos y preparamos los datos, creamos el xgb3 estimador (el estimador XGBoost distribuido está configurado para usar tres instancias), ejecutar los trabajos de entrenamiento y observar los resultados. En esta sección, describimos cómo configurar el trabajo de ajuste para ese estimador, suponiendo que ya realizó los pasos 1 a 5.

Un trabajo de ajuste calcula los hiperparámetros óptimos para los trabajos de entrenamiento que inicia mediante el uso de una métrica para evaluar el rendimiento. Puede configura tu propia métrica, que SageMaker analizará en función de la expresión regular que configure y emita a stdout, o utilizar las métricas de Algoritmos integrados de SageMaker. En este ejemplo, usamos el métrica de objetivo XGBoost incorporada, por lo que no necesitamos configurar una expresión regular. Para optimizar la convergencia del modelo, optimizamos en función de la métrica AUC de validación:

objective_metric_name="validation:auc"

Ajustamos siete hiperparámetros:

  • num_ronda – Número de rondas para potenciar durante el entrenamiento.
  • eta – Reducción del tamaño del paso utilizada en las actualizaciones para evitar el sobreajuste.
  • alfa – Término de regularización L1 sobre pesos.
  • peso_min_niño – Suma mínima de peso de instancia (arpillera) necesaria en un niño. Si el paso de la partición del árbol da como resultado un nodo hoja con la suma del peso de la instancia inferior a min_child_weight, el proceso de construcción renuncia a una mayor partición.
  • máxima profundidad – Profundidad máxima de un árbol.
  • colsample_por nivel – Relación de submuestra de columnas para cada división, en cada nivel. Este submuestreo se realiza una vez por cada nuevo nivel de profundidad alcanzado en un árbol.
  • colsample_bytree – Relación de submuestra de columnas al construir cada árbol. Por cada árbol construido, el submuestreo ocurre una vez.

Para obtener más información sobre los hiperparámetros XGBoost, consulte Hiperparámetros XGBoost. El siguiente código muestra los siete hiperparámetros y sus rangos:

hyperparameter_ranges = { "num_round": IntegerParameter(100, 200), "eta": ContinuousParameter(0, 1), "min_child_weight": ContinuousParameter(1, 10), "alpha": ContinuousParameter(0, 2), "max_depth": IntegerParameter(1, 10), "colsample_bylevel": ContinuousParameter(0, 1), "colsample_bytree": ContinuousParameter(0, 1),
}

A continuación, proporcionamos la configuración para la estrategia Hiperbanda y la configuración del objeto sintonizador mediante SageMaker SDK. HyperbandStrategyConfig puede usar dos parámetros: max_resource (opcional) para el número máximo de iteraciones que se utilizarán para un trabajo de entrenamiento para lograr el objetivo, y min_resource – el número mínimo de iteraciones que debe utilizar un trabajo de entrenamiento antes de detener el entrenamiento. Usamos HyperbandStrategyConfig para configurar StrategyConfig, que luego se usa en la definición del trabajo de ajuste. Ver el siguiente código:

hsc = HyperbandStrategyConfig(max_resource=30, min_resource=1)
sc = StrategyConfig(hyperband_strategy_config=hsc)

Ahora creamos un HyperparameterTuner objeto, al que le pasamos la siguiente información:

  • El estimador XGBoost, configurado para ejecutarse con tres instancias
  • El nombre y la definición de la métrica objetiva
  • Nuestros rangos de hiperparámetros
  • Ajuste de configuraciones de recursos, como la cantidad de trabajos de capacitación para ejecutar en total y cuántos trabajos de capacitación se pueden ejecutar en paralelo
  • Ajustes de hiperbanda (la estrategia y configuración que configuramos en el último paso)
  • Parada temprana (early_stopping_type) ajustado a Off

¿Por qué configuramos la parada anticipada en Off? Los trabajos de entrenamiento se pueden detener antes cuando es poco probable que mejoren la métrica objetiva del trabajo de ajuste de hiperparámetros. Esto puede ayudar a reducir el tiempo de cálculo y evitar el sobreajuste de su modelo. Sin embargo, Hyperband utiliza un mecanismo incorporado avanzado para aplicar la detención anticipada. Por lo tanto, el parámetro early_stopping_type debe configurarse para Off cuando se utiliza la función de parada anticipada interna Hyperband. Ver el siguiente código:

tuner = HyperparameterTuner( xgb3, objective_metric_name, hyperparameter_ranges, max_jobs=30, max_parallel_jobs=4, strategy="Hyperband", early_stopping_type="Off", strategy_config=sc
)

Finalmente, comenzamos el trabajo de ajuste automático del modelo llamando al cómodo método. Si desea iniciar el trabajo de forma asíncrona, configure wait a False. Ver el siguiente código:

tuner.fit(
{"train": s3_input_train, "validation": s3_input_validation},
include_cls_metadata=False,
wait=True,
)

Puede seguir el progreso y el resumen del trabajo en la consola de SageMaker. En el panel de navegación, bajo Formación, escoger Trabajos de ajuste de hiperparámetros, luego elija el trabajo de ajuste relevante. La siguiente captura de pantalla muestra el trabajo de ajuste con detalles sobre el estado y el rendimiento de los trabajos de entrenamiento.

Cuando se completa el trabajo de ajuste, podemos revisar los resultados. En el ejemplo del cuaderno, mostramos cómo extraer resultados usando SageMaker SDK. Primero, examinamos cómo el trabajo de ajuste aumentó la convergencia del modelo. Puede adjuntar el HyperparameterTuner objeto usando el nombre del trabajo y llame al describir método. El método devuelve un diccionario que contiene metadatos y resultados del trabajo de ajuste.

En el siguiente código, recuperamos el valor del trabajo de entrenamiento de mejor desempeño, medido por nuestra métrica objetiva (AUC de validación):

tuner = HyperparameterTuner.attach(tuning_job_name=tuning_job_name)
tuner.describe()["BestTrainingJob"]["FinalHyperParameterTuningJobObjectiveMetric"]["Value"]

El resultado es 0.78 en AUC en el conjunto de validación. ¡Esa es una mejora significativa sobre el 0.63 inicial!

A continuación, veamos qué tan rápido se ejecutó nuestro trabajo de entrenamiento. Para eso, usamos el HiperparámetroTuningJobAnalytics en el SDK para obtener resultados sobre el trabajo de ajuste y leer en un marco de datos de Pandas para su análisis y visualización:

tuner_analytics = sagemaker.HyperparameterTuningJobAnalytics(tuning_job_name)
full_df = tuner_analytics.dataframe()
full_df.sort_values(by=["FinalObjectiveValue"], ascending=False).head()

Veamos el tiempo promedio que tomó un trabajo de entrenamiento con la estrategia Hiperbanda:

full_df["TrainingElapsedTimeSeconds"].mean()

El tiempo promedio fue de aproximadamente 1 minuto. Esto es coherente con el mecanismo de la estrategia Hiperbanda que evita los trabajos de formación de bajo rendimiento desde el principio. En términos de costo, el trabajo de ajuste nos cobró un total de 30 minutos de tiempo de entrenamiento. Sin la detención anticipada de Hyperband, se esperaba que la duración total de la capacitación facturable fuera de 90 minutos (30 trabajos * 1 minuto por trabajo * 3 instancias por trabajo). ¡Eso es tres veces mejor en ahorro de costos! Finalmente, vemos que el trabajo de ajuste ejecutó 30 trabajos de entrenamiento y tomó un total de 12 minutos. Eso es casi un 50% menos del tiempo esperado (30 trabajos/4 trabajos en paralelo * 3 minutos por trabajo).

Conclusión

En esta publicación, describimos algunos problemas de convergencia observados al entrenar modelos con entornos distribuidos. Vimos que SageMaker AMT con Hyperband abordó las principales preocupaciones que introdujo el entrenamiento distribuido paralelo de optimización de datos: convergencia (que mejoró en más del 10 %), eficiencia operativa (el trabajo de ajuste llevó un 50 % menos de tiempo que un trabajo secuencial no optimizado). han tomado) y rentabilidad (30 frente a los 90 minutos facturables de tiempo de trabajo de capacitación). La siguiente tabla resume nuestros resultados:

Métrica de mejora Sin ajuste/implementación de ajuste de modelo ingenuo Sintonización automática de modelos SageMaker Hyperband Mejora medida
Calidad del modelo
(Medido por validación AUC)
0.63 0.78 15%
Cost
(Medido por minutos de capacitación facturables)
90 30 66%
Eficiencia operacional
(Medido por el tiempo total de funcionamiento)
24 12 50%

Para realizar un ajuste fino con respecto a la escala (tamaño del clúster), puede repetir el trabajo de ajuste con varias configuraciones de clúster y comparar los resultados para encontrar los hiperparámetros óptimos que satisfagan la velocidad y la precisión del modelo.

Incluimos los pasos para lograr esto en la última sección del cuaderno.

Referencias

[1] Lian, Xiangru, et al. "Descenso de gradiente estocástico paralelo descentralizado asíncrono". Conferencia internacional sobre aprendizaje automático. PMLR, 2018.

[2] Keskar, Nitish Shirish, et al. "Sobre el entrenamiento de lotes grandes para el aprendizaje profundo: brecha de generalización y mínimos definidos". preimpresión arXiv arXiv: 1609.04836 (2016).

[3] Dai, Wei, et al. "Hacia la comprensión del impacto de la obsolescencia en el aprendizaje automático distribuido". preimpresión arXiv arXiv: 1810.03264 (2018).

[4] Dauphin, Yann N., et al. "Identificar y atacar el problema del punto de silla en la optimización no convexa de alta dimensión". Avances en los sistemas de procesamiento de información neuronal. 27 (2014).


Sobre la autora

Uri Rosenberg es el gerente técnico especialista en inteligencia artificial y aprendizaje automático para Europa, Medio Oriente y África. Con sede en Israel, Uri trabaja para empoderar a los clientes empresariales para que diseñen, construyan y operen cargas de trabajo de ML a escala. En su tiempo libre, disfruta andar en bicicleta, hacer caminatas y quejarse de la preparación de datos.

punto_img

Información más reciente

punto_img