Despliegue rápido de Deep Learning en dispositivos edge - MATLAB & Simulink

Artículos técnicos

Proceso eficiente para desplegar redes neuronales pequeñas en microcontroladores

Por Danilo Pau, STMicroelectronics, y Brenda Zhuang, MathWorks


“Basado en los productos de MATLAB y Simulink, junto con las herramientas de STMicroelectronics Edge AI, el marco ayuda a adquirir experiencia en Deep Learning y despliegue en edge rápidamente, lo que permite superar los obstáculos comunes que presenta tinyML”.

Las aplicaciones de Machine Learning y Deep Learning se están trasladando cada vez más de la nube a dispositivos integrados cerca de donde se originan los datos. Con el mercado de edge computing en rápida expansión, varios factores están impulsando el crecimiento de Edge AI, como escalabilidad, creciente demanda de aplicaciones de IA en tiempo real y disponibilidad de dispositivos edge de bajo coste complementados con cadenas de herramientas de software robustas y productivas. Además, es necesario evitar la transmisión de datos a través de una red, ya sea por razones de seguridad o simplemente para minimizar los costes de comunicación.

Edge AI abarca una amplia gama de dispositivos, sensores, microcontroladores, multimicroprocesadores integrados en chip, procesadores de aplicaciones y sistemas dedicados integrados en chip, como servidores edge y módulos de IoT relativamente potentes. La comunidad de referencia, tinyML Foundation, establecida en 2019, se centra en desarrollar modelos de Machine Learning y desplegarlos en dispositivos integrados con recursos extremadamente limitados, que cuentan con memoria, potencia de procesamiento y presupuestos de consumo energético reducidos. tinyML ofrece oportunidades únicas, como aplicaciones que pueden funcionar con baterías económicas o incluso pequeños paneles solares, así como aplicaciones a gran escala que procesan datos localmente en hardware de bajo coste. Por supuesto, tinyML también presenta varios desafíos. Uno de esos desafíos implica que los desarrolladores de Machine Learning y sistemas integrados deben optimizar el rendimiento y la superficie de una aplicación, lo que requiere conocimientos tanto en IA como en sistemas integrados.

En ese contexto, este artículo describe un marco práctico para diseñar y desplegar redes neuronales profundas en dispositivos edge. Basado en productos de MATLAB® y Simulink®, junto con las herramientas de STMicroelectronics® Edge AI, el marco ayuda a adquirir experiencia en Deep Learning y despliegue en edge rápidamente, lo que permite superar los obstáculos comunes que de tinyML. Esto, a su vez, permite crear y evaluar rápidamente aplicaciones de prueba de concepto de tinyML. En los primeros pasos del flujo de trabajo, desarrolladores utilizan MATLAB para construir una red de Deep Learning, ajustar hiperparámetros con optimización bayesiana, utilizar la destilación de conocimiento y comprimir la red con poda y cuantificación. En el paso final, los desarrolladores utilizan la tecnología ST Edge AI Core integrada en ST Edge AI Developer Cloud, un servicio gratuito en línea para desarrollar IA en microcontroladores y microprocesadores de 32 bits (STM32, Stellar) de STMicroelectronics, sensores equipados con IA integrada, para evaluar la utilización de recursos y la velocidad de inferencia de la red de Deep Learning desplegada (Figura 1).

Flujo de trabajo que muestra los pasos iterativos para entrenar y desplegar modelos de tinyML en dispositivos edge, desde la recopilación de datos hasta la implementación en microcontroladores y dispositivos edge.

Figura 1. Flujo de trabajo iterativo para desplegar redes de Deep Learning en microcontroladores y dispositivos edge. Los bucles de retroalimentación ayudan a dar forma a modelos más precisos y más pequeños.

Diseño de redes, entrenamiento y optimización de hiperparámetros

Una vez reunido, preprocesado y preparado el conjunto de datos que se utilizará en la aplicación de Deep Learning, el siguiente paso es entrenar y evaluar los modelos candidatos, que pueden incluir modelos preentrenados, como NASNet, SqueezeNet, Inception-v3 y ResNet-101, o modelos de Machine Learning construidos de forma interactiva con la app Deep Network Designer (Figura 2). Varios modelos proporcionan ejemplos que pueden utilizarse para impulsar el desarrollo, como modelos de muestra para clasificación de imágenes, vídeos, sonido, y nube de puntos de LiDAR; detección de objetos; estimación de poses; y segmentación de formas de onda.

App Deep Network Designer que muestra cómo se entrenan y evalúan múltiples modelos.

Figura 2. App Deep Network Designer muestra varias capas de una red en el panel Designer.

El rendimiento de una red de Deep Learning depende en gran medida de los parámetros que rigen su entrenamiento y los que describen su arquitectura de red. Entre algunos de los ejemplos de hiperparámetros se encuentran el ritmo de aprendizaje, el tamaño del lote, el número de capas, el tipo de capas y las conexiones entre capas. Un ajuste adecuado de hiperparámetros puede generar modelos con mayor precisión y mejor rendimiento, incluso en los entornos con recursos limitados en los que se ejecutan las aplicaciones de tinyML. Sin embargo, seleccionar y ajustar valores de hiperparámetros para encontrar la combinación que optimice el rendimiento puede ser una tarea difícil que requiere mucho tiempo.

