En esta sección, se detalla la canalización de entrenamiento.
Cómo optimizar la canalización de entrada
Resumen: Las causas y las intervenciones de las canalizaciones vinculadas a la entrada dependen en gran medida de la tarea. Usa un generador de perfiles y busca problemas comunes.
Usa un generador de perfiles adecuado, como uno de los siguientes, para diagnosticar las canalizaciones vinculadas a la entrada:
- Perfetto para JAX
- Generador de perfiles de TensorFlow para TensorFlow.
En última instancia, las causas y las intervenciones específicas dependen en gran medida de la tarea. Las consideraciones de ingeniería más amplias (por ejemplo, minimizar el espacio en disco) pueden afectar el rendimiento de la canalización de entrada.
A continuación, se indican las causas comunes de las canalizaciones vinculadas a la entrada:
- Los datos no se ubican junto con el proceso de entrenamiento, lo que provoca latencia de E/S. Por ejemplo, leer datos de entrenamiento a través de una red puede causar latencia de E/S.
- Procesamiento previo de datos en línea costoso Considera realizar el preprocesamiento una vez sin conexión y guardar los resultados.
- Barreras de sincronización no intencionales que interfieren en la recuperación anticipada de la canalización de datos. Por ejemplo, cuando se sincronizan métricas entre el dispositivo y el host en CommonLoopUtils.
Sugerimos las siguientes intervenciones para las canalizaciones vinculadas a la entrada:
- Instrumenta la canalización de entrada para recuperar ejemplos por adelantado (por ejemplo, tf.data.Dataset.prefetch).
- Quita las funciones y los metadatos sin usar de cada uno lo antes posible en la canalización.
- Aumenta la replicación de la cantidad de trabajos que generan ejemplos para la canalización de entrada, por ejemplo, con el servicio tf.data.
Evaluar el rendimiento del modelo
Resumen: Ejecuta la evaluación con tamaños de lotes más grandes que los del entrenamiento. Ejecuta evaluaciones en intervalos de pasos regulares, no en intervalos de tiempo regulares.
Configuración de la evaluación
Puedes usar los siguientes parámetros de configuración para evaluar el rendimiento de tus modelos:
- Evaluación en línea: Recopila métricas cuando el modelo entrega predicciones en un entorno de producción. En general, la evaluación en línea proporciona la evaluación más realista de la calidad del modelo, ya que coincide con la forma en que se usará el modelo.
- Evaluación sin conexión: Recopila métricas cuando el modelo se ejecuta en conjuntos de entrenamiento, validación o prueba sin conexión que son representativos del entorno de producción. Según el problema, la evaluación sin conexión puede ser bastante compleja y costosa en términos de procesamiento.
- Evaluaciones periódicas: Recopila métricas durante el entrenamiento del modelo que podrían ser un proxy para la evaluación sin conexión o en un subconjunto de los datos utilizados en la evaluación sin conexión. Las evaluaciones periódicas son la opción más práctica y económica, pero es posible que no representen por completo el entorno de producción. El objetivo es usar un proxy conveniente de la evaluación sin conexión, sin sacrificar la confiabilidad del indicador recibido durante el entrenamiento.
Cómo configurar evaluaciones periódicas
Recomendamos ejecutar evaluaciones periódicas durante el entrenamiento por los siguientes motivos:
- Supervisar el progreso del entrenamiento en tiempo real
- Facilita la selección retrospectiva de puntos de control del modelo.
- Examinar las curvas de entrenamiento al final del entrenamiento
La configuración más simple es realizar el entrenamiento y las evaluaciones periódicas en la misma instancia de procesamiento, alternando periódicamente entre el entrenamiento y la evaluación. En este caso, el tamaño del lote que se usa para realizar las evaluaciones debe ser al menos tan grande como el tamaño del lote que se usa para el entrenamiento. Esto se debe a que no es necesario mantener las activaciones del modelo durante la evaluación, lo que reduce los requisitos de procesamiento por ejemplo.
Realiza evaluaciones periódicas en intervalos de pasos regulares, no en intervalos de tiempo. La evaluación basada en intervalos de tiempo puede dificultar la interpretación de las curvas de entrenamiento, especialmente cuando el entrenamiento puede verse afectado por interrupciones de los trabajos de entrenamiento, problemas de latencia de red, etcétera.
La periodicidad en las métricas de validación y prueba (cuando se usa una división aleatoria del conjunto de entrenamiento, el conjunto de validación y el conjunto de prueba) puede indicar errores de implementación, como los siguientes:
- Los datos de prueba se superponen con los datos de entrenamiento.
- Los datos de entrenamiento no se mezclan correctamente.
Evaluar en intervalos de pasos regulares puede facilitar la detección de estos problemas.
Los lotes parciales pueden ocurrir cuando los conjuntos de evaluación no son divisibles por el tamaño del lote. Asegúrate de que los ejemplos con padding tengan el peso correcto (como en el promedio ponderado de los ejemplos que calcula la pérdida promedio del lote) para evitar que la función de pérdida se vea sesgada por ellos. A menudo, puedes asignarles un peso de cero a estos ejemplos con padding.
Guarda suficiente información por evaluación para respaldar el análisis sin conexión. Lo ideal es guardar las predicciones en una selección de ejemplos individuales, ya que pueden ser muy valiosas para la depuración. La generación de artefactos, como los SavedModels, simplifica la inspección de modelos ad hoc después de que finalizan los trabajos de evaluación.
Cómo elegir una muestra para la evaluación periódica
Es posible que el trabajo de evaluación periódica no se ejecute lo suficientemente rápido como para calcular las métricas en el conjunto de evaluación sin conexión completo en un período razonable. A menudo, este problema requiere que se muestreen los datos para realizar una evaluación periódica. Cuando construyas un conjunto de datos muestreado, ten en cuenta los problemas relacionados con el tamaño de la muestra y las consideraciones especiales en los conjuntos de datos desequilibrados.
Tamaño de la muestra
Verifica que el rendimiento calculado en el conjunto de datos muestreado que utiliza el trabajo periódico coincida con el rendimiento en todo el conjunto de evaluación sin conexión, es decir, asegúrate de que no haya sesgo entre el conjunto de datos muestreado y el conjunto de datos completo.
El conjunto de datos que uses para la evaluación periódica debe cumplir con los siguientes requisitos:
- Es lo suficientemente pequeño como para generar predicciones del modelo con facilidad en su totalidad.
- Debe ser lo suficientemente grande como para hacer lo siguiente:
- Medir con precisión las mejoras del modelo, es decir, las mediciones no deben verse afectadas por el ruido de las etiquetas
- Admitir varias evaluaciones de este tipo en secuencia a lo largo de las pruebas y, aun así, producir estimaciones precisas Es decir, lo suficientemente grande como para evitar un "ajuste" adaptativo al conjunto de validación con el tiempo de una manera que no se generalice a un conjunto de prueba retenido. Sin embargo, esta consideración rara vez es una preocupación práctica.
Conjuntos de datos desequilibrados
En el caso de los conjuntos de datos desequilibrados, el rendimiento en las clases minoritarias poco frecuentes suele ser ruidoso. En el caso de los conjuntos de datos con solo una pequeña cantidad de ejemplos de minorías, registra la cantidad de ejemplos predichos correctamente para obtener más información sobre las mejoras en la precisión. Por ejemplo, una mejora de la sensibilidad del 0.05 suena interesante, pero ¿la mejora se debió solo a que un ejemplo más fue correcto?
Cómo guardar puntos de control y seleccionar de forma retrospectiva el mejor punto de control
Resumen: Ejecuta el entrenamiento durante una cantidad fija de pasos y elige de forma retrospectiva el mejor punto de control de la ejecución.
La mayoría de los frameworks de aprendizaje profundo admiten el registro de puntos de control del modelo. Es decir, el estado actual del modelo se guarda periódicamente en el disco. El checkpointing permite que el trabajo de entrenamiento sea resistente a las interrupciones de la instancia de procesamiento. El mejor punto de control no suele ser el último, en especial cuando el rendimiento del conjunto de validación no sigue aumentando con el tiempo, sino que fluctúa en torno a un valor determinado.
Configura la canalización para hacer un seguimiento de los N mejores puntos de control observados hasta el momento durante el entrenamiento. Al final del entrenamiento, la selección del modelo simplemente significa elegir el mejor punto de control. A este enfoque lo llamamos selección retrospectiva del punto de control óptimo. Por lo general, no es necesario admitir la detención anticipada prospectiva, ya que especificas previamente un presupuesto de prueba y conservas los N mejores puntos de control observados hasta el momento.
Cómo configurar el seguimiento de experimentos
Resumen: Cuando realices un seguimiento de diferentes experimentos, haz un seguimiento de varios elementos esenciales, como el mejor rendimiento de un punto de control en el estudio y una breve descripción del estudio.
Te recomendamos que hagas un seguimiento de los resultados del experimento en una hoja de cálculo. Nuestras hojas de cálculo suelen contener las siguientes columnas:
- Nombre del estudio
- Es un vínculo a la ubicación en la que se almacena la configuración del estudio.
- Notas o una breve descripción del estudio.
- Cantidad de pruebas ejecutadas
- Es el rendimiento en el conjunto de validación del mejor punto de control del estudio.
- Comandos de reproducción específicos o notas sobre los cambios necesarios para iniciar el entrenamiento que no se enviaron.
Busca un sistema de seguimiento conveniente que capture, al menos, la información mencionada anteriormente. Los experimentos sin seguimiento son como si no existieran.
Detalles de la implementación de la normalización por lotes
Resumen: Hoy en día, a menudo puedes reemplazar la normalización por lotes por LayerNorm, pero, en los casos en los que no puedes hacer ese reemplazo, hay detalles complejos cuando cambias el tamaño del lote o la cantidad de hosts.
La normalización por lotes normaliza las activaciones usando su media y varianza en el lote actual. Sin embargo, en la configuración de varios dispositivos, estas estadísticas difieren en cada dispositivo, a menos que se sincronicen de forma explícita. Los informes anecdóticos (principalmente en ImageNet) indican que calcular estas estadísticas de normalización con solo alrededor de 64 ejemplos funciona mejor en la práctica. (Consulta la descripción de la normalización por lotes fantasma en Train longer, generalize better: closing the generalization gap in large batch training of neural networks). Desvincular el tamaño total del lote y la cantidad de ejemplos utilizados para calcular las estadísticas de la normalización por lotes es especialmente útil para las comparaciones del tamaño del lote.
Las implementaciones de la normalización por lotes fantasma no siempre controlan correctamente el caso en el que el tamaño del lote por dispositivo es mayor que el tamaño del lote virtual. En este caso, deberás realizar un muestreo secundario del lote en cada dispositivo para obtener la cantidad adecuada de ejemplos de estadísticas de normalización por lotes.
Los promedios móviles exponenciales (EMA) que se usan en la normalización por lotes del modo de prueba son solo una combinación lineal de las estadísticas de entrenamiento. Por lo tanto, solo necesitas sincronizar estos EMA antes de guardarlos en los puntos de control. Sin embargo, algunas implementaciones comunes de la normalización por lotes no sincronizan estos EMA y solo guardan el EMA del primer dispositivo.
Consideraciones para las canalizaciones de varios hosts
Resumen: Para el registro, las evaluaciones, los RNG, el almacenamiento de puntos de control y la fragmentación de datos, el entrenamiento en varios hosts puede facilitar la introducción de errores.
Realiza las siguientes acciones para las canalizaciones de varios hosts:
- Asegúrate de que la canalización solo registre y cree puntos de control en un host.
- Sincroniza las estadísticas de la normalización por lotes en todos los hosts antes de evaluar o crear puntos de control.
- Fragmenta los archivos de datos en varios hosts, ya que esto suele mejorar el rendimiento.
Crítico: Asegúrate de tener semillas de RNG que sean iguales en todos los hosts (para la inicialización del modelo) y semillas que sean diferentes en todos los hosts (para la redistribución o el preprocesamiento de datos). Por lo tanto, asegúrate de marcarlos de forma adecuada.