Adaptar su script de entrenamiento de PyTorch - 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.

Adaptar su script de entrenamiento de PyTorch

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 PyTorch.

nota

El depurador de SageMaker no puede recopilar tensores de salida de modelos a partir de las operaciones de la API torch.nn.functional. Al escribir un script de entrenamiento de PyTorch, se recomienda utilizar los módulos torch.nn en su lugar.

Para PyTorch 1.12.0

Si trae un script de entrenamiento de PyTorch, puede ejecutar el trabajo de entrenamiento y extraer los tensores de salida del modelo con algunas líneas de código adicionales en su script de entrenamiento. Debe usar las API de enlace de la biblioteca cliente sagemaker-debugger. Siga las siguientes instrucciones que desglosan los pasos con ejemplos de código.

  1. Creación de un enlace.

    (Recomendado) Para trabajos de entrenamiento en SageMaker AI

    import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True)

    Al lanzar un trabajo de entrenamiento en Inicio de trabajos de entrenamiento con el depurador mediante SageMaker Python SDK con cualquiera de los DebuggerHookConfig, TensorBoardConfig o Rules de su estimador, SageMaker AI añade un archivo de configuración JSON a su instancia de entrenamiento que recogido por la función 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) 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 porque las reglas requieren que las instancias de entrenamiento de SageMaker AI ML y S3 almacenen los resultados de las instancias remotas en tiempo real. En este caso, la API smd.get_hook devolverá None.

    Si quiere crear un enlace manual para guardar los tensores en modo local, use el siguiente fragmento de código con la lógica para comprobar si la API smd.get_hook devuelve None y cree un enlace manual con la clase smd.Hook. Tenga en cuenta que puede especificar cualquier directorio de salida en su máquina local.

    import smdebug.pytorch as smd hook=smd.get_hook(create_if_not_exists=True) if hook is None: hook=smd.Hook( out_dir='/path/to/your/local/output/', export_tensorboard=True )
  2. Encapsule su modelo con los métodos de clase del enlace.

    El método hook.register_module() toma el modelo y recorre cada capa en iteración, 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 pueden recopilarse mediante este método de enlace son ponderaciones, sesgos, activaciones, gradientes, entradas y salidas.

    hook.register_module(model)
    sugerencia

    Si recopila todos los tensores de salida de un modelo de aprendizaje profundo de gran tamaño, el tamaño total de esas colecciones puede crecer exponencialmente y provocar cuellos de botella. Si desea guardar tensores específicos, también puede utilizar el método hook.save_tensor(). Este método le ayudará a elegir la variable para el tensor específico y guardarla en una colección personalizada con el nombre que quiera. Para obtener más información sobre este paso, consulte el paso 7.

  3. Encapsule la función de pérdida con los métodos de clase del enlace.

    El método hook.register_loss consiste en ajustar la función de pérdida. Extrae todos los valores de pérdida cada save_interval que haya establecido durante la configuración Inicio de trabajos de entrenamiento con el depurador mediante SageMaker Python SDK, y los guarda en la colección "losses".

    hook.register_loss(loss_function)
  4. Añada hook.set_mode(ModeKeys.TRAIN) al bloque de trenes. Esto indica que la colección de tensores se extrae durante la fase de entrenamiento.

    def train(): ... hook.set_mode(ModeKeys.TRAIN)
  5. Añada hook.set_mode(ModeKeys.EVAL) al bloque de validación. Esto indica que la colección de tensores se extrae durante la fase de validación.

    def validation(): ... hook.set_mode(ModeKeys.EVAL)
  6. Utilice hook.save_scalar() para guardar escalares personalizados. Puede guardar valores escalares que no estén en el modelo. Por ejemplo, si desea registrar los valores de precisión calculados durante la evaluación, añada la siguiente línea de código debajo de la línea en la que calcula la precisión.

    hook.save_scalar("accuracy", accuracy)

    Tenga en cuenta que debe proporcionar una cadena como primer argumento para nombrar la colección escalar personalizada. Este es el nombre que se usará para visualizar los valores escalares en TensorBoard y puede ser cualquier cadena que quiera.

  7. Utilice hook.save_tensor() para guardar tensores personalizados. Del mismo modo que hook.save_scalar(), puede guardar tensores adicionales y definir su propia colección de tensores. Por ejemplo, puede extraer los datos de imagen de entrada que se pasan al modelo y guardarlos como un tensor personalizado añadiendo la siguiente línea de código, donde "images" es un nombre de ejemplo del tensor personalizado, image_inputs es una variable de ejemplo para los datos de la imagen de entrada.

    hook.save_tensor("images", image_inputs)

    Tenga en cuenta que debe proporcionar una cadena al primer argumento para nombrar el tensor personalizado. hook.save_tensor() tiene el tercer argumento collections_to_write para especificar la colección de tensores para guardar el tensor personalizado. El valor predeterminado es collections_to_write="default". Si no especifica explícitamente el tercer argumento, el tensor personalizado se guardará en la colección de tensores "default".

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