Adapta tu guion de entrenamiento TensorFlow - Amazon SageMaker

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.

Adapta tu guion de entrenamiento TensorFlow

Para empezar a recopilar los tensores de salida del modelo y solucionar los problemas de entrenamiento, realiza las siguientes modificaciones en tu guion de TensorFlow entrenamiento.

Crea un enlace para los trabajos de entrenamiento dentro de SageMaker

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

Esto crea un gancho cuando empiezas un trabajo SageMaker de formación. Al iniciar un trabajo de formación Lanza trabajos de formación con Debugger usando Python SageMaker SDK con cualquiera de los DebuggerHookConfigTensorBoardConfig, o Rules en el estimador, se SageMaker añade un archivo de JSON configuración a la instancia de formación que el smd.get_hook método recoge. Tenga en cuenta que si no incluye ninguna de las configuraciones APIs en su estimador, el enlace no podrá encontrar ningún archivo de configuración y la función volverá a aparecer. None

(Opcional) Crea un gancho para entrenar trabajos externos SageMaker

Si ejecutas tareas de entrenamiento en modo local, directamente en instancias de SageMaker Notebook, EC2 instancias de Amazon o tus propios dispositivos locales, usa smd.Hook class para crear un enlace. Sin embargo, este enfoque solo puede almacenar las colecciones de tensores y utilizarlas para la TensorBoard visualización. SageMaker Las reglas integradas del depurador 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 )

Tras añadir el código de creación del gancho, continúa con el siguiente tema para TensorFlow Keras.

nota

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

Registra el gancho en tu guion 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 Lanza trabajos de formación con Debugger usando Python SageMaker 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. Compila el modelo en modo ansioso 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, SageMaker Debugger no podrá recolectar 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 proporciona solo 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 agrupar la cinta, se garantiza que el hook.wrap_tape() método se ajuste a las funciones del objeto de la cinta push_tape()pop_tape(), por ejemplogradient(),, configurará los grabadores de SageMaker Debugger y guardará los tensores que se proporcionan como entrada gradient() (variables entrenables y pérdida) y salida (gradientes). gradient()

    nota

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

Para obtener una lista completa de las acciones que APIs ofrece el sagemaker-debugger gancho para construir ganchos y guardar tensores, consulta Métodos de gancho en la SDKdocumentación de sagemaker-debugger Python.

Cuando haya terminado de adaptar su script de entrenamiento, continúe con Lanza trabajos de formación con Debugger usando Python SageMaker SDK.