Path: blob/master/site/es-419/guide/migrate/migration_debugging.ipynb
25118 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.OneDeviceStrategy
primeromé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:
constant
que usa la misma semilla para cada operación sin importar cuántas veces haya sido llamada y,num_random_ops
que 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.print
puede 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
print
comotf.print
imprimen el valor del tensor. Peroprint
puede 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.print
para imprimir el valor real del tensor.tf.print
se compila en una op en el grafo, mientras queprint
ylogging.info
sólo hacen registros en el tiempo de seguimiento, que a menudo no es lo que usted desea.tf.print
también permite imprimir tensores compuestos comotf.RaggedTensor
ytf.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.function
que contienetf.print
se ejecuta en los trabajadores, por ejemplo al usarTPUStrategy
oParameterServerStrategy
, tiene que comprobar los registros del servidor de trabajadores/parámetros para encontrar los valores impresos.Para
print
ologging.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.print
las entradas.Incluya las salidas intermedias que desee inspeccionar en las salidas del modelo.
tf.keras.layers.Lambda
las 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.print
salidas intermedias en una retrollamadatf.keras.callbacks.LambdaCallback
si 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.