Un servidor de modelos ML open-source desarrollado por Zylk
En agosto de 2020, daba comienzo el proyecto ECSEL FRACTAL en el que participa el equipo de I+D de Zylk, desarrollando tecnologías de Inteligencia Artificial para computación en dispositivos Edge. Dos años más tarde, presentamos el que ha sido el principal resultado de nuestra investigación de este ámbito, una herramienta para la gestión de los modelos de Machine Learning, que trata de englobar el entrenamiento, almacenamiento, control de versiones, y la inferencia de los mismos.
El desarrollo de esta herramienta surgió frente a la necesidad interna del equipo de I+D de gestionar de forma eficiente los modelos de Machine Learning, centrándose en un comienzo en el despliegue en dispositivos IoT de los modelos con la librería ONNX. Más adelante, el proyecto fue evolucionando y se le añadieron diversos módulos que le aportaban nuevas funcionalidades, siendo las principales la capacidad de desplegar modelos de Machine Learning en contenedores en el Edge, hacer inferencia sobre modelos desarrollados con las librerías ONNX y Tensorflow, almacenamiento y gestión de los modelos, control de versiones de los mismos, y, finalmente, un módulo de entrenamiento con el que se cubre el ciclo de vida completo de los modelos.
Esta herramienta está disponible de forma open-source en https://github.com/zylklab/mlbuffet, y puede desplegarse en clusters de Kubernetes como una aplicación en contenedores, lo que asegura que el despliegue sea independiente del hardware, una característica esencial en dispositivos IoT, que suelen diferir en la arquitectura de sus procesadores.
En cuanto a la arquitectura, MLBuffet expone una API (Inferrer) que se encarga de recoger todas las peticiones de los usuarios y gestionarlas. Estas peticiones pueden consistir en operaciones sobre los modelos (subir un nuevo modelo al servidor, añadirles descripciones, gestionar sus diferentes versiones…), proveer unos datos de input para que un modelo cargado devuelva el resultado de la inferencia, o ejecutar el entrenamiento de un nuevo modelo.
Todas estas acciones son gestionadas por la API del Inferrer, pero pasan después a ejecutarse en un contenedor dedicado, desacoplando todas las cargas de trabajo paralelamente. Por ejemplo, si se ejecuta un entrenamiento, el Inferrer seguirá pudiendo realizar el resto de operaciones, sin tener que esperar a que el entrenamiento termine. Esta gestión asíncrona de las peticiones es especialmente importante en el Edge, donde los dispositivos IoT sufren restricciones en la capacidad de cómputo, y deben ser capaces de realizar tareas de forma paralela.
El diseño de esta herramienta se ha hecho buscando que la instalación y configuración sean tan sencillas como sea posible para el usuario, y se proveen los scripts e instrucciones de instalación. Además, la API está construida de una forma intuitiva, que facilite el uso de la misma para sus usuarios, y su integración con otras herramientas de ML, como KubeFlow.
MLBuffet se utiliza actualmente en el proyecto Fractal como servidor de modelos en plataformas FPGA, dispositivos IoT con un consumo energético muy bajo y alto rendimiento, y desde el equipo de I+D de Zylk continuaremos desarrollando esta herramienta y ampliando sus funcionalidades, con el fin de que se convierta en una herramienta de despliegue y gestión de modelos en el Edge de referencia.