Solución de problemas para la formación distribuida en Amazon SageMaker - 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.

Solución de problemas para la formación distribuida en Amazon SageMaker

Si tiene problemas para ejecutar un trabajo de entrenamiento cuando utiliza la biblioteca, utilice la siguiente lista para intentar solucionar el problema. Si necesitas más ayuda, ponte en contacto con el SageMaker equipo a través del Centro de AWS soporte o los foros de AWS desarrolladores de Amazon SageMaker.

Uso de datos SageMaker distribuidos en paralelo con Amazon SageMaker Debugger y puntos de control

Para supervisar los cuellos de botella del sistema, perfilar las operaciones del marco y depurar los tensores de salida del modelo para tareas de entrenamiento con SageMaker datos distribuidos en paralelo, utilice Amazon Debugger. SageMaker

Sin embargo, al utilizar SageMaker Debugger, SageMaker distributed data parallel y SageMaker checkpoints, es posible que aparezca un error parecido al del siguiente ejemplo.

SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

Esto se debe a un error interno entre el depurador y los puntos de control, que se produce cuando se habilitan los datos SageMaker distribuidos en paralelo.

  • Si habilitas las tres funciones, el SDK de SageMaker Python desactiva automáticamente el Debugger de pasadadebugger_hook_config=False, lo que equivale al siguiente estimator ejemplo de marco.

    bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) estimator = TensorFlow( ... distribution={"smdistributed": {"dataparallel": { "enabled": True }}}, checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path="/opt/ml/checkpoints", debugger_hook_config=False )
  • Si desea seguir utilizando datos SageMaker distribuidos en paralelo y SageMaker Debugger, una solución alternativa consiste en añadir manualmente funciones de puntos de control a su guion de entrenamiento en lugar de especificar checkpoint_local_path los parámetros checkpoint_s3_uri y del estimador. Para obtener más información sobre cómo configurar los puntos de control manuales en un script de entrenamiento, consulte Guardar puntos de control.

Se adjunta un prefijo inesperado a las claves de los parámetros del modelo

En el caso de los trabajos de formación PyTorch distribuidos, es posible que se adjunte un prefijo inesperado (modelpor ejemplo) a state_dict las claves (parámetros del modelo). La biblioteca paralela de SageMaker datos no altera ni antepone directamente ningún nombre de parámetro del modelo cuando los trabajos de PyTorch entrenamiento guardan artefactos del modelo. La PyTorch formación distribuida cambia los nombres de la state_dict red, anteponiendo el prefijo. Si encuentra algún problema de falla en el modelo debido a nombres de parámetros diferentes mientras utiliza la biblioteca de SageMaker datos paralelos y los puntos de control para el PyTorch entrenamiento, adapte el siguiente código de ejemplo para eliminar el prefijo en el paso en que carga los puntos de control en su script de entrenamiento.

state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}

Esto lleva cada clave state_dict como valor de cadena, separa la cadena en la primera aparición de 'model.' y toma el tercer elemento de lista (con el índice 2) de la cadena particionada.

Para obtener más información sobre el problema de los prefijos, consulta un hilo de discusión en ¿Los nombres de los parámetros del prefijo en el modelo guardado se entrenan con varias GPU? en el foro de debatePyTorch .

Para obtener más información sobre los PyTorch métodos para guardar y cargar modelos, consulte Guardar y cargar modelos en todos los dispositivos en la PyTorchdocumentación.

SageMaker el trabajo de formación distribuido se detiene durante la inicialización

Si su trabajo de formación en paralelo de datos SageMaker distribuidos se detiene durante la inicialización al utilizar instancias habilitadas para EFA, es posible que se deba a un error de configuración en el grupo de seguridad de la subred de VPC que se utiliza para el trabajo de formación. EFA requiere una configuración de grupo de seguridad adecuada para habilitar el tráfico entre los nodos.

