Adaptación del script de entrenamiento de TensorFlow - Amazon SageMaker AI

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Adaptación del script de entrenamiento de TensorFlow

Para empezar a recopilar los tensores de salida del modelo y depurar los problemas de entrenamiento, realice las siguientes modificaciones en su script de entrenamiento de TensorFlow.

Cree un enlace para trabajos de entrenamiento en SageMaker AI

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True)

Esto crea un enlace al iniciar un trabajo de entrenamiento de SageMaker. Al lanzar un trabajo de entrenamiento Inicio de trabajos de entrenamiento con el depurador mediante SageMaker Python SDK con cualquiera de los DebuggerHookConfigTensorBoardConfig o Rules de su estimador, SageMaker AI añade un archivo de configuración JSON a la instancia de entrenamiento que es recogido por el método smd.get_hook. Tenga en cuenta que si no incluye ninguna de las API de configuración en su estimador, el enlace no podrá encontrar ningún archivo de configuración y la función devolverá None.

(Opcional) Cree un enlace para trabajos de entrenamiento ajenos a SageMaker AI

Si ejecuta trabajos de entrenamiento en modo local, directamente en instancias de SageMaker Notebook, instancias de Amazon EC2 o sus propios dispositivos locales, utilice la clase smd.Hook para crear un enlace. Sin embargo, este enfoque solo puede almacenar las colecciones de tensores y puede usarse para visualizar TensorBoard. Las reglas integradas del depurador de SageMaker no funcionan con el modo local. En este caso, el método smd.get_hook también devuelve None.

Si quiere crear un enlace manual, utilice el siguiente fragmento de código con la lógica para comprobar si el enlace devuelve None y cree un enlace manual con la clase smd.Hook.

import smdebug.tensorflow as smd hook=smd.get_hook(hook_type="keras", create_if_not_exists=True) if hook is None: hook=smd.KerasHook( out_dir='/path/to/your/local/output/', export_tensorboard=True )

Después de añadir el código de creación del enlace, siga con el siguiente tema para TensorFlow Keras.

nota

Actualmente, el depurador de SageMaker solo es compatible con TensorFlow Keras.

Registre el enlace en su script de entrenamiento de TensorFlow Keras

El siguiente procedimiento le explica cómo usar el enlace y sus métodos para recopilar escalares y tensores de salida de su modelo y optimizador.

  1. Incluya el modelo y el optimizador de Keras con los métodos de clase del enlace.

    El método hook.register_model() toma el modelo e itera por cada capa, buscando tensores que coincidan con las expresiones regulares que proporcionarás a lo largo de la configuración en Inicio de trabajos de entrenamiento con el depurador mediante SageMaker Python SDK. Los tensores que se pueden recopilar mediante este método de enlace son las ponderaciones, los sesgos y las activaciones.

    model=tf.keras.Model(...) hook.register_model(model)
  2. Encapsule el optimizador según el método hook.wrap_optimizer().

    optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer)
  3. Compile el modelo en modo Eager en TensorFlow.

    Para recopilar los tensores del modelo, como los tensores de entrada y salida de cada capa, debe ejecutar el entrenamiento en modo Eager. De lo contrario, el depurador de SageMaker AI no podrá recopilar los tensores. Sin embargo, es posible recopilar otros tensores, como las ponderaciones del modelo, los sesgos y la pérdida, sin ejecutarlos explícitamente en modo Eager.

    model.compile( loss="categorical_crossentropy", optimizer=optimizer, metrics=["accuracy"], # Required for collecting tensors of each layer run_eagerly=True )
  4. Registre el enlace al método tf.keras.Model.fit().

    Para recopilar los tensores de los enlaces que haya registrado, agregue callbacks=[hook] al método de la clase model.fit() Keras. De este modo, el enlace sagemaker-debugger se transferirá como retrollamada de Keras.

    model.fit( X_train, Y_train, batch_size=batch_size, epochs=epoch, validation_data=(X_valid, Y_valid), shuffle=True, callbacks=[hook] )
  5. TensorFlow 2.x solo proporciona variables de gradiente simbólicas que no proporcionan acceso a sus valores. Para recopilar gradientes, encapsule tf.GradientTape con el método hook.wrap_tape(), que requiere que escriba su propio paso de entrenamiento de la siguiente manera.

    def training_step(model, dataset): with hook.wrap_tape(tf.GradientTape()) as tape: pred=model(data) loss_value=loss_fn(labels, pred) grads=tape.gradient(loss_value, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables))

    Al encapsular la cinta, el enlace sagemaker-debugger puede identificar los tensores de salida, como los gradientes, los parámetros y las pérdidas. Al encapsular la cinta, se garantiza que el método hook.wrap_tape() en torno a las funciones del objeto de la cinta, como push_tape(), pop_tape() y gradient(), configurará los grabadores del depurador de SageMaker y guardará los tensores que se proporcionan como entrada a gradient() (variables y pérdidas que pueden entrenarse) y salida de gradient() (gradientes).

    nota

    Para recopilar información con un ciclo de entrenamiento personalizado, asegúrese de usar el modo Eager. De lo contrario, el depurador de SageMaker no podrá recopilar ningún tensor.

Para obtener una lista completa de las acciones que ofrecen las API del enlace sagemaker-debugger para construir enlaces y guardar tensores, consulte Métodos de enlace en la sagemaker-debuggerdocumentación del Python SDK.

Cuando haya terminado de adaptar su script de entrenamiento, continúe con Inicio de trabajos de entrenamiento con el depurador mediante SageMaker Python SDK.