Estado del Arte en Deep Learning Distribuido

Desde el equipo de I+D de Zylk continuamos investigando las tecnologías englobadas en el proyecto FRACTAL. En este proyecto se busca desarrollar un entorno de cómputo cognitivo en el Edge, que permita desacoplar la Inteligencia Artificial de los entornos Cloud y construir un módulo de cómputo independiente donde el ciclo de vida de los modelos de Machine Learning (y en concreto las fases más ligadas habitualmente al cloud, entrenamiento e inferencia) pueda darse a tiempo real. En este post se presenta el resultado de nuestra investigación en el estado del arte de frameworks y librerías open-source de Inteligencia Artificial Distribuida.

HOROVOD

   Horovod es un framework Open-Source desarrollado en C para realizar el entrenamiento de modelos de Deep Learning de forma distribuida entre diferentes equipos. Tiene capacidad para utilizar tanto las CPU como las GPU de los equipos, y soporta los siguientes frameworks: Keras, Pytorch, TensorFlow y MXNet.

Horovod está basado en MPI (Message Passing Interface), un estándar de bajo nivel que define una sintaxis y una semántica para que varios dispositivos trabajen paralelamente de forma conjunta, lo que permite que el entrenamiento de los modelos de Deep Learning se realice eficientemente de manera distribuida. Además, para un correcto ajuste de los hiperparámetros de los modelos, utiliza Ray Tune, un estándar industrial optimizado para entrenamiento distribuido.

Aunque su uso es ligeramente invasivo en los scripts para generar el modelo, la propia página tiene diversos tutoriales para su uso. Además, es fácilmente portable en Docker o Kubernetes, lo que permite un sencillo despliegue en los dispositivos.

Con todo esto, Horovod es una herramienta muy potente a la hora de realizar entrenamiento distribuido de manera sencilla.

RAY

      Ray es un framework Open-Source enfocado explícitamente en realizar trabajos de forma distribuida.

Ray contiene diversas herramientas, por lo que incluso se podría considerar un ecosistema distribuido en sí mismo. Estas herramientas tienen diferentes utilidades, como por ejemplo:

  • RAY DATA: herramienta que permite trabajar con grandes conjuntos de datos de manera distribuida, pudiendo utilizar filtrado, mapeo, etc.

  • RAY TUNE: librería para ajustar hiperparámetros de modelos de Machine Learning de forma distribuida.

  • RAY TRAIN: herramienta para realizar entrenamientos entre diferentes dispositivos de forma distribuida. Se suele utilizar de forma conjunta con RAY DATA y RAY TUNE.

Ray es un framework bastante asentado y con una gran proyección en el entorno del Aprendizaje Distribuido, ya que, en comparación con otros sistemas, es capaz de trabajar con diferentes dispositivos de forma simultánea sin realizar previamente grandes cambios.

Además, tras cada ejecución de las diferentes tareas (tasks), se puede acceder a un registro de toda la información producida en cada una, como el host, core o worker del equipo en el que se ha ejecutado, o incluso cada una de las variables que se ha generado. Todo esto es posible ya que utiliza como backend una instancia de Redis, un framework de almacenamiento de datos.

Apache TVM

  Apache TVM  es un compilador open-source de modelos de Deep Learning para su despliegue en prácticamente cualquier plataforma de hardware o dispositivo. Además, permite optimizar cada modelo según la plataforma en la que se despliegue, mejorando su velocidad de respuesta de manera sencilla.

Actualmente existen numerosas arquitecturas de hardware en uso (como X86, ARM, RISC-V, etc.); cada una diferente, optimizada con un objetivo distinto. Además, hay otro tanto de librerías y frameworks de Machine Learning (por ejemplo: Tensorflow, Torch o MXNet). El problema viene cuando queremos portar un modelo de una librería arbitraria X a una plataforma arbitraria Y, ya que es muy probable que no sean compatibles. Es más, por cada nueva librería o plataforma hardware, se crea toda una serie de posibles interacciones entre todas las existentes, haciendo su integración complicada. Apache TVM da respuesta a este problema, actuando como intermediario entre frameworks de Machine Learning y plataformas de hardware.

Y no solo es capaz de hacer compatible casi cualesquiera librería y plataforma hardware, permitiendo la optimización del modelo a desplegar, sino que gracias al módulo AutoTVM puede realizar ese proceso autónomamente, mediante una optimización iterativa. De esta manera, facilita sacar el máximo rendimiento a cada dispositivo, y la velocidad de procesamiento aumenta considerablemente, permitiendo utilizar dispositivos más ligeros pero con un rendimiento óptimo.

EDDL y COMPSs

     EDDL (European Deep Learning Library) es un framework Open-Sorce desarrollado por DeepHealth de Deep Learning DL distribuido tanto en CPU como GPU o FPGA. EDDL está escrito en C++, aunque también existe una librería wrapper para Python: PyEDDL. Posee las funciones que ofrece cualquier librería de Deep Learning, como la creación de redes neuronales con diferentes tipos de capas, optimizadores/regularizadores/inicializadores ya implementados, o soporte para ONNX (un formato transversal a la mayoría de los frameworks de Deep Learning).

    EDDL, aunque puede funcionar sin problema en un único dispositivo, nativamente no es capaz de distribuir el cómputo entre varios, sino que utiliza internamente COMPSs para esa tarea. COMPSs (COMP Superscalar) es un framework desarrollado por el Centro Nacional de Supercomputación (BSC-CNS), que permite ejecutar tareas paralelamente en infraestructuras distribuidas, como clusters de alto rendimiento. Está escrito en C++, con el propósito de conseguir la velocidad de procesamiento más rápida posible. Utiliza dos archivos de configuración para definir el entorno de ejecución, permitiendo la configuración a bajo nivel, para facilitar así el aprovechamiento de la capacidad computacional de cada dispositivo.

Apache SINGA

​​​​​​​Apache SINGA es un framework de Deep Learning distribuido apoyado por la fundación Apache.

De manera similar a Horovod, también está basado en el estándar MPI, pero no usa frameworks externos; esto es, cuenta con la ventaja de que está diseñado nativamente para utilizarlo de manera distribuida. Entre sus funciones como librería de Deep Learning, ofrece una serie de modelos preentrenados del estado del arte en visión por computador y procesamiento del lenguaje natural en formato ONNX (estándar al que da soporte), lo que hace de Apache Singa una tecnología versátil y lista para usar.

Para entrenar una red neuronal de forma distribuida, Singa utiliza all-reduce de NCCL (NVIDIA Collective Communication Library), una librería desarrollada por Nvidia, que reúne y sincroniza los gradientes de los pesos de la red neuronal calculados en los diferentes dispositivos. Por el momento, solo soporta GPU para hacer entrenamiento distribuido.

Actualmente Apache Singa se encuentra en la versión 3.2.0 (10 de agosto), y la fecha del último commit a master es de hace 3 meses.

Desde Zylk seguimos en continua investigación del estado del arte de Deep Learning Distribuido, no sólo como parte de los paquetes de trabajo del proyecto FRACTAL, sino para impulsar el crecimiento de nuestra área de I+D.

Autores: Andoni Angulo y Sergio Martín

00

More Blog Entries

thumbnail
thumbnail

0 Comments