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.
-
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) -
Encapsule el optimizador según el método
hook.wrap_optimizer().optimizer=tf.keras.optimizers.Adam(...) optimizer=hook.wrap_optimizer(optimizer) -
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 ) -
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 clasemodel.fit()Keras. De este modo, el enlacesagemaker-debuggerse 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] ) -
TensorFlow 2.x solo proporciona variables de gradiente simbólicas que no proporcionan acceso a sus valores. Para recopilar gradientes, encapsule
tf.GradientTapecon el métodohook.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-debuggerpuede identificar los tensores de salida, como los gradientes, los parámetros y las pérdidas. Al encapsular la cinta, se garantiza que el métodohook.wrap_tape()en torno a las funciones del objeto de la cinta, comopush_tape(),pop_tape()ygradient(), configurará los grabadores del depurador de SageMaker y guardará los tensores que se proporcionan como entrada agradient()(variables y pérdidas que pueden entrenarse) y salida degradient()(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 enlacesagemaker-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.