La optimización bayesiana es adecuada para la optimización de hiperparámetros de redes de Deep Learning de clasificación y regresión porque explora de manera eficiente el espacio de hiperparámetros de alta dimensión para encontrar configuraciones óptimas o casi óptimas. Con MATLAB, un desarrollador de Machine Learning puede utilizar la función bayesopt para encontrar los mejores valores de hiperparámetros con una optimización bayesiana. Por ejemplo, puede proporcionar un conjunto de hiperparámetros que se van a evaluar, como número de capas convolucionales, tasa de aprendizaje inicial, impulso y regularización L2, así como la función objetivo, que se desea minimizar, como el error de validación. La función puede utilizar los resultados de bayesopt para seleccionar uno o más conjuntos de configuraciones de hiperparámetros para explorar más a fondo en las siguientes fases del flujo de trabajo.

Destilación de conocimiento

Los dispositivos integrados con recursos limitados tienen memoria limitada disponible. La destilación de conocimiento es un enfoque para reducir la superficie de una red de Deep Learning manteniendo un alto nivel de precisión. Esta técnica utiliza una red de enseñanza de gran tamaño y precisión para enseñar a una red de aprendizaje de menos tamaño a realizar predicciones. La clave es seleccionar funciones de pérdida en las arquitecturas de redes de enseñanza-aprendizaje.

Las redes entrenadas en los pasos anteriores se pueden utilizar como modelo de enseñanza. Una red de aprendizaje es una versión más pequeña pero similar del modelo de enseñanza. Normalmente, el modelo de aprendizaje contiene menos bloques convolución-batchnorm-ReLU. Para compensar la reducción de dimensión, se agregan capas de agrupación máxima o agrupación promedio global en la red de aprendizaje. Estas modificaciones reducen significativamente el número de elementos que se deben aprender en comparación con la red de enseñanza.

Se debe definir una función de pérdida de destilación de conocimiento para entrenar la red de aprendizaje. Se determina a partir de la entrada de la red de aprendizaje, la red de enseñanza, los datos de entrada con un objetivo correspondiente y el hiperparámetro de temperatura. Empíricamente, la función de pérdida consiste en un promedio ponderado de 1) la pérdida dura, que es la pérdida de entropía cruzada entre las salidas de la red de aprendizaje y la etiqueta verdadera; y 2) la pérdida blanda, que es la pérdida de entropía cruzada de SoftMax con la temperatura entre los logits de la red de aprendizaje y los de la red de enseñanza.

La red de aprendizaje entrenada preserva mejor la precisión de la red de enseñanza y logra una reducción en los parámetros que se pueden aprender, lo que la hace más adecuada para su despliegue en dispositivos integrados.

Compresión y optimización de modelos

El diseño eficiente y la optimización de hiperparámetros durante la fase de entrenamiento es un primer paso esencial; sin embargo, no es suficiente para garantizar el despliegue en dispositivos edge. Por lo tanto, la optimización posterior al entrenamiento a través de la poda y cuantificación de modelos es importante para reducir aún más el uso de memoria y los requisitos computacionales de una red neuronal profunda.

Uno de los métodos más efectivos de compresión de red es la cuantificación. Esto se debe a que los datos se adquieren con precisión entera, ya que ningún sensor de gran volumen genera representaciones de punto flotante. Con la cuantificación, el objetivo es reducir el uso de memoria necesaria para almacenar los parámetros de la red y aumentar la velocidad de cálculo representando los pesos y las activaciones del modelo con un número reducido de bits. Esto puede implicar, por ejemplo, reemplazar números de punto flotante de 32 bits por números enteros de 8 bits, siempre que sea posible, aceptando solo una degradación marginal en la precisión de las predicciones. La cuantificación permite un uso moderado de la memoria integrada, vital para sensores, microcontroladores y microprocesadores con recursos edge limitados (Figura 3). Además, las operaciones con números enteros suelen ser más rápidas en hardware que las operaciones de punto flotante, lo que genera un aumento en el rendimiento de inferencia en los microcontroladores. Esto hace que los modelos consuman menos energía y sean más adecuados para su despliegue en dispositivos alimentados por baterías o con limitaciones energéticas, como teléfonos móviles y dispositivos IoT. Si bien se supone que la cuantificación posterior al entrenamiento introduce algunas pérdidas de precisión, las herramientas de cuantificación en MATLAB están diseñadas para minimizar el impacto en la precisión del modelo. Se utilizan técnicas como el ajuste fino y la calibración para mantener el rendimiento del modelo cuantificado. En MATLAB, la función dlquantizer simplifica el proceso de cuantificación de pesos, sesgos y activaciones de una red neuronal profunda en valores enteros de 8 bits.

Gráfico que muestra los niveles de memoria de parámetros necesarios para el modelo original, podado y cuantificado.

Figura 3. Uso de memoria de una red neuronal profunda después de la poda y cuantificación en MATLAB.

