Path: blob/master/site/es-419/tutorials/distribute/keras.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Entrenamiento distribuido con Keras
Descripción general
La API tf.distribute.Strategy
ofrece una abstracción para distribuir su entrenamiento entre varias unidades de procesamiento. Permite realizar un entrenamiento distribuido usando los modelos y el código de entrenamiento existentes con cambios mínimos.
Este tutorial muestra cómo usar tf.distribute.MirroredStrategy
para implementar la replicación dentro del grafo con entrenamiento síncrono en muchas GPU de una misma máquina. Esencialmente, la estrategia copia todas las variables del modelo en cada procesador. Luego usa all-reduce para combinar los gradientes de todos los procesadores y aplica el valor combinado a todas las copias del modelo.
Usará las API de tf.keras
API para construir el modelo y Model.fit
para entrenarlo (si quiere aprender sobre la capacitación distribuida con un bucle de entrenamiento personalizado y el MirroredStrategy
, consulte este tutorial).
MirroredStrategy
entrene su modelo en varias GPU de una sola máquina. Para entrenamiento síncrono en muchas GPUs en múltiples trabajadores, usa el tf.distribute.MultiWorkerMirroredStrategy
con el Keras Model.fit o un bucle de capacitación personalizado. Para otras opciones, refiérete a la Guía de entrenamiento distribuido.
Para conocer otras estrategias, consulte la guía Entrenamiento distribuido con TensorFlow.
Preparación
Descargar el conjunto de datos
Cargue el conjunto de datos MNIST de Conjuntos de datos TensorFlow. Esto devuelve un conjunto de datos en formato tf.data
.
Si establece el argumento con_info
en True
, se incluirán los metadatos de todo el conjunto de datos, que se almacenan aquí en info
. Este objeto de metadatos incluye, entre otras cosas, el número de ejemplos de entrenamiento y de prueba.
Definir la estrategia de distribución
Crea un objeto MirroredStrategy
. Se encargará de la distribución y creará un gestor de contexto (MirroredStrategy.scope
) en el que construir tu modelo.
Configurar la canalización de entrada
Si está entrenando un modelo con varias GPU, puedes usar eficazmente la potencia de procesamiento adicional aumentando el tamaño del lote. Por lo general, debes usar el tamaño de lote más grande que quepa en la memoria de la GPU y ajustar la tasa de aprendizaje en consecuencia.
Define una función que normalice los valores de los pixeles de imagen que van de [0, 255]
a [0, 1]
(escalado de características):
Aplica esta función scale
a los datos de entrenamiento y de prueba, y luego usa las APIs tf.data.Dataset
para mezclar los datos de entrenamiento (Dataset.shuffle
) y procesarlos por lotes (Dataset.batch
). Recuerda conservar también una caché en memoria de los datos de entrenamiento para mejorar el rendimiento (Dataset.cache
).
Crear el modelo e instanciar el optimizador
En el contexto de Strategy.scope
, crea y compila el modelo usando la API Keras:
Para este ejemplo ficticio con el conjunto de datos MNIST, usará la tasa de aprendizaje predeterminada del optimizador Adam de 0.001.
Para conjuntos de datos más grandes, el beneficio clave del entrenamiento distribuido es aprender más en cada paso del entrenamiento, porque cada paso procesa más datos de entrenamiento en paralelo, lo que permite una mayor tasa de aprendizaje (dentro de los límites del modelo y del conjunto de datos).
Definir las retrollamadas
Define los siguientes retrollamadas Keras:
tf.keras.callbacks.TensorBoard
: escribe un log para TensorBoard, que te permite visualizar los grafos.tf.keras.callbacks.ModelCheckpoint
: guarda el modelo con cierta frecuencia, por ejemplo, después de cada época.tf.keras.callbacks.BackupAndRestore
: añade la funcionalidad de tolerancia a fallos haciendo una copia de seguridad del modelo y del número de época actual. Para más información, consulta la sección Tolerancia a fallos del tutorial Entrenamiento multitrabajador con Keras.tf.keras.callbacks.LearningRateScheduler
: planifica el cambio del ritmo de aprendizaje después de, por ejemplo, cada época/lote.
Para ilustrarlo, añade una retrollamada personalizada denominada PrintLR
para mostrar la velocidad de aprendizaje en el bloc de notas.
Nota: Usa la retrollamada BackupAndRestore
en lugar de ModelCheckpoint
como mecanismo principal para restaurar el estado del entrenamiento cuando falle un trabajo. Como BackupAndRestore
sólo funciona en eager mode, considera usar ModelCheckpoint
en modo de grafo.
Entrenar y evaluar
Ahora, entrena el modelo del modo habitual llamando a Model.fit
de Keras en el modelo y pasándole el conjunto de datos creado al principio del tutorial. Este paso es el mismo tanto si distribuyes el entrenamiento como si no.
Busca puntos de verificación guardados:
Carga el último punto de verificación y llama a Model.evaluate
con los datos de prueba para ver el rendimiento del modelo:
Para visualizar el resultado, inicia TensorBoard y mira los logs:
Guardar el modelo
Guarda el modelo en un archivo zip .keras
usando Model.save
. Cuando tengas el modelo guardado, puedes cargarlo con o sin el Strategy.scope
.
Ahora carga el modelo sin Strategy.scope
:
Carga el modelo con Strategy.scope
:
Recursos adicionales
Más ejemplos que usan diferentes estrategias de distribución con la API Model.fit
de Keras:
El tutorial Resolver tareas GLUE utilizando BERT en TPU usa
tf.distribute.MirroredStrategy
para entrenar en GPUs ytf.distribute.TPUStrategy
en TPUs.El tutorial Guardar y cargar un modelo mediante una estrategia de distribución muestra cómo usar las API SavedModel con
tf.distribute.Strategy
.Los modelos oficiales de TensorFlow pueden configurarse para ejecutar múltiples estrategias de distribución.
Para saber más sobre las estrategias de distribución de TensorFlow:
El tutorial Entrenamiento personalizado con tf.distribute.Strategy enseña a usar
tf.distribute.MirroredStrategy
para entrenar a un solo trabajador con un bucle de entrenamiento personalizado.El tutorial Entrenamiento multitrabajador con Keras enseña a usar la
MultiWorkerMirroredStrategy
conModel.fit
.El tutorial Bucle de entrenamiento personalizado con Keras y MultiWorkerMirroredStrategy muestra cómo usar la
MultiWorkerMirroredStrategy
con Keras y un bucle de entrenamiento personalizado.La guía Entrenamiento distribuido en TensorFlow da una visión general de las estrategias de distribución disponibles.
La guía Mejor rendimiento con tf.function ofrece información sobre otras estrategias y herramientas, como el Perfilador TensorFlow que puedes usar para optimizar el rendimiento de tus modelos TensorFlow.
Nota: tf.distribute.Strategy
se encuentra activamente en desarrollo y TensorFlow añadirá más ejemplos y tutoriales en un futuro próximo. Anímate a probarlo. Tu retroalimentación es bienvenida, no dudes en enviarla a través de issues en GitHub.