Inteligencia Artificial Verde Métodos y Soluciones para Mejorar la Sostenibilidad de la IA

Green Artificial Intelligence Methods and Solutions for Improving AI Sustainability

Una mirada técnica a un tema que se ha demorado mucho

Foto de Benjamin Davies en Unsplash

Introducción

Si has abierto este artículo, probablemente has oído hablar de la controversia actual sobre la seguridad y confiabilidad de los modelos de lenguaje grandes (LLM, por sus siglas en inglés). La carta abierta firmada por nombres conocidos en el mundo de la informática como Steve Wozniak, Gary Marcus y Stuart Russell presentó sus preocupaciones sobre este tema y pidió una pausa de 6 meses en la formación de LLM. Pero hay otro tema que está ganando lentamente mucha atención, lo que quizás motive otra carta abierta en un futuro cercano: el consumo de energía y la huella de carbono de la formación e inferencia de modelos de IA.

Se estima que solo la formación del modelo GPT-3 popular, un LLM de 175 mil millones de parámetros, emitió aproximadamente 502 toneladas de CO2 [1]. Incluso hay calculadoras en línea disponibles para estimar las emisiones de formación de un modelo en particular. Pero el paso de formación no es el único que consume energía. Después de la formación, durante la fase de inferencia, se ejecuta un modelo de IA miles o millones de veces al día. Incluso si cada ejecución consume una pequeña cantidad de energía, el consumo acumulado durante semanas, meses y años puede convertirse en un problema enorme.

Es por eso que el concepto de IA verde está ganando cada vez más popularidad. Su principal enfoque es encontrar soluciones y desarrollar técnicas para mejorar la sostenibilidad de la IA, reduciendo su consumo de energía y su huella de carbono. En este artículo, mi objetivo es presentar una visión general de algunas técnicas y metodologías que se están investigando activamente, que se pueden utilizar para mejorar este concepto, y que no se discuten normalmente de manera accesible. Al final de este artículo, encontrarás recursos y referencias relacionados con los temas discutidos.

Aunque este artículo se centra en las metodologías técnicas que permiten ahorrar energía al implementar algoritmos de IA, es importante tener una comprensión general de ellos incluso si no eres un investigador. ¿Eres la persona responsable de entrenar el algoritmo de IA de tu empresa? Bueno, quizás puedas tener en cuenta algunas optimizaciones durante el entrenamiento que mejorarán el consumo de energía del algoritmo una vez implementado. ¿Eres quizás la persona responsable de seleccionar el hardware en el que se implementará tu algoritmo? Entonces, mantén los ojos abiertos a los conceptos mencionados en este artículo, ya que pueden ser una señal de hardware optimizado de vanguardia.

Conceptos básicos de la arquitectura informática

Para entender este artículo, es esencial tener una comprensión básica de la arquitectura informática y de cómo interactúan el software y el hardware. Este es un tema muy complejo, pero trataré de proporcionar un resumen rápido antes de entrar en la parte principal del artículo.

Probablemente has oído hablar del bit, la unidad de información más simple dentro de cualquier computadora, y la razón por la que existe el mundo digital. Los bits solo pueden tomar dos estados: 0 o 1. Un grupo de 8 bits se llama byte. Para los fines de este artículo, podemos pensar en cualquier arquitectura informática en términos de 2 componentes de hardware que manipulan y almacenan estos bytes: las unidades de computación y la memoria.

Las unidades de computación son las responsables de tomar un número de bytes como entrada y generar otro grupo de bytes como salida. Por ejemplo, si queremos multiplicar 7 x 6, insertaríamos los bytes que representan 7 en una de las entradas de un multiplicador y los bytes que representan 6 en la otra entrada. La salida del multiplicador nos daría los bytes que representan el número 42, el resultado de la multiplicación. Esta multiplicación lleva cierta cantidad de tiempo y energía hasta que el resultado está disponible en la salida del multiplicador.

La memoria es donde se almacenan los bytes para su uso futuro. Leer y escribir bytes desde la memoria (también llamado “acceder” a la memoria) lleva tiempo y energía. En la arquitectura informática, normalmente hay múltiples “niveles” en la jerarquía de memoria, con los que están más cerca de las unidades de computación teniendo los tiempos de acceso más rápidos y el menor consumo de energía por byte leído, y los que están más lejos siendo las memorias más lentas y que demandan más energía. La idea principal detrás de esta organización jerárquica de la memoria es la reutilización de datos. Los datos que se utilizan con mucha frecuencia se traen del último nivel de memoria al más cercano y se reutilizan tantas veces como sea posible. Este concepto se llama “caching”, y estas memorias más rápidas y cercanas se llaman cachés L1 y L2.

