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.
- Revolucionando la eficiencia de la IA El SqueezeLLM de UC Berkeley presenta la cuantificación densa y dispersa, uniendo la calidad y la velocidad en la entrega de modelos de lenguaje grandes.
- Meta AI presenta I-JEPA revolucionario Un gran salto innovador en la visión por computadora que emula el aprendizaje y el razonamiento humano y animal.
- Meta AI presenta MusicGen un modelo de generación de música simple y controlable impulsado tanto por texto como por melodía.
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Aprendizaje Automático en un Espacio No Euclidiano
- Una Guía Completa sobre Redes Neuronales Convolucionales
- Búsqueda de similitud, Parte 4 Hierarchical Navigable Small World (HNSW)
- Búsqueda de similitud, Parte 3 Mezclando el índice de archivo invertido y la cuantificación de productos.
- Inferencia Variacional Lo Básico
- Aprendiendo la Estimación de Poses Usando Nuevas Técnicas de Visión por Computadora
- ¡Hola GPU, ¿qué hay de mi matriz?