Informática distribuida con mejores prácticas de SageMaker IA - 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.

Informática distribuida con mejores prácticas de SageMaker IA

Esta página de prácticas recomendadas presenta varios tipos de computación distribuida para los trabajos de machine learning (ML) en general. El término computación distribuida en esta página abarca el entrenamiento distribuido para tareas de machine learning y la computación paralela para el procesamiento de datos, la generación de datos, la ingeniería de características y el aprendizaje por refuerzo. En esta página, analizamos los desafíos comunes de la computación distribuida y las opciones disponibles en SageMaker materia de formación y SageMaker procesamiento. Si quiere obtener materiales de lectura adicionales sobre la computación distribuida, consulte ¿Qué es la computación distribuida?.

Puede configurar las tareas de aprendizaje automático para que se ejecuten de forma distribuida en varios nodos (instancias), aceleradores (NVIDIAGPUschips AWS Trainium) y núcleos v. CPU Al ejecutar la computación distribuida, puede lograr diversos objetivos, como procesar las operaciones con mayor rapidez, gestionar conjuntos de datos de gran tamaño o entrenar modelos de machine learning de gran tamaño.

En la siguiente lista se describen los desafíos más comunes a los que puede enfrentarse al realizar un trabajo de entrenamiento en machine learning a gran escala.

  • Debe tomar decisiones sobre cómo distribuir la computación en función de las tareas de machine learning, las bibliotecas de software que desee utilizar y los recursos informáticos.

  • No todas las tareas de machine learning son fáciles de distribuir. Además, no todas las bibliotecas de machine learning admiten la computación distribuida.

  • Es posible que la computación distribuida no siempre dé como resultado un aumento lineal de la eficiencia informática. En concreto, debe identificar si la E/S de datos y la GPU intercomunicación presentan cuellos de botella o si provocan una sobrecarga.

  • La computación distribuida puede alterar los procesos numéricos y cambiar la precisión de los modelos. Sobre todo con el entrenamiento de redes neuronales con datos paralelos, cuando cambia el tamaño del lote global y, al mismo tiempo, lo escala a un clúster de cómputo más grande, también necesita ajustar la tasa de aprendizaje de acuerdo a ello.

SageMaker La IA proporciona soluciones de formación distribuidas para aliviar estos desafíos en diversos casos de uso. Elija una de las siguientes opciones que mejor se adapte a su caso de uso.

Opción 1: utilice un algoritmo integrado de SageMaker IA que admita la formación distribuida

SageMaker La IA proporciona algoritmos integrados que puede usar listos para usar a través de la consola de SageMaker IA o SageMaker PythonSDK. Al usar los algoritmos integrados, no necesitas perder tiempo en personalizar el código, entender la ciencia detrás de los modelos o ejecutar Docker en instancias de Amazon EC2 aprovisionadas.

Un subconjunto de los algoritmos integrados de la SageMaker IA permite el entrenamiento distribuido. Para comprobar si el algoritmo de su elección admite el entrenamiento distribuido, consulte la columna Paralelizable de la tabla Información común sobre los algoritmos integrados. Algunos de los algoritmos admiten el entrenamiento distribuido en varias instancias, mientras que el resto de los algoritmos paralelizables admiten la paralelización entre varias instancias GPUs en una sola instancia, como se indica en la columna Paralelizable.

Opción 2: ejecuta un código de aprendizaje automático personalizado en el entorno de procesamiento o entrenamiento gestionado por IA SageMaker

SageMaker Los trabajos de IA pueden crear instancias de un entorno de formación distribuido para casos de uso y marcos específicos. Este entorno actúa como una ready-to-use pizarra blanca, en la que puedes incorporar y ejecutar tu propio código de aprendizaje automático.

Si su código de machine learning utiliza un marco de aprendizaje profundo