El software es responsable de orquestar el movimiento de datos desde la memoria hacia las unidades de computación, y luego almacenar los resultados en la memoria. Como tal, las decisiones de software realmente pueden afectar el consumo de energía de un sistema. Por ejemplo, si el software solicita datos que no están disponibles en la caché L1, el hardware primero necesita buscarlos en el nivel L2 o incluso en el último nivel, lo que conlleva retrasos de tiempo y un mayor consumo de energía.

Técnicas para la Inteligencia Artificial Verde

Ahora que se han establecido los conceptos básicos de la arquitectura informática, podemos centrarnos en las técnicas y metodologías específicas utilizadas en la Inteligencia Artificial Verde. Estas técnicas se dividen en dos categorías distintas:

  1. Optimizaciones de hardware, como el escalado de voltaje/frecuencia o la computación aproximada. Estas técnicas trabajan en el diseño físico real y las propiedades de los circuitos electrónicos.
  2. Optimizaciones de software, como la poda, la cuantificación, el ajuste fino y otras.

DVFS: Escalado dinámico de voltaje y frecuencia

El consumo de energía de los circuitos electrónicos de silicio estándar está directamente relacionado con el voltaje utilizado en el circuito y su frecuencia de trabajo. Bajo las mismas condiciones de funcionamiento, si se reduce alguno de estos parámetros, el consumo de energía también se reduce. ¿Podríamos aprovechar este comportamiento para hacer que la ejecución de algoritmos de IA sea más ecológica?

¡Por supuesto! Imagina que tienes un pequeño dispositivo integrado conectado a una batería, recibiendo múltiples solicitudes (cada una con su propia criticidad y restricciones), procesándolas con un algoritmo de IA y luego enviando los resultados de vuelta. Queremos que el procesamiento del algoritmo de IA consuma la menor cantidad de energía posible para que podamos mantener la batería funcionando el mayor tiempo posible, ¿verdad? ¿Podríamos cambiar dinámicamente el voltaje y la frecuencia de funcionamiento del dispositivo cuando lleguen tareas menos críticas y luego volverlos a las condiciones normales de funcionamiento cuando se necesiten procesar tareas críticas?

¡Dependiendo del dispositivo que ejecute el algoritmo de IA, esta es una opción completamente válida! De hecho, este es un campo de investigación activo. Si está interesado en leer más al respecto, le recomiendo que eche un vistazo a “AutoScale: Optimización de eficiencia energética para la inferencia de borde estocástico utilizando aprendizaje por refuerzo” de Kim [2] o “Inferencia colaborativa de múltiples agentes a través del desacoplamiento DNN: compresión de características intermedias y aprendizaje de borde” de Hao [3], que proporcionan buenos ejemplos de cómo esta técnica puede usarse para reducir el consumo de energía de los algoritmos de IA.

Computación aproximada

Cuando se ejecuta una operación matemática en una CPU o una GPU, normalmente esperamos obtener resultados exactos para el cálculo solicitado, ¿verdad? Este suele ser el caso cuando se utiliza hardware de consumo. Dado que la multiplicación es una de las operaciones matemáticas más utilizadas en un algoritmo de IA, esperamos obtener un resultado exacto al multiplicar dos números enteros y una aproximación muy buena al multiplicar dos números de punto flotante (esta aproximación suele ser tan precisa que no es un problema para los programas de usuario básicos). ¿Por qué considerar la posibilidad de insertar dos números enteros y NO obtener el resultado matemático correcto?

Pero en los últimos años se está investigando activamente un nuevo enfoque. La pregunta es simple: ¿hay alguna manera de diseñar multiplicadores más simples, que consuman menos área física y menos energía, sacrificando la precisión en el resultado de la multiplicación? Pero lo que es más importante, ¿se pueden usar estos nuevos multiplicadores en aplicaciones reales sin afectar significativamente su rendimiento? La respuesta a ambas preguntas es sí. Este es el paradigma informático conocido como computación aproximada.

¡Esto es absolutamente fascinante! Ya existen trabajos que presentan multiplicadores aproximados que pueden proporcionar resultados exactos para la multiplicación de dos enteros y que solo proporcionan resultados incorrectos para un número reducido de combinaciones de entrada, pero que pueden proporcionar reducciones de energía del orden del 20% para la ejecución de modelos completos. Si está interesado en esta increíble técnica, le animo a que eche un vistazo a “Computación aproximada para ML: estado del arte, desafíos y visiones” de Zervakis [4], que proporciona una buena visión general de los trabajos específicos centrados en este tema.

Poda y cuantificación

Para las personas familiarizadas con el entrenamiento de algoritmos de IA, especialmente las redes neuronales, estas dos técnicas deberían sonar familiares. Para aquellos que no están familiarizados con estos términos, los conceptos realmente valen la pena leerlos.

