Calcular la Eficiencia Computacional de los Modelos de Aprendizaje Profundo con FLOPs y MACs

'Calcular Eficiencia Computacional de Modelos de Aprendizaje Profundo con FLOPs y MACs.'

En este artículo aprenderemos sobre su definición, diferencias y cómo calcular FLOPs y MACs utilizando paquetes de Python.

¿Qué son FLOPs y MACs?

Los FLOPs (Operaciones de punto flotante) y los MACs (Operaciones de multiplicación-acumulación) son métricas que se utilizan comúnmente para calcular la complejidad computacional de los modelos de aprendizaje profundo. Son una forma rápida y fácil de entender el número de operaciones aritméticas requeridas para realizar un cálculo determinado. Por ejemplo, al trabajar con diferentes arquitecturas de modelo como MobileNet o DenseNet para dispositivos móviles, las personas usan MACs o FLOPs para estimar el rendimiento del modelo. Además, la razón por la que usamos la palabra “estimar” es que ambas métricas son aproximaciones en lugar de la captura real del modelo de rendimiento en tiempo de ejecución. Sin embargo, aún pueden proporcionar información muy útil sobre el consumo de energía o los requisitos computacionales, lo que es muy útil en la informática móvil.

Los FLOPs se refieren específicamente al número de operaciones de punto flotante, que incluyen operaciones de suma, resta, multiplicación y división en números de punto flotante. Estas operaciones son comunes en muchos cálculos matemáticos involucrados en el aprendizaje automático, como las multiplicaciones de matrices, las activaciones y los cálculos de gradientes. Los FLOPs se utilizan a menudo para medir el costo o la complejidad computacional de un modelo o una operación específica dentro de un modelo. Esto es útil cuando necesitamos proporcionar una estimación del número total de operaciones aritméticas requeridas, que generalmente se usa en el contexto de medir la eficiencia de la computación.

Por otro lado, los MACs solo cuentan el número de operaciones de multiplicación-acumulación, que implican multiplicar dos números y agregar el resultado. Esta operación es fundamental para muchas operaciones de álgebra lineal, como multiplicaciones de matrices, convoluciones y productos punto. Los MACs se utilizan a menudo como una medida más específica de la complejidad computacional en modelos que dependen en gran medida de operaciones de álgebra lineal, como las redes neuronales convolucionales (CNN).

Una cosa que vale la pena mencionar aquí es que los FLOPs no pueden ser el único factor que las personas calculan para tener una idea de la eficiencia de la computación. Se consideran muchos otros factores necesarios al estimar la eficiencia del modelo. Por ejemplo, qué tan paralelo es la configuración del sistema; qué arquitectura tiene el modelo (por ejemplo, los costos de la convolución en MACs); qué plataforma de cómputo utiliza el modelo (por ejemplo, Cudnn tiene aceleración de GPU para redes neuronales profundas y las operaciones estándar como reenvío o normalización están altamente optimizadas).

¿Son iguales FLOPS y FLOPs?

FLOPS con todas las letras mayúsculas es la abreviatura de “operaciones de punto flotante por segundo”, que se refiere a la velocidad de cálculo y generalmente se utiliza como medida del rendimiento del hardware. La “S” en “FLOPS” significa “segundo” y junto con “P” (como “por”), generalmente se utiliza para representar una tasa.

FLOPs (con minúscula “s” en plural), por otro lado, se refiere a las operaciones de punto flotante. Se utiliza comúnmente para calcular la complejidad de cálculo de un algoritmo o modelo. Sin embargo, en la discusión de la inteligencia artificial, a veces FLOPs puede tener ambos significados anteriores y se dejará al lector identificar el exacto al que se refiere. También ha habido algunas discusiones pidiendo a las personas que abandonen por completo el uso de “FLOPs” y usen “FLOP” en su lugar para que sea más fácil distinguir cada uno. En este artículo, seguiremos usando FLOPs.

Relación entre FLOPs y MACs

Como se mencionó en la sección anterior, la principal diferencia entre FLOPs y MACs incluye qué tipos de operaciones aritméticas cuentan y el contexto en el que se utilizan. El consenso general de la comunidad de IA, como el comentario de GitHub en la Figura 2, es que un MAC equivale aproximadamente a dos FLOPs. Para las redes neuronales profundas, las operaciones de multiplicación-acumulación son pesadas en cálculos, por lo que los MACs se consideran más significativos.

¿Cómo calcular FLOPs?

Lo bueno es que ya hay múltiples paquetes de código abierto disponibles para calcular FLOPs específicamente, por lo que no tienes que implementarlo desde cero. Algunos de los más populares incluyen flops-counter.pytorch y pytorch-OpCounter. También hay paquetes como torchstat que proporciona a los usuarios un analizador de red general basado en PyTorch. También vale la pena señalar que para estos paquetes, las capas y modelos admitidos son limitados. Entonces, si está ejecutando un modelo que consta de capas de red personalizadas, es posible que deba calcular FLOPs usted mismo.

Aquí mostramos un ejemplo de código para calcular FLOPs usando pytorch-OpCounter y un alexnet pre-entrenado de torchvision:

from torchvision.models import alexnet
from thop import profile

model = alexnet()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))

Conclusión

En este artículo, presentamos la definición de FLOPs y MACs, cuándo se usan usualmente y la diferencia entre los dos atributos.

Referencias

  • https://github.com/sovrasov/flops-counter.pytorch
  • https://github.com/Lyken17/pytorch-OpCounter
  • https://github.com/Swall0w/torchstat
  • https://arxiv.org/pdf/1704.04861.pdf
  • https://arxiv.org/abs/1608.06993

Danni Li es la actual Residente de Inteligencia Artificial en Meta. Está interesada en construir sistemas de IA eficientes y su enfoque actual de investigación se centra en modelos de ML en dispositivos. También es una firme creyente de la colaboración de código abierto y la utilización del apoyo de la comunidad para maximizar nuestro potencial de innovación.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Conoce AUDIT Un modelo de edición de audio guiado por instrucciones basado en modelos de difusión latente

Los modelos de difusión están avanzando rápidamente y facilitando la vida. Desde el Procesamiento del Lenguaje Natura...

Aprendizaje Automático

LangFlow | Interfaz de usuario para LangChain para desarrollar aplicaciones con LLMs

Introducción Los Modelos de Lenguaje Grandes han causado sensación en el mundo. Con la llegada de ChatGPT, GPT3, Bard...

Investigación

Investigadores de MIT CSAIL discuten las fronteras del AI generativo.

Expertos se reúnen para examinar el código, lenguaje e imágenes generados por la inteligencia artificial, así como su...

Inteligencia Artificial

El Proceso de IA

La IA todavía es considerada un campo relativamente nuevo, por lo que realmente no existen guías o estándares como SW...

Inteligencia Artificial

Seis recursos útiles para ingenieros

Esta colección de recursos será útil para muchos profesionales de IA con diferentes niveles de experiencia. Guarda en...