Puede lanzar tareas de formación distribuidas mediante Deep Learning Containers (DLC) for SageMaker Training, que puede organizar mediante los módulos de Python dedicados de la SageMaker IA Python SDK o mediante SageMaker APIs with AWS CLI, AWS SDK for Python (Boto3). SageMaker La IA proporciona contenedores de capacitación para marcos de aprendizaje automático PyTorchTensorFlow, incluidos Hugging Face Transformers y Apache. MXNet Dispone de dos opciones para escribir código de aprendizaje profundo para el entrenamiento distribuido.

  • La SageMaker IA distribuyó bibliotecas de formación

    Las bibliotecas de formación distribuidas por SageMaker IA proponen código AWS gestionado para el paralelismo de datos de redes neuronales y el paralelismo de modelos. SageMaker El entrenamiento distribuido de IA también incluye clientes de lanzamiento integrados en SageMaker PythonSDK, y no es necesario crear un código de lanzamiento paralelo. Para obtener más información, consulta la biblioteca de paralelismo de datos de SageMaker IA y la biblioteca de paralelismo de modelos de SageMaker IA.

  • Bibliotecas de entrenamiento distribuido de código abierto

    Los marcos de código abierto tienen sus propios mecanismos de distribución, como DistributedDataParallelism () DDP in o modules in. PyTorch tf.distribute TensorFlow Puede optar por ejecutar estos marcos de formación distribuidos en los contenedores de marcos SageMaker gestionados por la IA. Por ejemplo, el código de muestra para entrenar a Mask RCNN en SageMaker IA muestra cómo utilizar tanto PyTorch DDP en el contenedor del PyTorch marco de SageMaker IA como Horovod en el contenedor del marco. SageMaker TensorFlow

SageMaker Los contenedores AI ML también vienen MPIpreinstalados, por lo que puedes paralelizar tu script de punto de entrada mediante mpi4py. El uso de los contenedores de formación MPI integrados es una excelente opción a la hora de lanzar un lanzador de formación distribuido de terceros o escribir código paralelo ad hoc en el entorno de formación gestionado por SageMaker IA.

Notas para el entrenamiento de redes neuronales paralelas a datos sobre GPUs

  • Amplíe al paralelismo entre múltiples GPU y múltiples máquinas cuando sea apropiado

    A menudo realizamos trabajos de entrenamiento de redes neuronales en múltiples CPU o múltiples instancias. GPU Por lo general, cada instancia GPU basada contiene varios GPU dispositivos. Por lo tanto, la GPU computación distribuida puede realizarse en una sola GPU instancia con varios GPUs (GPUentrenamiento de un solo nodo) o en varias GPU instancias con varios GPU núcleos en cada una (GPUentrenamiento de múltiples nodos). El entrenamiento en una sola instancia es más fácil de escribir código y depurar, y el rendimiento entre nodos suele ser más rápido que el GPU-to-GPU rendimiento entre nodos. GPU-to-GPU Por lo tanto, es una buena idea escalar primero el paralelismo de datos verticalmente (utilice una GPU instancia con varias) y ampliarlo a varias GPUs instancias si es necesario. GPU Es posible que esto no se aplique a los casos en los que el CPU presupuesto sea elevado (por ejemplo, una enorme carga de trabajo para el preprocesamiento de los datos) y cuando la CPU-to-GPU proporción de GPU instancias múltiples sea demasiado baja. En todos los casos, tendrá que experimentar con diferentes combinaciones de tipos de instancias en función de sus propias necesidades de entrenamiento en machine learning y de su carga de trabajo.

  • Supervisa la calidad de la convergencia

    Cuando se entrena una red neuronal con paralelismo de datos, si se aumenta el número de minilotes y se GPUs mantiene GPU constante el tamaño del minilote, se aumenta el tamaño del minilote global para el proceso de descenso del gradiente estocástico () del minilote. MSGD Se sabe que el tamaño de los minilotes afecta al ruido de descenso y a la MSGD convergencia. Para escalar correctamente y, al mismo tiempo, preservar la precisión, es necesario ajustar otros hiperparámetros, como la tasa de aprendizaje [Goyal et al. (2017)].

  • Monitorear los cuellos de botella de E/S

    A medida que aumente el número deGPUs, también aumentará el rendimiento del almacenamiento de lectura y escritura. Asegúrese de que la fuente de datos y la canalización no se conviertan en cuellos de botella.

  • Modifique su script de entrenamiento según sea necesario

    Los guiones de entrenamiento escritos para un solo GPU entrenamiento deben modificarse para un entrenamiento con múltiples nodos. GPU En la mayoría de las bibliotecas de paralelismo de datos, es necesario modificar los scripts para hacer lo siguiente.

    • Asigna lotes de datos de entrenamiento a cada uno. GPU

    • Usa un optimizador que pueda procesar el cálculo de gradientes y las actualizaciones de parámetros en varios. GPUs

    • Asigne la responsabilidad de los puntos de control a un host específico y. GPU

Si su código de machine learning implica el procesamiento de datos tabulares

