Capítulo 1. Introducción Introducción

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

El objetivo de este libro es mostrar cómo cualquier desarrollador con experiencia básica en el uso de un terminal de línea de comandos y un editor de código puede empezar a construir sus propios proyectos que ejecuten aprendizaje automático (ML) en dispositivos embebidos.

Cuando me incorporé a Google en 2014, descubrí un montón de proyectos internos que no tenía ni idea de que existían, pero el más emocionante fue el trabajo que estaba haciendo el equipo de OK Google. Ejecutaban redes neuronales de sólo 14 kilobytes (KB) de tamaño. Tenían que ser tan pequeñas porque se ejecutaban en los procesadores de señales digitales (DSP) presentes en la mayoría de los teléfonos Android, escuchando continuamente las palabras de activación de "OK Google", y estos DSP sólo tenían decenas de kilobytes de RAM y memoria flash. El equipo tuvo que utilizar los DSP para este trabajo porque la CPU principal estaba apagada para ahorrar batería, y estos chips especializados sólo consumen unos pocos milivatios (mW) de potencia.

Viniendo del lado de la imagen del aprendizaje profundo, nunca había visto redes tan pequeñas, y la idea de que se pudieran utilizar chips de tan bajo consumo para ejecutar modelos neuronales se me quedó grabada. Mientras trabajaba en conseguir que TensorFlow y más tarde TensorFlow Lite funcionaran en dispositivos Android e iOS, seguía fascinado por las posibilidades de trabajar incluso con chips sencillos. Me enteré de que había otros proyectos pioneros en el mundo del audio (como el Music IQ de Pixel) para el mantenimiento predictivo (como PsiKick) e incluso en el mundo de la visión (el módulo de cámara Glance de Qualcomm).

Me quedó claro que estaba surgiendo toda una nueva clase de productos, con las características clave de que utilizaban ML para dar sentido a los ruidosos datos de los sensores, podían funcionar utilizando una batería o la captación de energía durante años, y costaban sólo uno o dos dólares. Un término que oí repetidamente era "sensores de despegar y pegar", para dispositivos que no requerían cambios de batería y podían aplicarse en cualquier lugar de un entorno y olvidarse. Para que estos productos fueran reales, se necesitaban formas de convertir los datos brutos de los sensores en información procesable a nivel local, en el propio dispositivo, ya que los costes energéticos de transmitir flujos a cualquier parte han demostrado ser inherentemente demasiado altos para ser prácticos.

Aquí es donde surge la idea de TinyML. Largas conversaciones con colegas de la industria y el mundo académico han llevado al consenso general de que si puedes hacer funcionar un modelo de red neuronal con un coste energético inferior a 1 mW, esto hace posibles un montón de aplicaciones totalmente nuevas. Puede parecer una cifra un tanto arbitraria, pero si la traduces a términos concretos, significa que un dispositivo que funcione con una pila de botón tiene una vida útil de un año. El resultado es un producto lo bastante pequeño como para encajar en cualquier entorno y capaz de funcionar durante un tiempo útil sin intervención humana .

Nota

Voy a pasar directamente a utilizar algunos términos técnicos para hablar de lo que tratará este libro, pero no te preocupes si algunos de ellos no te resultan familiares; definiremos su significado la primera vez que los utilicemos.

Llegados a este punto, puede que te estés preguntando por plataformas como la Raspberry Pi, o las placas Jetson de NVIDIA. Son dispositivos fantásticos, y yo mismo los utilizo con frecuencia, pero incluso la Pi más pequeña es similar a la CPU principal de un teléfono móvil, por lo que consume cientos de milivatios. Mantener uno en funcionamiento incluso durante unos días requiere una batería similar a la de un smartphone, lo que dificulta la creación de experiencias verdaderamente libres. El Jetson de NVIDIA se basa en una potente GPU, y hemos visto que consume hasta 12 vatios cuando funciona a toda velocidad, por lo que es aún más difícil de usar sin una gran fuente de alimentación externa. Esto no suele ser un problema en aplicaciones de automoción o robótica, ya que las piezas mecánicas exigen por sí mismas una gran fuente de alimentación, pero sí dificulta el uso de estas plataformas para el tipo de productos que más me interesan, que necesitan funcionar sin una fuente de alimentación cableada. Afortunadamente, cuando se utilizan, la falta de limitaciones de recursos significa que están disponibles marcos de trabajo como TensorFlow, TensorFlow Lite y TensorRT de NVIDIA, ya que suelen basarse en CPUs Arm Cortex-A compatibles con Linux, que tienen cientos de megabytes de memoria. Este libro no se centrará en describir cómo ejecutarlo en esas plataformas por la razón que acabamos de mencionar, pero si te interesa, hay muchos recursos y documentación disponibles; por ejemplo, consulta la documentación para móviles de TensorFlow Lite.