Las técnicas de poda, por el contrario, se centran en reducir la complejidad de una red minimizando la redundancia operativa. Esto es fundamental para reducir drásticamente la complejidad computacional. La idea es identificar y eliminar aquellas conexiones, pesos, filtros o capas enteras que tienen poca repercusión en las predicciones de la red. La proyección es una técnica patentada de MATLAB que se utiliza para optimizar redes neuronales eliminando selectivamente pesos o conexiones menos importantes. Este proceso reduce la complejidad del modelo, lo que da como resultado un tamaño de modelo más pequeño y tiempos de inferencia más rápidos sin afectar significativamente el rendimiento. Si bien la poda regular generalmente implica una eliminación sencilla basada en umbrales de pesos de baja magnitud, la proyección puede incorporar criterios y métodos más sofisticados para garantizar que se preserven las características esenciales de la red. Además, la proyección a menudo tiene como objetivo mantener las propiedades geométricas del espacio de peso, lo que conduce a modelos potencialmente más eficientes y robustos en comparación con los métodos de poda tradicionales.

Evaluación de rendimiento de ST Edge AI Developer Cloud

Después de completar el diseño de red inicial, la optimización de hiperparámetros, la destilación y la compresión en MATLAB, el siguiente paso en el flujo de trabajo es evaluar el rendimiento del diseño en un microcontrolador o microprocesador. Se deben evaluar los requisitos de flash y RAM de la red, y la velocidad de inferencia, entre otros factores.

ST Edge AI Developer Cloud está diseñado para optimizar esta etapa del flujo de trabajo a través de una evaluación de rendimiento rápida de las redes en los dispositivos ST Edge. Para utilizar este servicio con una aplicación de tinyML desarrollada en MATLAB, primero debe exportar la red al formato ONNX. Después de cargar el archivo ONNX generado en ST Edge AI Developer Cloud, se selecciona uno o más dispositivos ST en los que se van a ejecutar evaluación de rendimiento (Figura 4).

Interfaz de ST Edge AI Developer Cloud que muestra varias opciones de dispositivos ST para elegir.

Figura 4. Dispositivos disponibles para evaluación de rendimiento en la interfaz gráfica de ST Edge AI Developer Cloud.

Una vez completada la evaluación de rendimiento, ST Edge AI Developer Cloud proporciona un informe que detalla los resultados (Figura 5). Las herramientas de análisis de rendimiento proporcionadas por ST Edge AI Developer Cloud ofrecen información detallada sobre el uso de memoria, la velocidad de procesamiento, la utilización de recursos, la precisión del modelo, y el consumo de memoria RAM y flash, con un desglose de la asignación de memoria para las diferentes capas y componentes del modelo. Además, las herramientas proporcionan el tiempo de ejecución de cada capa y el tiempo de inferencia general, junto con un análisis de tiempo detallado para identificar y optimizar operaciones lentas. Las estadísticas de utilización de recursos, el uso de CPU y acelerador de hardware, así como las métricas de consumo de energía, ayudan a optimizar la eficiencia energética.

Informe de ST Edge AI Developer Cloud que muestra los resultados de una evaluación de rendimiento.

Figura 5. Resultados de una evaluación de rendimiento típica en ST Edge AI Developer Cloud.

Luego de revisar los resultados de rendimiento, se pueden identificar mejor los próximos pasos a seguir. Si el diseño de la red se adapta cómodamente a las limitaciones de un dispositivo edge determinado con tiempos de inferencia bajos, se puede probar utilizar un dispositivo más pequeño o aumentar la precisión de la predicción con una red más grande y compleja. Por otro lado, si el diseño de red es demasiado grande y genera tiempos de inferencia lentos debido al uso de RAM o flash externo, se puede considerar un dispositivo computacionalmente más potente con más Flash y RAM integrados. O realizar iteraciones adicionales de optimización de hiperparámetros, destilación de conocimiento, poda y cuantificación con MATLAB para comprimir aún más la red. ST Edge AI Developer Cloud también ofrece generación de código automatizada para agilizar el despliegue de modelos de IA en dispositivos ST. Esta funcionalidad convierte modelos de IA entrenados en código C optimizado compatible con los sensores, microcontroladores y microprocesadores de STMicroelectronics.

De la evaluación de rendimiento al despliegue

El paso final del flujo de trabajo es el despliegue en un sensor, microcontrolador o microprocesador. Con los resultados de evaluación de rendimiento, ingenieros pueden seleccionar la plataforma indicada, como STM32 Discovery Kit para evaluar un aplicación de tinyML en hardware real, por ejemplo.

Dependiendo de la aplicación, puede ser necesario integrar la red neuronal profunda con otros componentes, como un controlador, e incorporarlos a un sistema más grande antes del despliegue. Para estos casos prácticos, el flujo de trabajo se puede extender aún más y modelar los otros componentes en Simulink, ejecutar simulaciones en nivel de sistema para validar el diseño y generar código C/C++ para su despliegue en dispositivos STM32 con Embedded Coder® y el paquete de soporte de Embedded Coder para STM32.

Publicado en 2024

Artículos sobre prestaciones afines

Artículos sobre industrias afines