Reglas de entrada y de salida para los grupos de seguridad
  1. Inicie sesión en la consola de Amazon VPC AWS Management Console y ábrala en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación izquierdo, elija Grupos de seguridad.

  3. Seleccione el grupo de seguridad vinculado a la subred de VPC que utiliza para el entrenamiento.

  4. En la sección Detalles, copie el ID del grupo de seguridad.

  5. En la pestaña Reglas de entrada, seleccione Editar reglas de entrada.

  6. En la página Editar reglas de entrada, haga lo siguiente:

    1. Seleccione Agregar regla.

    2. En Tipo, seleccione Todo el tráfico.

    3. En Fuente, seleccione Personalizado, pegue el ID del grupo de seguridad en el cuadro de búsqueda y, a continuación, seleccione el grupo de seguridad que aparece.

  7. Seleccione Guardar reglas para finalizar la configuración de la regla de entrada para el grupo de seguridad.

  8. En la pestaña Reglas de salida, seleccione Editar reglas de salida.

  9. Repita los pasos 6 y 7 para añadir la misma regla que una regla saliente.

Tras completar los pasos anteriores para configurar el grupo de seguridad con las reglas de entrada y salida, vuelva a ejecutar el trabajo de formación y compruebe si se ha resuelto el problema de bloqueo.

Para obtener más información sobre la configuración de grupos de seguridad para VPC y EFA, consulte Grupos de seguridad para la VPC y Elastic Fabric Adapter.

SageMaker trabajo de formación distribuido que se estanca al final de la formación

Una de las causas fundamentales de los problemas de estancamiento al final del entrenamiento es la falta de coincidencia en el número de lotes que se procesan por época en diferentes rangos. Todos los trabajadores (GPU) sincronizan sus degradados locales en la pasada hacia atrás para asegurarse de que todos tienen la misma copia del modelo al final de la iteración por lotes. Si los tamaños de los lotes se asignan de forma desigual a diferentes grupos de trabajadores durante la última época del entrenamiento, el trabajo de entrenamiento se detiene. Por ejemplo, mientras un grupo de trabajadores (grupo A) termina de procesar todos los lotes y sale del ciclo de entrenamiento, otro grupo de trabajadores (grupo B) comienza a procesar otro lote y espera la comunicación del grupo A para sincronizar los degradados. Esto hace que el grupo B espere al grupo A, que ya ha completado el entrenamiento y no tiene degradados que sincronizar.

Por lo tanto, al configurar el conjunto de datos del entrenamiento, es importante que cada trabajador obtenga el mismo número de muestras de datos para que cada trabajador pase por el mismo número de lotes durante el entrenamiento. Asegúrese de que cada rango obtenga el mismo número de lotes para evitar este problema de estancamiento.

Observando la degradación de la eficiencia de escalado debido a los cuellos de botella en el rendimiento de Amazon FSx

Una posible causa de la disminución de la eficiencia de escalado es el límite de rendimiento de los FSx. Si observa una caída repentina en la eficiencia de escalado al cambiar a un clúster de entrenamiento más grande, intente utilizar un sistema de archivos FSx para Lustre más grande con un límite de rendimiento superior. Para obtener más información, consulte el rendimiento agregado del sistema de archivos y la administración de la capacidad de almacenamiento y rendimiento en la Guía del usuario de Amazon FSx para Lustre.

SageMaker Un trabajo de formación distribuido con devoluciones de advertencias de obsolescencia PyTorch

Desde la versión 1.4.0, la biblioteca de paralelismo de datos SageMaker distribuidos funciona como un backend de datos distribuidos. PyTorch Debido al cambio radical que supone el uso de la biblioteca PyTorch, es posible que aparezca un mensaje de advertencia que indique que smdistributed las API del paquete distribuido están en desuso. PyTorch El mensaje de advertencia debería ser similar al siguiente:

smdistributed.dataparallel.torch.dist is deprecated in the SageMaker distributed data parallel library v1.4.0+. Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows: torch.distributed.init_process_group(backend='smddp') For more information, see the library's API documentation at https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html

En la versión 1.4.0 y versiones posteriores, la biblioteca solo debe importarse una vez en la parte superior del script de entrenamiento y configurarse como servidor durante la inicialización distribuida. PyTorch Con una sola línea de especificaciones de backend, puedes mantener tu guion de PyTorch entrenamiento sin cambios y utilizar directamente los módulos distribuidos. PyTorch Consulte Utilice la biblioteca SMDDP en su guion de formación PyTorch para obtener más información sobre los cambios más importantes y la nueva forma de utilizar la biblioteca. PyTorch