La poda es un método basado en la idea de que hay mucha redundancia en los parámetros de una red neuronal, que son los que contienen el conocimiento de la red. Por eso muchos de ellos pueden eliminarse sin afectar realmente la predicción de la red.

La cuantificación significa representar los parámetros de una red utilizando menos bytes. ¿Recuerdas cómo dijimos que las computadoras representan los números utilizando una cierta cantidad de bytes? Bueno, por lo general, las redes se entrenan utilizando una representación llamada “punto flotante”, donde cada número puede tener una longitud de 4 o 8 bytes. Pero hay técnicas para representar estos parámetros utilizando solo 1 byte (la representación “entero”) y aún así tener una calidad de predicción similar o, a veces, incluso igual.

Estoy seguro de que ya estás imaginando cómo estas dos técnicas ayudan a reducir el consumo de energía de una red neuronal. En el caso de la poda, si se necesitan menos parámetros para procesar una entrada, dos cosas suceden que mejoran el consumo de energía del algoritmo. En primer lugar, se necesitan menos cálculos que se ejecutan en las unidades de cálculo. En segundo lugar, debido a que hay menos cálculos que realizar, se lee menos datos de la memoria. En el caso de la cuantificación, multiplicar dos números representados como enteros utilizando solo un byte requiere un multiplicador de hardware mucho más pequeño y simple, lo que a su vez requiere menos energía para realizar la multiplicación real. Por último, si el tamaño de cada parámetro se reduce de 8 bytes a 1 byte, esto significa que la cantidad de datos que se deben leer de la memoria también es 8 veces menor, lo que reduce en gran medida el consumo de energía necesario para procesar una entrada.

¿Quieres saber más al respecto? Echa un vistazo a “Lightweight Parameter Pruning for Energy-Efficient Deep Learning: A Binarized Gating Module Approach” de Zhi [5] o “Pruning for Power: Optimizing Energy Efficiency in IoT with Neural Network Pruning” de Widmann [6] para ver ejemplos de trabajos actuales sobre el tema.

Afinación

Dada la naturaleza cerrada de muchos de los últimos modelos de lenguaje natural, se está utilizando una cantidad significativa de potencia informática solo para replicar los resultados de estos modelos. Si estos modelos se abrieran al público, se podría aplicar la técnica conocida como afinación. Este es un método por el cual solo algunos de los parámetros de un modelo pre-entrenado se modifican durante un procedimiento de entrenamiento de afinación, para especializar la red para una tarea particular. Este proceso generalmente requiere menos iteraciones de entrenamiento y, por lo tanto, consume menos energía que volver a entrenar toda una red desde cero.

Es por eso que abrir estos modelos al público ayudaría no solo a las personas que intentan construir productos con ellos, sino también a los investigadores que los están volviendo a entrenar desde cero y consumiendo mucha energía que se podría ahorrar.

Conclusión

Espero que hayas encontrado estas técnicas y métodos tan fascinantes como yo. Es reconfortante saber que hay personas investigando activamente estas técnicas e intentando mejorar lo más posible en un tema tan importante como el ahorro de energía y la huella de carbono.

Pero no podemos sentarnos y relajarnos, delegando la responsabilidad de encontrar soluciones optimizadas a los investigadores que trabajan en estos temas. ¿Estás empezando un nuevo proyecto? Comprueba primero si puedes afinar un modelo pre-entrenado. ¿Está optimizado tu hardware para ejecutar algoritmos podados, pero no tienes la experiencia para aplicar eficientemente esta técnica? Sal ahí fuera, dedica un tiempo a aprenderlo o encuentra a alguien que ya tenga la habilidad. A largo plazo, valdrá la pena, no solo para ti y tu empresa, sino para nuestro planeta Tierra en su conjunto.

Siéntete libre de seguirme en Twitter o LinkedIn y háblame de lo que piensas de este artículo, ¡o cómprame un café si realmente te gustó!

¡Gracias por leer!

Referencias

[1] “Estimating the carbon footprint of BLOOM, a 176B parameter language model”

[2] “AutoScale: Energy Efficiency Optimization for Stochastic Edge Inference Using Reinforcement Learning”

[3] “Multi-Agent Collaborative Inference Via DNN Decoupling: Intermediate Feature Compression and Edge Learning”

[4] “Approximate Computing for ML: State-of-the-art, Challenges and Visions”

[5] “Lightweight Parameter Pruning for Energy-Efficient Deep Learning: A Binarized Gating Module Approach”

[6] “Pruning for Power: Optimizing Energy Efficiency in IoT with Neural Network Pruning”