Otra característica que me importa es el coste. El Raspberry Pi Zero más barato de cuesta 5 $ para los fabricantes, pero es extremadamente difícil comprar esa clase de chip en grandes cantidades a ese precio. Las compras de la Zero suelen estar restringidas por cantidad, y aunque los precios de las compras industriales no son transparentes, está claro que 5 $ es definitivamente inusual. En cambio, los microcontroladores de 32 bits más baratos cuestan mucho menos de un dólar cada uno. Este bajo precio ha hecho posible que los fabricantes sustituyan los circuitos de control analógicos o electromecánicos tradicionales por alternativas definidas por software para todo, desde juguetes a lavadoras. Espero que podamos utilizar la ubicuidad de los microcontroladores en estos dispositivos para introducir la inteligencia artificial como una actualización del software, sin necesidad de hacer muchos cambios en los diseños existentes. También debería hacer posible la implementación de un gran número de sensores inteligentes en entornos como edificios o reservas naturales sin que los costes superen los beneficios o los fondos disponibles.

Dispositivos integrados

La definición de TinyML como aquel que tiene un coste energético inferior a 1 mW significa que tenemos que mirar hacia el mundo de los dispositivos integrados para nuestras plataformas de hardware. Hasta hace unos años, yo mismo no estaba familiarizado con ellos: para mí estaban envueltos en el misterio. Tradicionalmente habían sido dispositivos de 8 bits y utilizaban cadenas de herramientas oscuras y propietarias, por lo que parecía muy intimidante empezar con cualquiera de ellos. Se dio un gran paso adelante cuando Arduino introdujo un entorno de desarrollo integrado (IDE) fácil de usar, junto con un hardware estandarizado. Desde entonces, las CPU de 32 bits se han convertido en el estándar, en gran parte gracias a la serie de chips Cortex-M de Arm. Cuando empecé a crear prototipos de algunos experimentos de ML hace un par de años, me sorprendió gratamente lo relativamente sencillo que se había vuelto el proceso de desarrollo.

Sin embargo, los dispositivos integrados siguen teniendo algunas limitaciones de recursos. A menudo sólo tienen unos cientos de kilobytes de RAM, o a veces mucho menos que eso, y disponen de cantidades similares de memoria flash para el almacenamiento persistente de programas y datos. Una velocidad de reloj de sólo decenas de megahercios no es inusual. Definitivamente no tendrán Linux completo (ya que eso requiere un controlador de memoria y al menos un megabyte de RAM), y si hay un sistema operativo, es muy posible que no proporcione todas o ninguna de las funciones POSIX o de la biblioteca C estándar que esperas. Muchos sistemas embebidos evitan utilizar funciones de asignación dinámica de memoria como new o malloc() porque están diseñadas para ser fiables y de larga duración, y es extremadamente difícil garantizarlo si tienes un montón que puede fragmentarse. También puede resultarte difícil utilizar un depurador u otras herramientas familiares del desarrollo de escritorio, ya que las interfaces que utilizarás para acceder al chip son muy especializadas.

Sin embargo, me llevé algunas sorpresas agradables al aprender el desarrollo embebido. Tener un sistema sin otros procesos que interrumpan tu programa puede hacer que construir un modelo mental de lo que ocurre sea muy sencillo, y la naturaleza directa de un procesador sin predicción de bifurcaciones ni canalización de instrucciones hace que la optimización manual en ensamblador sea mucho más fácil que en CPU más complejas. También me alegra ver cómo se encienden los LED de un ordenador en miniatura que puedo equilibrar con la punta del dedo, sabiendo que está ejecutando millones de instrucciones por segundo para comprender el mundo que le rodea.

Paisaje cambiante

Hace muy poco que podemos ejecutar ML en microcontroladores, y este campo es muy joven, lo que significa que el hardware, el software y la investigación cambian muy rápidamente. Este libro se basa en una instantánea del mundo tal y como existía en 2019, lo que en este ámbito significa que algunas partes estaban desfasadas incluso antes de que hubiéramos terminado de escribir el último capítulo. Hemos intentado asegurarnos de que nos basamos en plataformas de hardware que estarán disponibles a largo plazo, pero es probable que los dispositivos sigan mejorando y evolucionando. El marco de software TensorFlow Lite que utilizamos tiene una API estable, y seguiremos dando soporte a los ejemplos que damos en el texto a lo largo del tiempo, pero también proporcionamos enlaces web a las versiones más recientes de todo nuestro código de muestra y documentación. Puedes esperar que se añadan al repositorio de TensorFlow, por ejemplo, aplicaciones de referencia que cubran más casos de uso de los que tenemos en este libro. También pretendemos centrarnos en habilidades como la depuración, la creación de modelos y el desarrollo de la comprensión del funcionamiento del aprendizaje profundo, que seguirán siendo útiles aunque cambie la infraestructura que utilizas.

Queremos que este libro te proporcione la base que necesitas para desarrollar productos de ML embebido que resuelvan los problemas que te preocupan. Esperamos poder iniciarte en el camino de la construcción de algunas de las nuevas y apasionantes aplicaciones que, estoy seguro, surgirán en los próximos años en este ámbito.

Get TinyML now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.