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.
Computación distribuida con SageMaker mejores prácticas
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 (GPU NVIDIA, chips AWS Trainium) y núcleos de vCPU. 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, es necesario identificar si la E/S de datos y la comunicación entre GPU presentan cuellos de botella o si provocan sobrecargas.
-
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 proporciona soluciones de formación distribuidas para reducir estos desafíos en diversos casos de uso. Elija una de las siguientes opciones que mejor se adapte a su caso de uso.
Temas
- Opción 1: utilice un algoritmo SageMaker integrado que admita la formación distribuida
- Opción 2: ejecute un código de aprendizaje automático personalizado en el entorno de procesamiento o formación SageMaker gestionado
- Opción 3: escribir su propio código de entrenamiento distribuido y personalizado
- Opción 4: lanzar varios trabajos en paralelo o secuencialmente
Opción 1: utilice un algoritmo SageMaker integrado que admita la formación distribuida
SageMaker proporciona algoritmos integrados que puede usar listos para usar a través de la SageMaker consola o el SDK de SageMaker Python. Al usar los algoritmos integrados, no necesita dedicar tiempo a personalizar el código, comprender la ciencia detrás de los modelos o ejecutar Docker en instancias de Amazon EC2 aprovisionadas.
Un subconjunto de los algoritmos SageMaker integrados admite 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 GPU en una sola instancia, como se indica en la columna Paralelizable.
Opción 2: ejecute un código de aprendizaje automático personalizado en el entorno de procesamiento o formación SageMaker gestionado
SageMaker Los trabajos 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, donde 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 trabajos de formación distribuidos mediante Deep Learning Containers (DLC)
-
Las bibliotecas de formación distribuidas SageMaker
Las bibliotecas de formación SageMaker distribuidas proponen código AWS gestionado para el paralelismo de datos de redes neuronales y el paralelismo de modelos. SageMaker El entrenamiento distribuido también incluye clientes lanzadores integrados en el SDK de SageMaker Python y no es necesario crear código de lanzamiento paralelo. Para obtener más información, consulta SageMakerla biblioteca de paralelismo de datos y la biblioteca de paralelismo SageMaker de modelos.
-
Bibliotecas de entrenamiento distribuido de código abierto
Los marcos de código abierto tienen sus propios mecanismos de distribución, como el DistributedDataParallelism (DDP)
o los módulos integrados. PyTorch tf.distribute
TensorFlow Puede optar por ejecutar estos marcos de formación distribuidos en los contenedores de marcos SageMaker gestionados. Por ejemplo, el código de ejemplo para entrenar a MaskrCNN SageMaker muestra cómo utilizar tanto el PyTorch DDP enel contenedor del framework como Horovod en el contenedor del SageMaker PyTorch framework. SageMaker TensorFlow
SageMaker Los contenedores ML también vienen con MPI
Notas para el entrenamiento de redes neuronales de paralelismo de datos en las GPU
-
Amplíe el sistema a un paralelismo entre varias GPU y varias máquinas cuando sea necesario
A menudo realizamos trabajos de entrenamiento de redes neuronales en instancias de varias CPU o GPU. Por lo general, cada instancia basada en GPU contiene varios dispositivos de GPU. Por lo tanto, la computación distribuida con GPU puede realizarse en una sola instancia de GPU con varias GPU (entrenamiento de un solo nodo y varias GPU) o en varias instancias de GPU con varios núcleos de GPU en cada una (entrenamiento de múltiples nodos y múltiples GPU). El entrenamiento en una sola instancia permite escribir código y depurar más fácilmente, y el rendimiento de GPU a GPU entre nodos suele ser más rápido que el rendimiento GPU-GPU entre nodos. Por lo tanto, es una buena idea escalar primero el paralelismo de datos verticalmente (utilice una instancia de GPU con varias GPU) y ampliarlo a varias instancias de GPU si es necesario. Es posible que esto no se aplique a los casos en los que el presupuesto de la CPU sea elevado (por ejemplo, una carga de trabajo enorme para el preprocesamiento de datos) y cuando la relación GPU-GPU de una instancia con varias GPU 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
Al entrenar una red neuronal con paralelismo de datos, si se aumenta el número de GPU y se mantiene constante el tamaño de los minilotes por GPU, se aumenta el tamaño del minilote global para el proceso de descenso de gradiente estocástico (MSGD) de los minilotes. Se sabe que el tamaño de los minilotes del MSGD afecta al ruido de descenso y a la 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 la cantidad de GPU, 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 scripts de entrenamiento escritos para el entrenamiento con una sola GPU deben modificarse para el entrenamiento con varios nodos y varias GPU. En la mayoría de las bibliotecas de paralelismo de datos, es necesario modificar los scripts para hacer lo siguiente.
-
Asignar lotes de datos de entrenamiento a cada GPU.
-
Utilizar un optimizador que pueda realizar cálculos de gradientes y actualizaciones de parámetros en varias GPU.
-
Asignar la responsabilidad de los puntos de control a un host y a una GPU específicos.
-
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 las API de SageMaker entrenamiento y SageMaker procesamiento de Amazon SageMaker Studio Classic, que está integrado con Amazon EMR
Opción 3: escribir su propio código de entrenamiento distribuido y personalizado
Cuando envía un trabajo de formación o procesamiento a SageMaker, las API de SageMaker formación y SageMaker procesamiento lanzan instancias informáticas de Amazon EC2. 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 él SageMaker y Cómo crear un contenedor con tus propios algoritmos y modelos. Para obtener más información sobre Docker with SageMaker Processing, 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 archivo JSON, 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
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. SageMaker Cuando lanzas un trabajo de SageMaker entrenamiento o SageMaker procesamiento en un clúster con varios nodos, de forma SageMaker predeterminada, replica y lanza 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 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 SageMaker automático de modelos. SageMaker 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 puede utilizar herramientas de organización de flujos de trabajo, como SageMaker Pipelines