En esta sección, se detalla la canalización de entrenamiento.
Optimización de 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 entradas:
- Perfetto para JAX
- Generador de perfiles de TensorFlow para TensorFlow.
En última instancia, las intervenciones y las causas específicas dependen en gran medida de la tarea. Las consideraciones de ingeniería más amplias (por ejemplo, minimizar la huella de disco) pueden afectar el rendimiento de la canalización de entrada.
Las siguientes son causas comunes de las canalizaciones vinculadas a entradas:
- Los datos no se ubican con el proceso de entrenamiento, lo que causa latencia de E/S. Por ejemplo, la lectura de datos de entrenamiento en una red puede causar latencia de E/S.
- Es costoso el procesamiento previo de datos en línea. Considera procesar previamente una vez sin conexión y guardar los resultados.
- Barreras de sincronización involuntarias que interfieren en la carga previa 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:
- Canalización de entrada de instrumento para cargar previamente ejemplos (por ejemplo, tf.data.Dataset.prefetch).
- Quita los atributos y metadatos que no se usen 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, mediante el servicio tf.data.
Evaluar el rendimiento del modelo
Resumen: Ejecutar la evaluación en tamaños de lotes más grandes que en el entrenamiento. Ejecuta evaluaciones en intervalos de pasos regulares, no intervalos regulares.
Configuración de la evaluación
Puedes usar la siguiente configuración para evaluar el rendimiento de tus modelos:
- Evaluación en línea: Recopila métricas cuando el modelo entregue predicciones en un entorno de producción. Por lo general, la evaluación en línea proporciona la evaluación más realista de la calidad del modelo porque coincide con la forma en que se usará el modelo.
- Evaluación sin conexión: Recopila métricas cuando el modelo se ejecute en conjuntos de entrenamiento, validación o prueba sin conexión que representen el 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 de modelos que podrían ser un proxy para la evaluación sin conexión o en un subconjunto de los datos que se usan 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. Intenta usar un proxy oportuno de la evaluación sin conexión, sin sacrificar la confiabilidad del indicador recibido durante el entrenamiento.
Configurar evaluaciones periódicas
Recomendamos ejecutar evaluaciones periódicas durante el entrenamiento por los siguientes motivos:
- Supervisar el progreso del entrenamiento en tiempo real
- Facilitar la selección de modelos retrospectivos de puntos de control
- Para examinar las curvas de entrenamiento al final del entrenamiento,
La configuración más simple es realizar evaluaciones de entrenamiento y evaluaciones periódicas dentro de la misma instancia de procesamiento, alternando de manera periódica entre el entrenamiento y la evaluación. En este caso, el tamaño del lote que se usa a fin de 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 necesitas mantener las activaciones del modelo durante la evaluación, lo que disminuye los requisitos de procesamiento por ejemplo.
Realiza evaluaciones periódicas en intervalos de pasos regulares, no intervalos. Evaluar en función de los intervalos de tiempo puede dificultar la interpretación de las curvas de entrenamiento, en especial, cuando el entrenamiento puede verse afectado por interrupciones de los trabajos de entrenamiento, problemas de latencia de la red, etcétera.
La regularidad en las métricas de validación y prueba (cuando se usa un conjunto de entrenamiento aleatorio, un conjunto de validación y una división del 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 de forma adecuada.
Evaluar a 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 rellenos estén ponderados de forma correcta (como en el promedio ponderado sobre los ejemplos que calculan la pérdida promedio en el lote) para evitar que la función de pérdida se pueda personalizar. A menudo, puedes darle a estos ejemplos con relleno un peso de cero.
Guarda suficiente información por evaluación para realizar análisis sin conexión. Lo ideal es que guardes predicciones sobre una selección de ejemplos individuales, ya que pueden ser invaluables para la depuración. Generar artefactos como modelos guardados simplifica la inspección ad hoc del modelo después de que finalizan los trabajos de evaluación.
Elige una muestra para una evaluación periódica
Es posible que el trabajo de evaluación periódica no se ejecute lo suficientemente rápido para calcular las métricas en el conjunto completo de evaluación sin conexión en un tiempo razonable. Este problema a menudo requiere muestras de datos para una evaluación periódica. Cuando construyas un conjunto de datos de muestra, considera los problemas con el tamaño de la muestra y las inquietudes especiales de los conjuntos de datos desequilibrados.
Tamaño de la muestra
Verifica que el rendimiento calculado en el conjunto de datos de muestra que usa 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 de muestra y el conjunto de datos completo.
El conjunto de datos que uses para la evaluación periódica debe ser el siguiente:
- Lo suficientemente pequeño para generar predicciones de modelos con facilidad en su totalidad.
- Es lo suficientemente grande como para hacer lo siguiente:
- Mide con precisión las mejoras del modelo, es decir, las mediciones no deben verse abrumadas por el ruido de la etiqueta.
- Acomodar varias de estas evaluaciones en las pruebas en secuencia y, aun así, producir estimaciones precisas. Es decir, es lo suficientemente grande para evitar “adaptarse” de forma adaptable al conjunto de validación de una manera que no generalice a un conjunto de pruebas 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 de las clases minoritarias inusuales suele ser ruidoso. Para los conjuntos de datos con solo una pequeña cantidad de ejemplos de minorías, registra la cantidad de ejemplos que se predijeron de manera correcta para obtener más estadísticas sobre las mejoras en la exactitud. Por ejemplo, la mejora en la sensibilidad de 0.05 suena emocionante, pero ¿la mejora solo se debía a que un ejemplo más era correcto?
Guardando puntos de control y seleccionando retrospectivamente 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 punto de control del modelo. Es decir, el estado actual del modelo se guarda periódicamente en el disco. El punto de control permite que el trabajo de entrenamiento sea resistente a las interrupciones de la instancia de procesamiento. Por lo general, el mejor punto de control no es el último, en especial cuando el rendimiento del conjunto de validación no aumenta a lo largo del tiempo, sino que fluctúa sobre un valor particular.
Configura la canalización para realizar un seguimiento de los N puntos de control más vistos hasta el momento durante el entrenamiento. Al final del entrenamiento, la selección de modelos significa elegir el mejor punto de control. Este enfoque se denomina selección de puntos de control óptimos y retrospectivos. Por lo general, no es necesario admitir la interrupción anticipada potencial, ya que se especifica de forma previa un presupuesto de prueba y se conservan los N puntos de control más vistos hasta el momento.
Cómo configurar el seguimiento de experimentos
Resumen: Cuando realices un seguimiento de diferentes experimentos, realiza un seguimiento de una serie de elementos esenciales, como el mejor rendimiento de un punto de control en el estudio y una descripción breve del estudio.
Le recomendamos que realice 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
- Un vínculo al lugar donde se almacena la configuración para el estudio
- Notas o una descripción breve del estudio.
- Cantidad de pruebas realizadas
- Es el rendimiento en el conjunto de validación del mejor punto de control del estudio.
- Notas o comandos de reproducción específicos sobre los cambios no enviados que se necesitaron para iniciar el entrenamiento.
Busca un sistema de seguimiento que capture, al menos, la información que se menciona más arriba. También es posible que los experimentos sin seguimiento no existan.
Detalles de implementación de normalización por lotes
Resumen: En la actualidad, a menudo se puede reemplazar la normalización por lotes por LayerNorm, pero en los casos en que no se puede realizar ese reemplazo, hay detalles complicados cuando se cambia el tamaño del lote o la cantidad de hosts.
La normalización por lotes normaliza las activaciones con su media y varianza sobre el lote actual. Sin embargo, en la configuración de múltiples dispositivos, estas estadísticas difieren en cada dispositivo, a menos que se sincronicen de manera explícita. Los informes anecdóticos (sobre todo en ImageNet) indican que calcular estas estadísticas de normalización solo con alrededor de 64 ejemplos funciona mejor en la práctica. (Consulta la descripción de la normalización por lotes de Ghost en Entrena más, generaliza mejor: cierra la brecha de generalización en el entrenamiento por lotes grande de redes neuronales). Separar el tamaño total del lote y la cantidad de ejemplos usados a fin de calcular las estadísticas de la norma del lote es particularmente útil para las comparaciones del tamaño del lote.
Las implementaciones de normalización por lotes fantasma no siempre manejan 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, tendrías que realizar una submuestra con el lote en cada dispositivo para obtener la cantidad adecuada de ejemplos estadísticos 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 estas EMA antes de guardarlas en los puntos de control. Sin embargo, algunas implementaciones comunes de normalización por lotes no sincronizan estas EMA y solo guardan la EMA desde el primer dispositivo.
Consideraciones para las canalizaciones de varios hosts
Resumen: Para el registro, las evaluaciones, los RNG, el control y la fragmentación de datos, el entrenamiento de varios hosts puede facilitar el ingreso de errores.
Haga lo siguiente para las canalizaciones de varios hosts:
- Asegúrate de que la canalización solo registre y controle en un host.
- Sincronizar las estadísticas de normalización por lotes entre los hosts antes de evaluar o establecer un punto de control
- Fragmenta archivos de datos entre hosts, ya que esto suele mejorar el rendimiento.
Crítico: Asegúrate de tener valores iniciales de RNG que sean iguales en todos los hosts (para la inicialización del modelo) y valores iniciales diferentes en los hosts (para la redistribución y el procesamiento previo de los datos). Por lo tanto, asegúrate de marcarlos de forma adecuada.