Inicio Artículos Inteligencia Artificial en el “Edge”

Inteligencia Artificial en el “Edge”

Introducción
Recientemente, el aprendizaje automático y las redes neuronales se han aplicado con éxito en soluciones de visión artificial para la clasificación y el reconocimiento de objetos, así como para la segmentación de imágenes. Además, las aplicaciones incluyen reconocimiento de voz, procesamiento del lenguaje natural, análisis de datos de sensores y mantenimiento predictivo, por mencionar algunas. Las redes neuronales que precisan cantidades ingentes de datos para entrenar suelen desplegarse en entornos en la nube, centros de datos y servidores con tarjetas de aceleración. Recientemente, se han empezado a implementar los modelos de aprendizaje automático en dispositivos del Internet de las Cosas.
La capacidad computacional de los dispositivos integrados ha ido en constante aumento, mientras que el coste se ha reducido. Por eso, ahora se pueden usar dispositivos mucho más sofisticados en aplicaciones punteras. A menudo, tienen suficiente capacidad como para ejecutar redes neuronales. Por otro lado, el software moderno es compatible con dichas redes y hay motores de inferencia optimizados para dispositivos integrados. En la actualidad, la mayoría de los fabricantes de sistemas integrados ya pueden o están pensando en añadir bloques IP dedicados dentro de sus sistemas en chip para acelerar las redes neuronales artificiales y ofrecer BSP (paquetes de asistencia de la placa) optimizados con compatibilidad inmediata de aprendizaje automático. La necesidad de aceleradores de inteligencia artificial ya no se limita a los servidores y ecosistemas de centros de datos, sino que se ha convertido en una necesidad real también en los mercados de móviles y de elementos integrados.
Redes neuronales convolucionales (CNN)
Posiblemente, el tipo más conocido de redes que se emplea en la actualidad son las redes neuronales convolucionales (CNN) que han encontrado aplicaciones para una serie de implementaciones de vanguardia y sin precedentes. En la imagen se muestra una estructura sencilla de CNN. La operación de convolución se utiliza para extraer las características de los datos de entrada, a menudo de imágenes. Para este fin, se aplica un filtro móvil (kernel) a los datos de entrada, es decir, se calcula el producto escalar del kernel y los píxeles de entrada. Todas las capas con parámetros (convolucionales, completamente conectadas) suelen ir seguidas de una capa de función de activación, por ejemplo, unidad lineal rectificada (ReLU). Las capas de reducción se introducen tras las capas paramétricas cuya función es conseguir la invariancia espacial al reducir la resolución de los mapas de características. Las capas de reducción más utilizadas son las operaciones de máximo y promedio.
Limitaciones del sistema
Los sistemas integrados comparten algunas limitaciones con otros sistemas digitales. Sin embargo, estos dispositivos presentan ciertas necesidades y requisitos concretos con mayor peso que en el caso de servidores o dispositivos de sobremesa. En esta sección, se debaten dichas limitaciones, teniendo en cuenta algoritmos de aprendizaje automático.
Consumo de energía
El objetivo de diseño consiste en minimizar el consumo de energía y mantener la fiabilidad y la eficiencia del sistema. Los sistemas integrados permiten sofisticados modos de ahorro energético con estados de suspensión profunda (deep sleep) para reducir el consumo energético. Sólo se reactivan periódicamente para realizar ciertas tareas y, luego, vuelven a suspenderse. De este modo, cuando más dure la tarea y mayor sea la frecuencia de reactivación, mayor será el tiempo total que el sistema está en modo de alto consumo. En el caso de las redes neuronales, la complejidad del modelo y el gasto computacional se correlacionan con el tiempo que se tarda en completar la propagación hacia delante.
Memoria
La ocupación de memoria es un parámetro importante para las plataformas integradas que a menudo sólo tienen un tamaño de memoria limitado. Se utilizan memorias no volátiles, por lo general, como memoria flash SPI o en chip, para guardar el código de la aplicación. Las memorias volátiles se utilizan para guardar variables y cargar el código para ejecutar (excepto con la ejecución in situ). Es poco habitual que un sistema ejecute sólo algoritmos de aprendizaje automático. Debe alojar componentes como pila de redes, sistema operativo, controladores y buffers. El tiempo de acceso a memoria y caché del procesador tienen un impacto significativo en el rendimiento general del sistema. La CPU (unidad de procesamiento central) puede ahogarse si está esperando por instrucciones o datos. Según la arquitectura, los procesadores integrados pueden tener un tamaño de caché limitado. La conectividad de red ha sido clave para que surja el Internet de las Cosas. En un sistema típico con aprendizaje automático, los dispositivos edge recogen y comparten datos con la nube, donde se analizan con mayor detenimiento. Sin embargo, no siempre es posible o fiable porque ciertas zonas podrían tener cobertura de red limitada. En algunos casos, podría ser razonable procesar los datos localmente y enviar sólo los resultados finales para ahorrar consumo de red. Cabe destacar también que reactivar un sistema, establecer una conexión con una nube y enviar datos para recibir una respuesta podría consumir más que procesar los datos localmente.
Rendimiento
Por lo general, más capas de redes neuronales equivalen a mayor capacidad y precisión del modelo. No obstante, se está investigando para crear modelos altamente optimizados en cuanto a rendimiento y requisitos de memoria, que sigan siendo muy precisos. El tiempo de inferencia, es decir lo que se tarda en calcular una predicción o clasificación, depende en gran medida de la frecuencia del núcleo, la paralelización y el conjunto de instrucciones. Cuanto mayor sea la frecuencia, menor será el tiempo de inferencia. En la actualidad, en muchos casos, se suele decir que el acceso a memoria es el cuello de botella que inhibe el rendimiento de las redes neuronales y hace que las unidades de procesamiento o aceleradores se detengan mientras esperan a que se recuperen o carguen los datos. La memoria caché es la más próxima a la CPU y maximizar su uso, a la vez que se minimizan las pérdidas de caché, suele ser crucial para conseguir un alto rendimiento. La cuestión clave es que el sistema debería adaptarse para que el acceso a memoria concuerde con la frecuencia de procesamiento y las capacidades del sistema.
Motores de inferencia
Los frameworks de aprendizaje profundo son herramientas empleadas para crear, entrenar y ejecutar redes neuronales. La proliferación de frameworks de aprendizaje profundo ha supuesto la optimización de estas tareas en sistemas basados en la nube. Existe una gran cantidad de modelos pre-entrenados disponibles en los denominados «zoos de modelos» que pueden usarse directamente para tareas genéricas o como eje troncal (p. ej., extractores de características) para redes neuronales especializadas. No obstante, al igual que resulta sencillo desplegar un modelo entrenado mediante un sistema con arquitectura x86 con unidad de procesamiento gráfico, no es tan fácil emplear el mismo modelo para un microcontrolador. Para resolver esta cuestión, se han desarrollado una serie de soluciones de software denominadas motores de inferencia. En esencia, son librerías con funciones o kernels optimizados destinados a plataformas de hardware, teniendo en cuenta que los microcontroladores integrados cuentan con recursos limitados.
Redes neuronales CMSIS
CMSIS es una de las extensiones más recientes que pretende acelerar las redes neuronales mediante instrucciones DSP. Se trata de instrucciones SIMD (una instrucción, múltiples datos) que funcionan en un vector de datos. Los microcontroladores ARM son de 32 bits, por lo que cada instrucción funciona realmente en un vector de cuatro muestras de 8 bits o dos muestras de 16 bits. Básicamente, CMSIS es una librería de kernels de redes neuronales que se pueden invocar directamente en una aplicación. La topología del modelo se implementa pasando buffers de entrada y salida entre capas consecutivas, a la vez que se asignan pesos en un archivo de encabezado con tablas de parámetros.
TensorFlow Lite
TensorFlow es uno de los frameworks de aprendizaje profundo de código libre más populares, desarrollado por Google. Proporciona métodos para crear y entrenar modelos, incluyendo interfaces frontend como Keras y Gradient Tape. TensorFlow Lite es una versión abreviada compatible sólo la propagación hacia delante, es decir, infiere sólo a partir de los datos de entrada.
Glow
Glow es un compilador de aprendizaje automático que, si recibe un gráfico computacional de operaciones como entrada, compila un código optimizado para el hardware en cuestión. Está diseñado para usarse como motor de inferencia que aprovecha la aceleración de hardware disponible. Glow utiliza un planteamiento en dos fases, con representación intermedia (RI). A partir de RI de alto nivel, realiza optimizaciones específicas del dominio (p. ej. relacionadas con aprendizaje automático) seguidas de RI de bajo nivel con instrucciones de ensamblaje y referencias sólo-dirección para optimizar el uso de memoria al eliminar operaciones de copia, asignar memoria estadísticamente y reorganizar las operaciones. Después, la fase final consiste en compilar el código máquina que aprovecha características del hardware para la aceleración.
Conclusión
Los sistemas integrados se parecen a cualquier sistema digital con unidad de procesamiento y dominio de memoria. Sin embargo, existen ciertas consideraciones que son más importantes para los dispositivos limitados que para los servidores y los sistemas de alta gama. Deben tenerse en cuenta la huella de memoria, la eficiencia energética y el tiempo de procesamiento. La clave del rendimiento y la eficiencia energética consiste en calibrar las capacidades de procesamiento con el acceso a memoria y la disponibilidad de datos, para que ninguna se vea estancada innecesariamente. Para obtener un alto rendimiento, es preciso utilizar instrucciones DSP u otros métodos para operar con múltiples muestras de datos al mismo tiempo.