La imagen principal de este artículo fue generada porAI Image Generator de HackerNoon a través del mensaje "robots mirando computadoras"
Las cargas de trabajo de aprendizaje automático (ML) requieren una infraestructura eficiente para producir resultados rápidos. El entrenamiento de modelos depende en gran medida de grandes conjuntos de datos. Canalizar estos datos desde el almacenamiento hasta el clúster de entrenamiento es el primer paso de cualquier flujo de trabajo de ML, lo que afecta significativamente la eficiencia del entrenamiento de modelos.
Este artículo analizará una nueva solución para orquestar datos para canalizaciones de aprendizaje automático de extremo a extremo que aborda las preguntas anteriores. Describiré los desafíos y las dificultades comunes, seguido de la propuesta de una nueva técnica, la orquestación de datos, para optimizar la canalización de datos para el aprendizaje automático.
Una canalización de aprendizaje automático de extremo a extremo es una secuencia de pasos desde el preprocesamiento y la limpieza de datos hasta el entrenamiento del modelo y la inferencia. La capacitación es la parte más crucial y que requiere más recursos de todo el flujo de trabajo.
El siguiente diagrama muestra una canalización típica de ML. Comienza con la recopilación de datos, luego viene la preparación de datos y finalmente el entrenamiento del modelo. Durante la fase de recopilación de datos, los ingenieros de plataformas de datos suelen tardar una cantidad significativa de tiempo en hacer que los datos sean accesibles para los ingenieros de datos, quienes preparan los datos para que los científicos de datos construyan e iteren modelos.
Durante la fase de entrenamiento, se procesan volúmenes de datos sin precedentes para garantizar la alimentación continua de datos a las GPU que generan modelos. Es imperativo que los datos se gestionen para admitir la complejidad de ML y su arquitectura ejecutable. En la canalización de datos, cada paso presenta sus propios desafíos técnicos.
La capacitación se beneficia de grandes conjuntos de datos, por lo que es crucial recopilar datos de todas las fuentes relevantes. Ya no es factible combinar todos los datos en una fuente monolítica cuando los datos residen en lagos de datos, almacenes de datos y almacenes de objetos, ya sea en las instalaciones, en la nube o distribuidos en varias ubicaciones geográficas. Con los silos de datos, el acceso remoto a través de la red inevitablemente genera latencia. Cómo hacer que los datos sean accesibles manteniendo el rendimiento deseado es un desafío importante.
La preparación de datos comienza con la ingesta de datos de la fase de recopilación e incluye limpieza, ETL y transformación antes de entregar datos para entrenar el modelo. Si esta fase se considera de forma aislada, la canalización de datos se serializa y se desperdicia más tiempo esperando los datos preparados para el clúster de entrenamiento. Por lo tanto, los ingenieros de la plataforma deben descubrir cómo crear una canalización de datos paralelizados y permitir tanto el intercambio eficiente de datos como el almacenamiento eficiente de resultados intermedios.
El entrenamiento de modelos requiere el procesamiento de cientos de terabytes de datos, a menudo cantidades masivas de archivos pequeños, como imágenes y archivos de audio. El entrenamiento implica iteraciones que requieren que las épocas se ejecuten varias veces, lo que hace que el acceso a los datos sea frecuente. Es necesario mantener la GPU ocupada alimentándola constantemente con datos. No es fácil optimizar la E/S y mantener el rendimiento requerido por la GPU.
Antes de hablar sobre diferentes soluciones, configuremos un escenario simplificado, como se ilustra en el diagrama a continuación. Aquí, estamos entrenando en la nube usando un clúster de GPU con múltiples nodos que ejecutan TensorFlow como marco de ML. Los datos preprocesados se almacenan en Amazon S3. En general, hay dos enfoques para llevar estos datos al clúster de entrenamiento. Hablaremos de eso a continuación.
Enfoque 1: datos duplicados en el almacenamiento local
En el primer enfoque, todo el conjunto de datos se replica desde el almacenamiento remoto al almacenamiento local de cada servidor para el entrenamiento, como se muestra a continuación. Por lo tanto, la localidad de los datos está garantizada y los trabajos de entrenamiento leen la entrada local en lugar de recuperarla del almacenamiento remoto.
Desde la perspectiva de canalización de datos y E/S, este enfoque proporciona el mayor rendimiento de E/S, ya que todos los datos son locales. Las GPU se mantendrán ocupadas, excepto al principio, ya que el entrenamiento debe esperar a que los datos se copien por completo desde el almacenamiento de objetos al clúster de entrenamiento.
Sin embargo, este enfoque no es apropiado para todas las situaciones.
Primero, el conjunto de datos debe caber en el almacenamiento local agregado. A medida que crece el tamaño del conjunto de datos de entrada, el proceso de copia de datos se vuelve más largo y más propenso a errores, lo que lleva más tiempo y se desperdician recursos de GPU.
En segundo lugar, copiar una gran cantidad de datos en cada máquina de entrenamiento crea una presión significativa en el sistema de almacenamiento y la red. En situaciones en las que los datos de entrada cambian con frecuencia, la sincronización de datos puede ser muy compleja.
Por último, hacer copias de los datos manualmente lleva mucho tiempo y es propenso a errores, ya que es un desafío mantener los datos en el almacenamiento en la nube sincronizados con los datos de entrenamiento.
Enfoque 2: acceder directamente al almacenamiento en la nube
Otro enfoque común es conectar el entrenamiento con el conjunto de datos de destino en el almacenamiento remoto directamente, como se muestra a continuación. Con este enfoque, el tamaño del conjunto de datos no es un problema, como con la solución anterior. Pero se enfrenta a varios desafíos nuevos.
En primer lugar, desde la perspectiva de E/S y canalización, los datos se procesan en serie. Todas las operaciones de acceso a datos deben pasar por la red entre el almacenamiento de objetos y el clúster de entrenamiento, lo que convierte a la E/S en un cuello de botella. Como resultado, las GPU pasan ciclos esperando mientras el rendimiento de E/S está limitado por la red.
En segundo lugar, cuando la escala de entrenamiento es grande, todos los nodos de entrenamiento acceden simultáneamente al mismo conjunto de datos desde el mismo almacenamiento remoto, lo que agrega una enorme presión al sistema de almacenamiento. Es probable que el almacenamiento se congestione debido al acceso altamente simultáneo, lo que resultará en una baja utilización de la GPU.
En tercer lugar, si el conjunto de datos consta de una gran cantidad de archivos pequeños, las solicitudes de acceso a los metadatos representarán una gran parte de las solicitudes de datos. Como resultado, la recuperación directa de los metadatos de una gran cantidad de archivos o directorios del almacén de objetos se convierte en un cuello de botella en el rendimiento y aumenta el costo de operación de los metadatos.
Para abordar estos desafíos y dificultades, debemos repensar las arquitecturas de la plataforma de datos cuando se trata de E/S en la tubería de aprendizaje automático. Aquí recomiendo un nuevo enfoque, la orquestación de datos, para acelerar la canalización de ML de extremo a extremo. Las tecnologías de orquestación de datos abstraen el acceso a los datos en los sistemas de almacenamiento, virtualizan todos los datos y presentan los datos a través de API estandarizadas y un espacio de nombres global para aplicaciones basadas en datos.
En lugar de copiar y mover datos, déjelos donde están, ya sea en las instalaciones o en la nube. La orquestación de datos puede ayudar a abstraer los datos para crear una vista unificada. Esto reducirá significativamente la complejidad en la fase de recopilación de datos.
Debido a que la orquestación de datos ya puede integrarse con los sistemas de almacenamiento, los marcos de aprendizaje automático solo necesitan interactuar con una única plataforma de orquestación de datos para acceder a los datos desde cualquier almacenamiento conectado. Como resultado, la capacitación se puede realizar en todos los datos de cualquier fuente, lo que lleva a una mejor calidad del modelo. No hay necesidad de mover manualmente los datos a una fuente central. Todos los marcos de computación, incluidos Spark, Presto, PyTorch y TensorFlow , pueden acceder a los datos sin preocuparse por dónde residen.
En lugar de duplicar todo el conjunto de datos en cada máquina individual, recomiendo implementar el almacenamiento en caché distribuido, donde los datos se pueden distribuir uniformemente en todo el clúster. El almacenamiento en caché distribuido es especialmente ventajoso cuando el conjunto de datos de entrenamiento es mucho más grande que la capacidad de almacenamiento de un solo nodo. También ayuda cuando los datos son remotos porque los datos se almacenan en caché localmente. La capacitación de ML se vuelve más rápida y rentable porque no hay E/S de red al acceder a los datos.
La figura anterior muestra un almacén de objetos donde se almacenan todos los datos de entrenamiento y dos archivos para representar el conjunto de datos (/ruta1/archivo1 y /ruta2/archivo2). En lugar de almacenar todos los bloques de archivos en cada máquina de entrenamiento, los bloques se distribuirán entre varias máquinas. Para evitar la pérdida de datos y mejorar la concurrencia de lectura, cada bloque se puede almacenar en varios servidores simultáneamente.
Existe un alto grado de superposición entre las lecturas y escrituras de datos realizadas por un trabajo de capacitación de ML, tanto dentro como entre trabajos. El intercambio de datos puede garantizar que todos los marcos de computación tengan acceso a datos previamente almacenados en caché para cargas de trabajo de lectura y escritura para el siguiente paso. Por ejemplo, si usa Spark para ETL en el paso de preparación de datos, el uso compartido de datos puede garantizar que los datos de salida se almacenen en caché y estén disponibles para etapas futuras. A través del intercambio de datos, toda la canalización de datos obtiene un mejor rendimiento de extremo a extremo.
Orquestamos la canalización de datos mediante la implementación de la carga previa y el almacenamiento en caché bajo demanda. La siguiente imagen muestra que la carga de datos desde la fuente con el almacenamiento en caché de datos se puede realizar en paralelo con la tarea de entrenamiento real. Como resultado, el entrenamiento se beneficia de un alto rendimiento de datos al acceder a los datos sin necesidad de esperar a almacenar en caché los datos completos antes del entrenamiento.
Aunque habrá algo de latencia de E/S al principio, el tiempo de espera disminuirá porque los datos ya están cargados en la memoria caché. A través de este enfoque, puede superponer los pasos. La carga de datos desde el almacenamiento de objetos al clúster de entrenamiento, el almacenamiento en caché, la carga de datos bajo demanda en el entrenamiento y el entrenamiento se pueden realizar en paralelo, lo que acelera enormemente todo el proceso.
Comparemos el nuevo enfoque recomendado con los dos enfoques tradicionales. Al organizar los datos en los pasos de una canalización de aprendizaje automático, eliminamos la ejecución en serie y las ineficiencias asociadas a medida que los datos fluyen de una etapa a la siguiente. Esto, a su vez, producirá una alta tasa de utilización de GPU.
| Datos duplicados en el almacenamiento local | Acceda directamente al almacenamiento en la nube | Orquestación de datos |
---|---|---|---|
localidad de datos | ✓ | | ✓ |
Sin limitación en el tamaño del conjunto de datos | | ✓ | ✓ |
No es necesario copiar los datos completos manualmente antes del entrenamiento | ✓ | ✓ | ✓ |
La consistencia de los datos está asegurada. | | ✓ | ✓ |
La utilización de la GPU es alta | ✓ | | ✓ |
Usemos Alluxio como ejemplo aquí para mostrarle cómo usar la orquestación de datos. Nuevamente, usaremos el mismo escenario simplificado. Para programar trabajos de TensorFlow, puede usar Kubernetes o usar servicios de nube pública.
El uso de Alluxio para orquestar el aprendizaje automático y el aprendizaje profundo normalmente consta de tres pasos:
Se puede acceder a los datos en diferentes sistemas de almacenamiento a través de Alluxio inmediatamente después del montaje y se puede acceder a ellos de forma transparente a través de los scripts de referencia sin modificar TensorFlow. Esto simplifica significativamente el desarrollo de la aplicación, que de otro modo necesitaría la integración de cada sistema de almacenamiento en particular, así como las configuraciones de las credenciales.
Puede seguir la guía aquí para ejecutar el reconocimiento de imágenes usando Alluxio con TensorFlow.
A medida que las técnicas de aprendizaje automático continúen evolucionando y los marcos realicen tareas más complejas, nuestros métodos para administrar la canalización de datos también mejorarán. Al extender la orquestación de datos a la canalización de datos, puede lograr una mejor eficiencia y utilización de recursos para su canalización de capacitación integral.
Reimpreso con permiso. © IDG Communications, Inc., 2022. Todos los derechos reservados. https://www.infoworld.com/article/3651453/orchestrating-data-for-machine-learning-pipelines.html .