Los modelos personalizados de aprendizaje profundo pueden permitir chatbots de inteligencia artificial que se adapten para comprender el acento de un usuario o teclados inteligentes que se actualicen continuamente para predecir mejor la siguiente palabra según el historial de escritura de alguien. Esta personalización requiere un ajuste constante de un modelo de aprendizaje automático con nuevos datos.
Debido a que los teléfonos inteligentes y otros dispositivos periféricos carecen de la memoria y la potencia computacional necesarias para este proceso de ajuste, los datos del usuario generalmente se cargan en servidores en la nube donde se actualiza el modelo. Pero la transmisión de datos consume una gran cantidad de energía y enviar datos confidenciales del usuario a un servidor en la nube representa un riesgo para la seguridad.
Investigadores del MIT, el MIT-IBM Watson AI Lab y otros lugares desarrollaron una técnica que permite que los modelos de aprendizaje profundo se adapten de manera eficiente a nuevos datos de sensores directamente en un dispositivo de borde.
Su método de entrenamiento en el dispositivo, llamado PockEngine, determina qué partes de un enorme modelo de aprendizaje automático deben actualizarse para mejorar la precisión, y solo almacena y calcula esas partes específicas. Realiza la mayor parte de estos cálculos mientras se prepara el modelo, antes del tiempo de ejecución, lo que minimiza la sobrecarga computacional y aumenta la velocidad del proceso de ajuste.
En comparación con otros métodos, PockEngine aceleró significativamente el entrenamiento en el dispositivo, funcionando hasta 15 veces más rápido en algunas plataformas de hardware. Además, PockEngine no provocó que los modelos tuvieran ninguna caída en la precisión. Los investigadores también descubrieron que su método de ajuste permitió que un popular chatbot de IA respondiera preguntas complejas con mayor precisión.
“El ajuste en el dispositivo puede permitir una mayor privacidad, menores costos, capacidad de personalización y también aprendizaje permanente, pero no es fácil. Todo tiene que suceder con un número limitado de recursos. Queremos poder ejecutar no solo inferencia sino también entrenamiento en un dispositivo de borde. Con PockEngine, ahora podemos”, dice Song Han, profesor asociado en el Departamento de Ingeniería Eléctrica y Ciencias de la Computación (EECS), miembro del Laboratorio de IA Watson del MIT-IBM, científico distinguido de NVIDIA y autor principal de un artículo. Documento de acceso abierto que describe PockEngine.
A Han se une en el artículo el autor principal Ligeng Zhu, un estudiante graduado de EECS, así como otros en el MIT, el Laboratorio de IA Watson del MIT-IBM y la Universidad de California en San Diego. El artículo se presentó recientemente en el Simposio Internacional sobre Microarquitectura IEEE/ACM.
Capa por capa
Los modelos de aprendizaje profundo se basan en redes neuronales, que comprenden muchas capas interconectadas de nodos, o “neuronas”, que procesan datos para hacer una predicción. Cuando se ejecuta el modelo, se produce un proceso llamado inferencia, una entrada de datos (como una imagen) se pasa de una capa a otra hasta que la predicción (quizás la etiqueta de la imagen) se genera al final. Durante la inferencia, ya no es necesario almacenar cada capa después de procesar la entrada.
Pero durante el entrenamiento y el ajuste, el modelo pasa por un proceso conocido como retropropagación. En la propagación hacia atrás, el resultado se compara con la respuesta correcta y luego el modelo se ejecuta a la inversa. Cada capa se actualiza a medida que la salida del modelo se acerca a la respuesta correcta.
Debido a que es posible que sea necesario actualizar cada capa, se debe almacenar todo el modelo y los resultados intermedios, lo que hace que el ajuste requiera más memoria que la inferencia.
Sin embargo, no todas las capas de la red neuronal son importantes para mejorar la precisión. E incluso para las capas que son importantes, es posible que no sea necesario actualizar toda la capa. No es necesario almacenar esas capas y trozos de capas. Además, es posible que no sea necesario volver a la primera capa para mejorar la precisión; el proceso podría detenerse en algún punto intermedio.
PockEngine aprovecha estos factores para acelerar el proceso de ajuste y reducir la cantidad de computación y memoria requerida.
El sistema primero ajusta cada capa, una a la vez, en una tarea determinada y mide la mejora de la precisión después de cada capa individual. De esta manera, PockEngine identifica la contribución de cada capa, así como las compensaciones entre precisión y costo de ajuste, y determina automáticamente el porcentaje de cada capa que necesita ajuste.
«Este método coincide muy bien con la precisión en comparación con la propagación completa hacia atrás en diferentes tareas y diferentes redes neuronales», añade Han.
Un modelo minimalista
Convencionalmente, el gráfico de retropropagación se genera durante el tiempo de ejecución, lo que implica una gran cantidad de cálculos. En cambio, PockEngine hace esto durante el tiempo de compilación, mientras el modelo se prepara para la implementación.
PockEngine elimina fragmentos de código para eliminar capas o fragmentos de capas innecesarios, creando un gráfico reducido del modelo que se utilizará durante el tiempo de ejecución. Luego realiza otras optimizaciones en este gráfico para mejorar aún más la eficiencia.
Dado que todo esto sólo debe hacerse una vez, ahorra gastos computacionales durante el tiempo de ejecución.
“Es como antes de emprender una excursión. En casa, harías una planificación cuidadosa: qué senderos vas a seguir, qué senderos vas a ignorar. Entonces, en el momento de la ejecución, cuando realmente estás caminando, ya tienes un plan muy cuidadoso a seguir”, explica Han.
Cuando aplicaron PockEngine a modelos de aprendizaje profundo en diferentes dispositivos periféricos, incluidos los chips Apple M1 y los procesadores de señales digitales comunes en muchos teléfonos inteligentes y computadoras Raspberry Pi, realizó el entrenamiento en el dispositivo hasta 15 veces más rápido, sin ninguna pérdida de precisión. PockEngine también redujo significativamente la cantidad de memoria necesaria para realizar ajustes.
El equipo también aplicó la técnica al modelo de lenguaje grande Llama-V2. Con modelos de lenguaje grandes, el proceso de ajuste implica proporcionar muchos ejemplos, y es crucial que el modelo aprenda cómo interactuar con los usuarios, dice Han. El proceso también es importante para los modelos encargados de resolver problemas complejos o razonar sobre soluciones.
Por ejemplo, los modelos Llama-V2 que fueron ajustados usando PockEngine respondieron a la pregunta «¿Cuál fue el último álbum de Michael Jackson?» correctamente, mientras que los modelos que no fueron ajustados fallaron. PockEngine redujo el tiempo necesario para cada iteración del proceso de ajuste de unos siete segundos a menos de un segundo en una NVIDIA Jetson Orin, una plataforma GPU de vanguardia.
En el futuro, los investigadores quieren utilizar PockEngine para ajustar modelos aún más grandes diseñados para procesar texto e imágenes juntos.
“Este trabajo aborda los crecientes desafíos de eficiencia que plantea la adopción de grandes modelos de IA, como los LLM, en diversas aplicaciones en muchas industrias diferentes. No sólo es prometedor para aplicaciones de borde que incorporan modelos más grandes, sino también para reducir el costo de mantener y actualizar grandes modelos de IA en la nube”, dice Ehry MacRostie, gerente senior de la división de Inteligencia General Artificial de Amazon que no participó en este estudio. pero trabaja con el MIT en investigaciones relacionadas con la IA a través del MIT-Amazon Science Hub.
Este trabajo fue apoyado, en parte, por el MIT-IBM Watson AI Lab, el MIT AI Hardware Program, el MIT-Amazon Science Hub, la National Science Foundation (NSF) y la Qualcomm Innovation Fellowship.