Path: blob/master/site/es-419/guide/migrate/migration_debugging.ipynb
38326 views
Copyright 2021 The TensorFlow Authors.
Depurar una canalización de entrenamiento migrada de TensorFlow 2
Este bloc de notas muestra cómo depurar una canalización de entrenamiento al migrar a TensorFlow 2 (TF2). Consta de los siguientes componentes:
Pasos sugeridos y muestras de código para depurar la canalización del entrenamiento
Herramientas para la depuración
Otros recursos relacionados
Una premisa es que usted tiene el código en TensorFlow 1 (TF1.x) y los modelos entrenados para su comparación, y desea construir un modelo TF2 que alcance una precisión de validación similar.
Este bloc de notas NO cubre la depuración de problemas de rendimiento para la velocidad de entrenamiento/inferencia o el uso de memoria.
Depuración del flujo de trabajo
Más abajo encontrará un flujo de trabajo general para depurar sus canalizaciones de entrenamiento en TF2. Tenga en cuenta que no es necesario que siga estos pasos en orden. También puede usar un enfoque de búsqueda binaria en el que pruebe el modelo en un paso intermedio y reduzca el alcance de la depuración.
Corregir errores de compilación y runtime
Validación de una sola pasada hacia delante (en una guía por separado)
a. En un dispositivo con una sola CPU
Verificar que las variables se crean una sola vez
Compruebe que los recuentos, nombres y formas de las variables coinciden
Restablecer todas las variables, comprobar la equivalencia numérica con toda la aleatoriedad desactivada
Alinear la generación de números aleatorios, comprobar la equivalencia numérica en la inferencia
(Opcional) Los puntos de verificación se cargan correctamente y los modelos TF1.x/TF2 generan una salida idéntica
b. En un único dispositivo GPU/TPU
c. Con estrategias multidispositivo
Modelar el entrenamiento de validación de equivalencia numérica para unos pocos pasos (ejemplos de código disponibles a continuación)
a. Validación de un solo paso de entrenamiento usando datos pequeños y fijos en un solo dispositivo con CPU. Específicamente, compruebe la equivalencia numérica para los siguientes componentes
computación de pérdidas
métricas
tasa de aprendizaje
cálculo y actualización del gradiente
b. Compruebe las estadísticas después del entrenamiento de 3 o más pasos para verificar los comportamientos del optimizador como el impulso, aún con datos fijos en un solo dispositivo de CPU.
c. En un único dispositivo GPU/TPU
d. Con estrategias multidispositivo (consulte la introducción de MultiProcessRunner en la parte inferior)
Pruebas de convergencia de principio a fin en un conjunto de datos reales
a. Comprobar los comportamientos de entrenamiento con TensorBoard
use optimizadores sencillos, por ejemplo SGD, y estrategias de distribución sencillas, por ejemplo
tf.distribute.OneDeviceStrategyprimerométricas de entrenamiento
métricas de evaluación
averiguar cuál es la tolerancia razonable para la aleatoriedad inherente
b. Comprobar la equivalencia con optimizador avanzado/programador de tasa de aprendizaje/estrategias de distribución
c. Comprobar la equivalencia al usar precisión mixta
Puntos de referencia adicionales del producto
Preparación
Validación de una sola pasada hacia delante
La validación de una sola pasada, incluida la carga de puntos de verificación, se trata en otro colab.
Validación de la equivalencia numérica del entrenamiento del modelo por unos pocos pasos
Ajuste la configuración del modelo y prepare un conjunto de datos falso.
Defina el modelo TF1.x.
La siguiente clase v1.keras.utils.DeterministicRandomTestTool ofrece un administrador de contexto scope() que puede hacer que las operaciones aleatorias con estado usen la misma semilla en ambos grafos/sesiones TF1 y ejecución eager,
La herramienta ofrece dos modos de prueba:
constantque usa la misma semilla para cada operación sin importar cuántas veces haya sido llamada y,num_random_opsque usa el número de operaciones aleatorias con estado observadas previamente como semilla de operación.
Esto se aplica tanto a las operaciones aleatorias con estado usadas para crear e inicializar variables, como a las operaciones aleatorias con estado usadas en el cálculo (como para las capas abandonadas).
Ejecute el modelo TF1.x en modo grafo. Recopile las estadísticas de los 3 primeros pasos de entrenamiento para comparar la equivalencia numérica.
Defina el modelo TF2.
Ejecute el modelo TF2 en modo eager. Recopile las estadísticas de los 3 primeros pasos de entrenamiento para comparar la equivalencia numérica.
Compare la equivalencia numérica de los primeros pasos del entrenamiento.
También puede consultar el bloc de notas Validación de la corrección y equivalencia numérica si desea consejos adicionales para la equivalencia numérica.
Pruebas de unidad
Existen algunos tipos de pruebas de unidad que pueden ayudar a depurar su código de migración.
Validación de una sola pasada hacia delante
Validación de la equivalencia numérica del entrenamiento del modelo por unos pocos pasos
Comparar los resultados del rendimiento de inferencia
El modelo entrenado realiza predicciones correctas sobre puntos de datos fijos y simples
Puede usar @parameterized.parameters para probar modelos con diferentes configuraciones. Detalles con muestra de código.
Tenga en cuenta que es posible ejecutar APIs de sesión y ejecución eager en el mismo caso de prueba. Los fragmentos de código a continuación muestran cómo.
Herramientas de depuración
tf.print
tf.print vs print/logging.info
Con argumentos configurables,
tf.printpuede mostrar recursivamente los primeros y últimos elementos de cada dimensión para los tensores impresos. Consulte la documentación de la API para más detalles.Para la ejecución eager, tanto
printcomotf.printimprimen el valor del tensor. Peroprintpuede suponer una copia de dispositivo a host, lo que potencialmente puede ralentizar su código.Para el modo gráfico, incluyendo el uso dentro de
tf.function, necesita usartf.printpara imprimir el valor real del tensor.tf.printse compila en una op en el grafo, mientras queprintylogging.infosólo hacen registros en el tiempo de seguimiento, que a menudo no es lo que usted desea.tf.printtambién permite imprimir tensores compuestos comotf.RaggedTensorytf.sparse.SparseTensor.También puede usar una retrollamada para monitorear métricas y variables. Consulte cómo usar retrollamadas personalizadas con diccionarios de registros y atributo self.model.
tf.print vs print dentro de tf.function
tf.distribute.Strategy
Si el
tf.functionque contienetf.printse ejecuta en los trabajadores, por ejemplo al usarTPUStrategyoParameterServerStrategy, tiene que comprobar los registros del servidor de trabajadores/parámetros para encontrar los valores impresos.Para
printologging.info, los registros se imprimirán en el coordinador cuando se useParameterServerStrategy, y los registros se imprimirán en STDOUT en worker0 cuando se usen TPUs.
tf.keras.Model
Al usar modelos API secuenciales y funcionales, si desea imprimir valores, por ejemplo, entradas del modelo o características intermedias después de algunas capas, tiene las siguientes opciones.
Escriba una capa personalizada que imprima por
tf.printlas entradas.Incluya las salidas intermedias que desee inspeccionar en las salidas del modelo.
tf.keras.layers.Lambdalas capas tienen limitaciones de (de)serialización. Para evitar problemas de carga de puntos de verificación, escriba en su lugar una capa personalizada de subclases. Consulte la documentación de API para más detalles.No puede imprimir por
tf.printsalidas intermedias en una retrollamadatf.keras.callbacks.LambdaCallbacksi no tiene acceso a los valores reales, sino sólo a los objetos tensores simbólicos de Keras.
Opción 1: escriba una capa personalizada
Opción 2: incluya las salidas intermedias que desee inspeccionar en las salidas del modelo.
Tenga en cuenta que, en tal caso, puede necesitar algunas personalizaciones para usar Model.fit.
pdb
Puede usar pdb tanto en el terminal como en Colab para inspeccionar los valores intermedios para depuración.
Visualizar grafo con TensorBoard
Puede examinar el grafo TensorFlow con TensorBoard. TensorBoard también está soportado en colab. TensorBoard es una gran herramienta para visualizar sumarios. Puede usarlo para comparar el ritmo de aprendizaje, las ponderaciones del modelo, la escala de gradiente, las métricas de entrenamiento/validación o incluso las salidas intermedias del modelo entre el modelo TF1.x y el modelo TF2 migrado a través del proceso de entrenamiento y ver si los valores son los esperados.
TensorFlow Profiler
TensorFlow Profiler puede ayudarle a visualizar la línea de tiempo de ejecución en GPUs/TPUs. Puede consultar esta Demo de Colab para ver su uso básico.
MultiProcessRunner
MultiProcessRunner es una herramienta útil a la hora de depurar con MultiWorkerMirroredStrategy y ParameterServerStrategy. Puede echar un vistazo a este ejemplo concreto para ver su uso.
Específicamente para los casos de estas dos estrategias, se recomienda 1) no sólo tener pruebas de unidad para cubrir su flujo, 2) sino también intentar reproducir fallos usándolo en pruebas de unidad para evitar lanzar un trabajo real distribuido cada vez que se intente una reparación.
Ver en TensorFlow.org
Ejecutar en Google Colab
Ver código fuente en GitHub
Descargar bloc de notas