Consejos de configuración para la biblioteca de paralelismo de datos SageMaker distribuidos - 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.

Consejos de configuración para la biblioteca de paralelismo de datos SageMaker distribuidos

Revise los siguientes consejos antes de usar la biblioteca de paralelismo de datos SageMaker distribuidos (SMDDP). Esta lista incluye sugerencias que se aplican en todos los marcos.

Preprocesamiento de datos

Si preprocesas los datos durante el entrenamiento con una biblioteca externa que utiliza la CPU, es posible que te encuentres con un cuello de botella en la CPU, ya que SageMaker los datos distribuidos en paralelo utilizan la CPU para las operaciones. AllReduce Puede mejorar el tiempo de entrenamiento trasladando los pasos de preprocesamiento a una biblioteca que utilice GPU o completando todo el preprocesamiento antes del entrenamiento.

Nodos únicos frente a nodos múltiples

Le recomendamos que utilice esta biblioteca con varios nodos. Es posible utilizar la biblioteca con una configuración de un solo host y varios dispositivos (por ejemplo, una sola instancia de procesamiento de machine learning con varias GPU); sin embargo, cuando se utilizan dos o más nodos, la operación AllReduce de la biblioteca mejora considerablemente el rendimiento. Además, en un único host, NVLink ya contribuye a la eficiencia AllReduce dentro del nodo.

Depure la eficiencia del escalado con Debugger

Puede utilizar Amazon SageMaker Debugger para supervisar y visualizar el uso de la CPU y la GPU y otras métricas de interés durante el entrenamiento. Puede utilizar las reglas integradas del depurador para monitorizar los problemas de rendimiento computacional, como CPUBottleneck, LoadBalancing y LowGPUUtilization. Puede especificar estas reglas con las configuraciones del depurador al definir un estimador del SDK de Amazon SageMaker Python. Si utilizas AWS CLI y con AWS SDK for Python (Boto3) fines de formación SageMaker, puedes habilitar el depurador como se muestra en Configurar el SageMaker depurador mediante la API de Amazon SageMaker .

Para ver un ejemplo del uso de Debugger en un trabajo de SageMaker formación, puede consultar uno de los ejemplos de cuadernos del repositorio Notebook SageMaker Examples. GitHub Para obtener más información sobre Debugger, consulte Amazon SageMaker Debugger.

Tamaño de lote

En el entrenamiento distribuido, a medida que se agreguen más nodos, el tamaño de los lotes debería aumentar proporcionalmente. Para mejorar la velocidad de convergencia a medida que añade más nodos a su trabajo de entrenamiento y aumenta el tamaño de los lotes globales, aumente la tasa de aprendizaje.

Una forma de lograrlo es mediante un calentamiento gradual de la tasa de aprendizaje, en el que la tasa de aprendizaje aumente de un valor pequeño a uno grande a medida que avanza el trabajo de entrenamiento. Esta rampa evita un aumento repentino de la tasa de aprendizaje, lo que permite una convergencia saludable al inicio del entrenamiento. Por ejemplo, puede utilizar una regla de escalado lineal según la cual cada vez que el tamaño del minilote se multiplique por k, la tasa de aprendizaje también se multiplique por k. Para obtener más información sobre esta técnica, consulte el paper de investigación Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour, secciones 2 y 3.

Opciones de MPI personalizadas

La biblioteca paralela de datos SageMaker distribuidos emplea la interfaz de paso de mensajes (MPI), un estándar popular para gestionar la comunicación entre los nodos de un clúster de alto rendimiento, y utiliza la biblioteca NCCL de NVIDIA para la comunicación a nivel de la GPU. Cuando utilizas la biblioteca paralela de datos con un Pytorch TensorFlow o PytorchEstimator, el contenedor correspondiente configura el entorno MPI y ejecuta el mpirun comando para iniciar las tareas en los nodos del clúster.

Puede configurar operaciones de MPI personalizadas mediante el parámetro custom_mpi_options en el Estimator. Todos los mpirun indicadores que se pasen en este campo se añadirán al mpirun comando y serán ejecutados por ellos con fines de entrenamiento. SageMaker Por ejemplo, puede definir el parámetro distribution de un Estimator utilizando lo siguiente para utilizar la variable NCCL_DEBUG para imprimir la versión NCCL al inicio del programa:

distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}

Utilice Amazon FSx y configure una capacidad óptima de almacenamiento y rendimiento

Al entrenar un modelo en varios nodos con paralelismo de datos distribuido, se recomienda encarecidamente utilizar FSx para Lustre. Amazon FSx es un servicio de almacenamiento escalable y de alto rendimiento que admite el almacenamiento de archivos compartidos con un rendimiento más rápido. Con el almacenamiento de Amazon FSx a escala, puede lograr una velocidad de carga de datos más rápida en todos los nodos de procesamiento.

Por lo general, con el paralelismo de datos distribuidos, es de esperar que el rendimiento total del entrenamiento se amplíe casi linealmente con la cantidad de GPU. Sin embargo, si utiliza un almacenamiento de Amazon FSx subóptimo, es posible que el rendimiento del entrenamiento disminuya debido al bajo rendimiento de Amazon FSx.

Por ejemplo, si utiliza el tipo de implementación SCRATCH_2 del sistema de archivos Amazon FSx con una capacidad de almacenamiento mínima de 1,2 TiB, la capacidad de rendimiento de E/S es de 240 MB/s. El almacenamiento de Amazon FSx funciona de forma que puede asignar dispositivos de almacenamiento físico y, cuantos más dispositivos se asignen, mayor rendimiento obtendrá. El incremento de almacenamiento más pequeño para el tipo SRATCH_2 es de 1,2 TiB y la ganancia de rendimiento correspondiente es de 240 MB/s.

Suponga que tiene un modelo para entrenar en un clúster de 4 nodos con un conjunto de datos de 100 GB. Con un tamaño de lote determinado que esté optimizado para el clúster, suponga que el modelo puede completar una época en unos 30 segundos. En este caso, la velocidad de E/S mínima requerida es de aproximadamente 3 Gb/s (100 GB/ 30 s). Aparentemente, este es un requisito de rendimiento mucho mayor que el de 240 MB/s. Con una capacidad de Amazon FSx tan limitada, escalar su trabajo de entrenamiento distribuido a clústeres más grandes podría agravar los problemas de los cuellos de botella de E/S; el rendimiento del entrenamiento de modelos podría mejorar en épocas posteriores a medida que se acumule la memoria caché, pero el rendimiento de Amazon FSx puede seguir siendo un cuello de botella.

Para aligerar estos problemas de cuellos de botella de E/S, debe aumentar el tamaño de almacenamiento de Amazon FSx para obtener una mayor capacidad de rendimiento. Por lo general, para encontrar un rendimiento de E/S óptimo, puede experimentar con diferentes capacidades de rendimiento de Amazon FSx y asignar un rendimiento igual o ligeramente inferior al estimado, hasta que descubra que es suficiente para resolver los problemas de cuello de botella de E/S. En el caso del ejemplo mencionado anteriormente, el almacenamiento Amazon FSx con un rendimiento de 2,4 GB/s y una caché RAM de 67 GB sería suficiente. Si el sistema de archivos tiene un rendimiento óptimo, el rendimiento de entrenamiento del modelo debería alcanzar el máximo inmediatamente o después de la primera fase a medida que se acumule la memoria caché.

Para obtener más información sobre cómo aumentar los tipos de almacenamiento e implementación de Amazon FSx, consulte las siguientes páginas de la documentación de Amazon FSx para Lustre: