Preparación de un trabajo de entrenamiento para recopilar los datos de salida de TensorBoard
Un trabajo de entrenamiento típico para machine learning en SageMaker consta de dos pasos principales: la preparación de un script de entrenamiento y la configuración de un objeto estimator de SageMaker del SageMaker Python SDK. En esta sección, conocerá los cambios necesarios para recopilar datos compatibles con TensorBoard de los trabajos de entrenamiento de SageMaker.
Requisitos previos
En la siguiente lista se muestran los requisitos previos para empezar a utilizar SageMaker con TensorBoard.
-
Dominio de SageMaker configurado con Amazon VPC en su cuenta de AWS
Para obtener instrucciones sobre cómo configurar un dominio, consulte Incorporación a un dominio de Amazon SageMaker mediante la configuración rápida. También debe agregar perfiles de usuario de dominio para que los usuarios individuales puedan acceder a TensorBoard con SageMaker. Para obtener más información, consulte Adición de perfiles de usuario.
-
La siguiente lista es el conjunto mínimo de permisos para usar TensorBoard en SageMaker.
-
sagemaker:CreateApp
-
sagemaker:DeleteApp
-
sagemaker:DescribeTrainingJob
-
sagemaker:Search
-
s3:GetObject
-
s3:ListBucket
-
Paso 1: modificación del script de entrenamiento con las herramientas auxiliares de TensorBoard de código abierto
Asegúrese de determinar qué escalares y tensores de salida desea recopilar, y modifique las líneas de código del script de entrenamiento con cualquiera de las siguientes herramientas: TensorBoardX, TensorFlow Summary Writer, PyTorch Summary Writer o SageMaker Debugger.
Asegúrese también de especificar la ruta de salida de datos de TensorBoard como el directorio de registro (log_dir
) para la devolución de llamadas en el contenedor de entrenamiento.
Para obtener más información sobre las devoluciones de llamadas por marco, consulte los siguientes recursos.
-
Para PyTorch, use torch.utils.tensorboard.SummaryWriter
. Consulte además las secciones Using TensorBoard in PyTorch y Log scalars en los tutoriales de PyTorch. También puede usar TensorBoardX Summary Writer . LOG_DIR="/opt/ml/output/tensorboard" tensorboard_callback=torch.utils.tensorboard.writer.SummaryWriter(log_dir=LOG_DIR)
-
Para TensorFlow, use la devolución de llamada nativa de TensorBoard, tf.keras.callbacks.TensorBoard
. LOG_DIR="/opt/ml/output/tensorboard" tensorboard_callback=tf.keras.callbacks.TensorBoard( log_dir=LOG_DIR, histogram_freq=1)
-
Para transformadores con PyTorch, puede usar transformers.integrations.TensorBoardCallback
. Para transformadores con TensorFlow, use
tf.keras.tensorboard.callback
y páselo a la devolución de llamada de keras en los transformadores.sugerencia
También puede usar una ruta de salida local de contenedor diferente. Sin embargo, en Paso 2: creación de un objeto de estimador de entrenamiento de SageMaker con la configuración de salida de TensorBoard, debe asignar las rutas correctamente para que SageMaker busque correctamente la ruta local y guarde los datos de TensorBoard en el bucket de salida de S3.
-
Para obtener instrucciones sobre cómo modificar los scripts de entrenamiento mediante la biblioteca de Python del depurador de SageMaker, consulte Adaptación del script de entrenamiento para registrar un enlace.
Paso 2: creación de un objeto de estimador de entrenamiento de SageMaker con la configuración de salida de TensorBoard
Use sagemaker.debugger.TensorBoardOutputConfig
al configurar un estimador del marco de SageMaker. Esta API de configuración asigna el bucket de S3 que especifica para guardar los datos de TensorBoard con la ruta local en el contenedor de entrenamiento (/opt/ml/output/tensorboard
). Transfiere el objeto del módulo al parámetro tensorboard_output_config
de la clase estimator. En el siguiente fragmento de código, se muestra un ejemplo de cómo preparar un estimador de TensorFlow con el parámetro de configuración de salida de TensorBoard.
nota
En este ejemplo, se presupone que utiliza el SageMaker Python SDK. Si utiliza la API de SageMaker de nivel bajo, debe incluir lo siguiente en la sintaxis de solicitud de la API CreateTrainingJob.
"TensorBoardOutputConfig": { "LocalPath": "/opt/ml/output/tensorboard", "S3OutputPath": "
s3_output_bucket
" }
from sagemaker.tensorflow import TensorFlow from sagemaker.debugger import TensorBoardOutputConfig # Set variables for training job information, # such as s3_out_bucket and other unique tags. ... LOG_DIR="/opt/ml/output/tensorboard" output_path = os.path.join( "
s3_output_bucket
", "sagemaker-output
", "date_str
", "your-training_job_name
" ) tensorboard_output_config = TensorBoardOutputConfig( s3_output_path=os.path.join(output_path, 'tensorboard
'), container_local_output_path=LOG_DIR ) estimator = TensorFlow( entry_point="train.py
", source_dir="src
", role=role
, image_uri=image_uri
, instance_count=1
, instance_type="ml.c5.xlarge
", base_job_name="your-training_job_name
", tensorboard_output_config=tensorboard_output_config
, hyperparameters=hyperparameters
)
nota
La aplicación TensorBoard no ofrece compatibilidad inmediata con los trabajos de afinación de hiperparámetros de SageMaker, ya que la API CreateHyperParameterTuningJob
no está integrada con la configuración de salida de TensorBoard para la asignación. Para usar la aplicación TensorBoard para trabajos de afinación de hiperparámetros, debe escribir el código para cargar métricas en Amazon S3 en su script de entrenamiento. Una vez que las métricas se cargan en un bucket de Amazon S3, puede cargar el bucket en la aplicación TensorBoard de SageMaker.