Cantidad de cálculo, cantidad de parámetros y cantidad de acceso a la memoria del modelo de cálculo

1. Monto del cálculo

        La cantidad de cálculo es la cantidad de cálculos requeridos por el modelo, que refleja la demanda del modelo de unidades informáticas de hardware. La cantidad de cálculo generalmente se expresa mediante  OP  (Operaciones), es decir, el número de cálculos. Dado que el formato de datos más utilizado es float32, a menudo se escribe como  FLOP  (operaciones de punto flotante), que es el número de cálculos de punto flotante. PyTorch tiene muchas herramientas que pueden modelar la cantidad de cálculo, pero debe tenerse en cuenta que estas herramientas pueden omitir la cantidad de cálculo de algunos operadores y calcular su cantidad de cálculo como 0, lo que resulta en una ligera desviación entre la cantidad de cálculo estadístico y la cantidad de cálculo real. . , pero en la mayoría de los casos estas desviaciones tienen poco efecto.

La siguiente es una herramienta de Pytorch que uso habitualmente:

from ptflops.flops_counter import get_model_complexity_info

flops, params = get_model_complexity_info(model, (1, 32000), print_per_layer_stat=False)
print("%s %s" % (flops, params))

2. Cantidad de parámetros

        El número de parámetros es el número total de parámetros en el modelo, que está directamente relacionado con el espacio requerido por el modelo en el disco. Para CNN, los parámetros consisten principalmente en el peso de la capa Conv/FC. Por supuesto, algunos otros operadores también tienen parámetros, pero generalmente se ignoran. La cantidad de parámetros a menudo se cuenta como parte de la cantidad de acceso a la memoria, por lo que la cantidad de parámetros no afecta directamente el rendimiento de la inferencia del modelo. Sin embargo, la cantidad de parámetros afectará el uso de la memoria, por un lado, y el tiempo de inicialización del programa, por el otro.

El siguiente es el código que uso comúnmente para calcular los parámetros del modelo (por supuesto, el código anterior ya incluye el cálculo de los parámetros del modelo):

    def numParams(net):
        num = 0
        for param in net.parameters():
            if param.requires_grad:
                num += int(np.prod(param.size()))
        return num
    print(numParams(model))

3. Cantidad de acceso al almacenamiento

        La cantidad de acceso a la memoria se refiere al tamaño de bytes de la unidad de almacenamiento a la que se debe acceder durante el cálculo del modelo, lo que refleja la demanda del modelo de ancho de banda de la unidad de almacenamiento. También se puede decir que cuando se ingresa una sola muestra, la cantidad total de intercambios de memoria que ocurren cuando el modelo completa un proceso de propagación hacia adelante es la complejidad espacial del modelo. La cantidad de acceso a la memoria generalmente se  expresa en Bytes (o  KB/MB/GB ), es decir, el modelo calcula cuántos Bytes de datos deben almacenarse/recuperarse. Al igual que la cantidad de cálculo, la cantidad total de acceso a la memoria del modelo es igual a la suma de las cantidades de acceso a la memoria de cada operador del modelo. La cantidad de acceso a la memoria es crucial para la velocidad de inferencia del modelo y se debe prestar atención a ella al diseñar el modelo.

4. Intensidad computacional del modelo.

        La intensidad informática del modelo se puede obtener dividiendo la cantidad de cálculo por la cantidad de acceso a la memoria, lo que indica cuántas operaciones de punto flotante se utilizan para cada byte de intercambio de memoria durante el proceso de cálculo de este modelo. La unidad es FLOP/Byte. Se puede ver que cuanto mayor es la intensidad informática modular, mayor es la eficiencia del uso de la memoria.

No existe una relación causal directa entre la cantidad de cálculo y la velocidad de inferencia real. La cantidad de cálculo solo se puede utilizar como referencia para la velocidad de inferencia del modelo .

El indicador que más nos preocupa cuando ejecutamos un modelo es en realidad el número de operaciones de punto flotante por segundo (valor teórico) que el modelo puede lograr en la plataforma informática (servidor). La unidad es FLOPS o FLOP/s.

五、Modelo de línea de techo

        El modelo de línea de techo habla de qué tan rápido el modelo puede alcanzar la velocidad de cálculo de punto flotante bajo las limitaciones de una plataforma informática. Más específicamente, lo que resuelve el modelo de línea de techo es la pregunta "¿Cuál es el límite superior de rendimiento teórico E que un modelo con una cantidad de cálculo A y una cantidad de acceso a la memoria B puede lograr en una plataforma informática con potencia informática C y ancho de banda D?".

Este artículo hace referencia a: Discusión sobre el tamaño del modelo de aprendizaje profundo y la velocidad de inferencia del modelo - Zhihu (zhihu.com)

Supongo que te gusta

Origin blog.csdn.net/qq_42019881/article/details/130843952
Recomendado
Clasificación