PySpark es una interfaz de Python de Apache Spark, que es un marco de computación distribuida de código abierto. PySpark se ha adoptado ampliamente para el procesamiento distribuido de datos tabulares para cargas de trabajo de producción a gran escala. Si desea ejecutar código de procesamiento de datos tabulares, considere usar los PySpark contenedores SageMaker de procesamiento y ejecutar trabajos paralelos. También puede ejecutar trabajos de procesamiento de datos en paralelo mediante SageMaker Training and SageMaker Processing APIs en Amazon SageMaker Studio Classic, que está integrado con Amazon EMR y AWS Glue.

Opción 3: escribir su propio código de entrenamiento distribuido y personalizado

Cuando envíes un trabajo de formación o procesamiento a SageMaker AI, SageMaker Training and SageMaker AI Processing APIs lanza instancias de EC2 cómputo de Amazon. Puede personalizar el entorno de entrenamiento y procesamiento de las instancias ejecutando su propio contenedor de Docker o instalando bibliotecas adicionales en los contenedores AWS gestionados. Para obtener más información sobre Docker with SageMaker Training, consulta Cómo adaptar tu propio contenedor de Docker para que funcione con la SageMaker IA y Cómo crear un contenedor con tus propios algoritmos y modelos. Para obtener más información sobre Docker con procesamiento de SageMaker IA, consulte Use su propio código de procesamiento.

Cada entorno de trabajo de SageMaker formación contiene un archivo de configuración en/opt/ml/input/config/resourceconfig.json, y cada entorno de trabajo de SageMaker procesamiento contiene un archivo de configuración similar en/opt/ml/config/resourceconfig.json. El código puede leer este archivo para buscar hostnames y establecer comunicaciones entre nodos. Para obtener más información, incluido el esquema del JSON archivo, consulte Configuración de entrenamiento distribuido y Cómo Amazon SageMaker Processing configura su contenedor de procesamiento. También puede instalar y utilizar bibliotecas informáticas distribuidas de terceros, como Ray o DeepSpeed SageMaker AI.

También puede usar SageMaker Training and SageMaker Processing para ejecutar cálculos distribuidos personalizados que no requieran comunicación entre trabajadores. En la literatura sobre computación, esas tareas a menudo se describen como vergonzosamente paralelas o donde no se comparte nada. Los ejemplos incluyen el procesamiento paralelo de archivos de datos, el entrenamiento de modelos en paralelo en diferentes configuraciones o la ejecución de inferencias por lotes en una colección de registros. Puedes paralelizar trivialmente estos casos de uso en los que no se comparte nada con Amazon AI. SageMaker Cuando lanzas un trabajo de SageMaker entrenamiento o SageMaker procesamiento en un clúster con varios nodos, la SageMaker IA replica y lanza de forma predeterminada tu código de entrenamiento (en Python o Docker) en todos los nodos. Las tareas que requieren una distribución aleatoria de los datos de entrada entre estos múltiples nodos se pueden facilitar S3DataDistributionType=ShardedByS3Key configurando la configuración de entrada de datos de la SageMaker IA. TrainingInput API

Opción 4: lanzar varios trabajos en paralelo o secuencialmente

También puede distribuir un flujo de trabajo de procesamiento de aprendizaje automático en tareas de procesamiento secuenciales o paralelas más pequeñas, cada una representada por su propio trabajo de SageMaker entrenamiento o SageMaker procesamiento. Dividir una tarea en varios trabajos puede resultar beneficioso para las siguientes situaciones o tareas:

  • Cuando tiene canales de datos y entradas de metadatos específicos (como hiperparámetros, configuración de modelos o tipos de instancias) para cada subtarea.

  • Cuando implementa los pasos de reintento a nivel de subtarea.

  • Cuando varía la configuración de las subtareas a lo largo de la carga de trabajo, por ejemplo, cuando se entrena sobre cómo aumentar el tamaño de los lotes.

  • Cuando necesita ejecutar una tarea de machine learning que lleva más tiempo que el tiempo máximo de entrenamiento permitido para un solo trabajo de entrenamiento (28 días como máximo).

  • Cuando los distintos pasos de un flujo de trabajo informático requieren distintos tipos de instancias.

Para el caso específico de la búsqueda de hiperparámetros, utilice el ajuste automático de modelos mediante SageMaker IA. SageMaker AI Automated Model Tuning es un orquestador de búsqueda de parámetros sin servidor que lanza varios trabajos de formación en tu nombre, según una lógica de búsqueda que puede ser aleatoria, bayesiana o bayesiana. HyperBand

Además, para organizar varios trabajos de formación, también puedes utilizar herramientas de organización de flujos de trabajo, como SageMaker Pipelines, AWS Step Functions y Apache Airflow, compatibles con Amazon Managed Workflows for Apache Airflow () MWAA y AI Workflows. SageMaker