Quantization

 Computer Performance

La cuantificación para el aprendizaje profundo es el proceso de aproximación de una red neuronal que utiliza números de coma flotante por una red neuronal de números de bajo ancho de bits.Esto reduce drásticamente tanto el requisito de memoria como el costo computacional del uso de redes neuronales, indispensable en el momento del entrenamiento.


La cuantificación se refiere a técnicas para realizar cálculos y almacenar tensores en anchos de bits más bajos que la precisión de punto flotante. Un modelo cuantizado ejecuta algunas o todas las operaciones en tensores con números enteros en lugar de valores de punto flotante. Esto permite una representación de modelo más compacta y el uso de operaciones vectorizadas de alto rendimiento en muchas plataformas de hardware. Esta técnica es particularmente útil en el momento de la inferencia, ya que ahorra mucho costo de cálculo de inferencia sin sacrificar demasiadas precisiones de inferencia.

La cuantificación es una técnica prometedora para reducir el costo de cómputo del entrenamiento de redes neuronales, que puede reemplazar números de punto flotante de alto costo (p. ej., float32) con números de punto fijo de bajo costo (p. ej., int8/int16). La cuantificación de modelos es un método popular de optimización de aprendizaje profundo en el que los datos del modelo (tanto los parámetros de red como las activaciones) se convierten de una representación de punto flotante a una representación de menor precisión, generalmente utilizando números enteros de 8 bits.    



See also: https://developer.nvidia.com/blog/achieving-fp32-accuracy-for-int8-inference-using-quantization-aware-training-with-tensorrt/


¿Por qué cuantización?

Hay dos razones principales. La red neuronal profunda consta de muchos parámetros que se conocen como pesos, por ejemplo, ¡la famosa red VGG tiene más de 100 millones de parámetros! En muchos escenarios, el cuello de botella de ejecutar una red neuronal profunda está en la transferencia de pesos y datos entre la memoria principal y los núcleos de cómputo. Por lo tanto, a diferencia de la GPU que tiene un gran grupo de memoria compartida, los chips de IA modernos tienen muchas memorias locales alrededor de los núcleos de cómputo para minimizar la latencia de la transferencia de datos. Ahora, al usar enteros de 8 bits en lugar de 32 bits, ¡aceleramos instantáneamente la transferencia de memoria por 4x! Esto también trae otros beneficios que acompañan a un tamaño de archivo más pequeño, es decir, menos almacenamiento de memoria, tiempo de descarga más rápido, etc.