[pytorch] Estimación de la potencia informática requerida para el aprendizaje profundo: fracasos y parámetros del modelo

La cantidad de cálculo requerida se encuentra en los floaps del chip (refiriéndose a la potencia informática de la gpu)

Para determinar la potencia informática necesaria para la inferencia de redes neuronales, es necesario tener en cuenta los siguientes factores:

Estructura de la red: la complejidad de la estructura de la red neuronal afecta directamente la demanda de poder de cómputo. En general, las redes profundas y convolucionales requieren más poder de cómputo.

Tamaño y tipo de datos de entrada: el tamaño y el tipo de datos de los datos de entrada afectan directamente la cantidad de requisitos de cálculo y almacenamiento de cada capa de la red neuronal. Por ejemplo, los datos de entrada son imágenes o videos más grandes, lo que requiere más memoria y potencia informática.

Tamaño del lote: el tamaño del lote determina la cantidad de muestras procesadas cada vez y también afecta los requisitos de potencia informática. En general, cuanto mayor sea el tamaño del lote, se requiere más poder de cómputo.

Calcule las operaciones de coma flotante (FLOP) de la estructura de la red: puede usar herramientas o bibliotecas de código existentes (como TensorFlow Profiler o PyTorch Profiler) para calcular los FLOP de la estructura de la red.

thop (pytorch-OpCounter) es una biblioteca de Python para contar FLOP y recuentos de parámetros de modelos PyTorch. En thop, el cálculo es FLOP (Operaciones de punto flotante) en lugar de FLOPS (Operaciones de punto flotante por segundo)

Los FLOP se convierten en FLOPS para determinar la potencia informática requerida.
El método de conversión es: dividir FLOPs por el número de operaciones de coma flotante que se pueden realizar por segundo, es decir, FLOPs / FLOPS = segundos. Este número de segundos representa el tiempo de cálculo mínimo requerido por el modelo. Por ejemplo, si un modelo tiene 1000 FLOP y la computadora tiene una potencia de procesamiento de 10 FLOPS, entonces el tiempo de cálculo mínimo requerido es de 100 segundos (1000/10 = 100)

La cantidad de parámetros corresponde a la selección del tamaño de la memoria

Existe una cierta relación entre la cantidad de parámetros del modelo PyTorch y la memoria de la GPU. Cuantos más parámetros del modelo, mayor será la memoria requerida. Esto se debe a que los parámetros del modelo deben almacenarse en la memoria de video, y el proceso de cálculo también implica el almacenamiento y cálculo de algunos resultados intermedios, por lo que se necesita suficiente memoria de video para admitir el funcionamiento del modelo.
Al implementar, se debe tener en cuenta la memoria de video del chip, ya que el tamaño de la memoria de video limita el tamaño máximo de lote del modelo. Si el tamaño del lote del modelo supera el tamaño de la memoria de video, el lote completo de datos no se puede cargar en la memoria de video al mismo tiempo y debe procesarse por lotes, lo que aumentará el tiempo de inferencia del modelo. Por lo tanto, al implementar, es necesario elegir un modelo y un tamaño de lote que se ajusten al tamaño de la memoria del chip.

Supongamos que sabemos que el tamaño del parámetro del modelo es 100 M y el tamaño máximo de lote de inferencia es 32. Ahora debemos seleccionar un tamaño de memoria de chip de inferencia adecuado. El siguiente es un proceso de cálculo simple:
Primero, necesitamos calcular el tamaño de memoria requerido por el modelo bajo el tamaño máximo de lote de inferencia. Suponiendo que el tamaño de los datos de entrada del modelo es [h, w], y el tipo de datos de cada elemento es float32, entonces el tamaño de los datos de entrada de cada lote del modelo es [h, w, 32] (32 es el tamaño del lote), y el tamaño de la memoria ocupada es h * w * 32 * 4 (4 es el tamaño en bytes de float32, es decir, 4 bytes). De manera similar, el tamaño de los datos de salida también es [h, w, 32], y el tamaño de la memoria ocupada también es h * w * 32 * 4 , por lo tanto, el tamaño de memoria requerido por el modelo bajo el tamaño máximo de lote de inferencia es:

显存大小 = 输入数据大小 + 输出数据大小 + 模型参数大小
显存大小 = h * w * 32 * 4 + h * w * 32 * 4 + 100M * 4

Tenga en cuenta que se supone que todos los parámetros del modelo son de tipo float32, por lo que el tamaño de los parámetros del modelo es 100M * 4. Si el tipo de parámetros del modelo no es float32, el cálculo debe ajustarse en consecuencia.
Suponiendo que queremos que la utilización de la memoria de video alcance el 80 %, el tamaño final de la memoria de video seleccionada es:

显存大小 = (h * w * 32 * 4 + h * w * 32 * 4 + 100M * 4) / 0.8

A continuación, debemos seleccionar el tamaño de memoria del chip de inferencia adecuado en función de los resultados del cálculo. Tomando como ejemplo las tarjetas gráficas NVIDIA, la memoria de video de las tarjetas gráficas NVIDIA tiene diferentes especificaciones, como 8GB, 16GB, 32GB, etc. Podemos elegir la especificación de memoria más cercana al resultado del cálculo como el tamaño de memoria del chip de inferencia.
Suponiendo que el resultado del cálculo es de 3000 MB, podemos elegir 8 GB de especificación de memoria como tamaño de memoria del chip de inferencia. Debido a que la memoria de video real disponible de la tarjeta gráfica de 8 GB es de aproximadamente 7500 MB, lo que puede cumplir con los requisitos de memoria de video del modelo bajo el tamaño máximo de lote de inferencia, y todavía hay un cierto margen para garantizar que el modelo pueda funcionar normalmente. Si elige especificaciones de memoria de video de 16 GB o 32 GB, aunque puede cumplir mejor con los requisitos de memoria de video, provocará un desperdicio de memoria de video y aumentará los costos de hardware.

一般一个参数是值一个float,也就是4个字节
1kb=1024字节

FLOPS y especificaciones de memoria de tarjetas gráficas Nvidia comunes

NVIDIA GeForce GTX 1080 Ti
FLOPS: 11.34 TFLOPS
显存: 11 GB GDDR5X

NVIDIA GeForce RTX 2080 Ti
FLOPS: 14.2 TFLOPS
显存: 11 GB GDDR6

NVIDIA Tesla V100
FLOPS: 7.5-15.7 TFLOPS (取决于精度)
显存: 16 GB HBM2

NVIDIA Tesla P100
FLOPS: 4.7-9.3 TFLOPS (取决于精度)
显存: 16 GB HBM2

NVIDIA Tesla T4
FLOPS: 8.1 TFLOPS
显存: 16 GB GDDR6

NVIDIA Quadro RTX 6000
FLOPS: 16.3 TFLOPS
显存: 24 GB GDDR6

Floaps y métodos de cálculo de memoria en pytorch

Instale la biblioteca:

pip install thop

Código de ejecución:

# -- coding: utf-8 --
import torch
import torchvision
from thop import profile

# Model
print('==> Building model..')
model = torchvision.models.alexnet(pretrained=False)

dummy_input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, (dummy_input,))
print('flops: ', flops, 'params: ', params)
print('flops: %.2f M, params: %.2f M' % (flops / 1000000.0, params / 1000000.0))

Resultado de salida:

flops:  714206912.0 params:  61100840.0
flops: 714.21 M, params: 61.10 M

Nota:
FLOPS (Operaciones de punto flotante por segundo) es una unidad de rendimiento de la computadora que se utiliza para representar el número de operaciones de punto flotante que se pueden realizar por segundo. Por lo general, se usa para medir la velocidad de procesamiento y el rendimiento de las computadoras, especialmente en computación científica, inteligencia artificial, procesamiento de big data y otros campos. La unidad de FLOPS es el número de operaciones de punto flotante por segundo. Los prefijos comúnmente utilizados son k (mil), M (millón), G (mil millones), T (billón), etc.

Por lo tanto, cuando el lote es 1, la cantidad de cálculo de 224*224 entrada de 3 canales es 714206912,0 flops

Supongo que te gusta

Origin blog.csdn.net/hh1357102/article/details/129705313
Recomendado
Clasificación