Mejorando el rendimiento de cuantización en TVM
Este artículo examina maneras de mejorar la cuantización en modelos de aprendizaje profundo usando TVM.
― 7 minilectura
Tabla de contenidos
La Cuantización es un método usado en el deep learning para hacer que los modelos sean más pequeños y rápidos. Funciona cambiando la forma en que se almacenan los números en un modelo. Normalmente, los modelos utilizan números en punto flotante de 32 bits, pero con la cuantización, cambiamos a enteros de 8 bits. Este cambio ayuda a reducir la cantidad de memoria necesaria y acelera los cálculos sin afectar demasiado la precisión.
¿Qué es TVM?
TVM, o Tensor Virtual Machine, es una herramienta de código abierto que ayuda a ejecutar modelos de deep learning en diferentes tipos de hardware. Está diseñada para ayudar a los desarrolladores de machine learning a ejecutar sus modelos de manera eficiente en varios dispositivos. TVM tiene dos partes principales que optimizan el rendimiento de los modelos. La primera parte se centra en cómo fluye la información a través del modelo, mientras que la segunda mejora la forma en que el modelo utiliza la memoria.
El desafío de la cuantización en TVM
Aunque muchos estudios han hablado de los beneficios de la cuantización para reducir el tiempo y la memoria usados en la ejecución de un modelo, encontramos que la versión cuantizada de los modelos en TVM a menudo no rinde tan bien como se esperaba. Cuando la gente usa cuantización de 8 bits, normalmente espera que el modelo funcione aproximadamente el doble de rápido que cuando se usan números de 32 bits. Sin embargo, en TVM, esta versión cuantizada a veces funcionó más lenta, casi el doble de tiempo en comparación con la versión de precisión completa.
En nuestra investigación, analizamos de cerca por qué esto estaba sucediendo y encontramos formas de hacer que la cuantización de 8 bits funcionara mejor en TVM. Nos enfocamos en dos tipos diferentes de tareas: aquellas donde los cálculos son el principal límite (limitadas por cómputo) y aquellas donde el uso de memoria es el principal límite (limitadas por memoria).
Tipos de tareas
Tareas limitadas por cómputo
Las tareas limitadas por cómputo son aquellas en las que el desafío principal proviene de la cantidad de poder de cómputo necesario. Este tipo de tarea generalmente involucra cálculos pesados, como multiplicar matrices o ejecutar convoluciones. En machine learning, muchas tareas encajan en esta categoría porque requieren un esfuerzo computacional significativo para hacer predicciones o entrenar modelos. Por ejemplo, si estamos ejecutando un modelo con un tamaño de lote de uno, vemos que la cuantización puede ayudar. Esto se debe a que utiliza operaciones aritméticas más simples con menos demanda de recursos en comparación con los procedimientos estándar de 32 bits.
Algunos hardware son mejores para realizar cálculos de menor precisión que de mayor precisión. Esto significa que los cálculos usando números de 8 bits a menudo se pueden hacer más rápido que aquellos con números de 32 bits.
Tareas limitadas por memoria
Las tareas limitadas por memoria son diferentes porque están limitadas por cuánto dato se puede mover hacia y desde la memoria rápidamente. Las entradas grandes pueden causar retrasos ya que el sistema lucha por transferir datos entre la memoria y el procesador. Este problema tiende a aparecer más con tamaños de lote más grandes (p. ej., 8, 64 o 256) ya que requieren más memoria para los datos de entrada y los cálculos.
Al reducir el tamaño de los números de 32 bits a 8 bits con la cuantización, podemos ahorrar mucha memoria. Este tamaño más pequeño significa que se necesita mover menos datos de un lado a otro entre la memoria y el procesador, lo que puede ayudar a mejorar la velocidad.
Configurando experimentos
Para ver cómo la cuantización afecta el rendimiento, miramos un modelo llamado ResNet18 compilado por TVM. Ejecutamos este modelo en un sistema potente con una CPU de 8 núcleos y una buena cantidad de memoria. En nuestros experimentos, probamos diferentes tamaños de números y configuraciones para ver cómo impactaban el rendimiento. Cada prueba involucró ejecutar el modelo una y otra vez, promediando el tiempo tomado en cada ejecución.
Solucionando problemas de rendimiento
Durante nuestras pruebas, encontramos que la cuantización estaba haciendo que el modelo funcionara más lento de lo que debería. Después de examinar la configuración, identificamos un error que estaba causando que el modelo cuantizado tuviera un rendimiento deficiente. Una vez que arreglamos este error, el modelo cuantizado comenzó a mostrar mejor rendimiento.
También descubrimos que TVM tiene diferentes tipos de ejecutores para ejecutar modelos. Un ejecutor es mejor para modelos estáticos con operaciones fijas, mientras que el otro es más adecuado para modelos dinámicos que pueden cambiar. Para nuestros experimentos, cambiamos al ejecutor de modelos estáticos, lo que nos permitió optimizar mejor el modelo cuantizado. Después de este cambio, vimos una mejora significativa en el rendimiento.
Analizando el rendimiento limitado por cómputo
Con el error solucionado y el ejecutor correcto en su lugar, buscamos mejorar aún más el rendimiento para tareas limitadas por cómputo. Nos enfocamos en optimizar las convoluciones en nuestro modelo, ya que requieren muchos cálculos.
Sin embargo, aprendimos que no todas las estrategias de optimización funcionan bien juntas. Diferentes configuraciones en TVM llevan a diferentes resultados de rendimiento porque algunas estrategias ya están ajustadas para ciertas tareas. Las mejoras varían según qué tan bien la configuración y los horarios específicos se adaptan a las tareas que se están ejecutando.
Por ejemplo, el empaquetamiento espacial es una técnica que ayuda a acelerar el acceso a la memoria para tareas al cambiar cómo se almacenan los datos. El objetivo es facilitar que el hardware acceda a los datos, lo que ayuda a mejorar el rendimiento. Este cambio puede llevar a un aumento significativo en la velocidad de los cálculos.
Analizando el rendimiento limitado por memoria
Además de los beneficios de rendimiento de mejores cálculos, la cuantización también ayuda con el uso de memoria. Al usar enteros de 8 bits en lugar de números de punto flotante de 32 bits, podemos reducir cuánto memoria requiere el modelo y cuántas veces necesita obtener datos.
Notamos que con tamaños de lote más grandes, las ventajas de un ancho de banda de memoria reducido se hicieron aún más claras. Guardar los resultados intermedios en un formato de mayor precisión aún mantenía las ganancias de rendimiento de usar cuantización de 8 bits, asegurando que no perdiéramos precisión durante los cálculos.
Conclusión
La cuantización puede ser una herramienta poderosa para mejorar la eficiencia de los modelos de deep learning, especialmente cuando se implementa correctamente en un sistema como TVM. Al comprender las fortalezas y debilidades de las tareas limitadas por cómputo y memoria, podemos aplicar mejor la cuantización para lograr mejoras significativas en el rendimiento.
A través de un ajuste cuidadoso y la solución de problemas dentro del modelo, podemos convertir la cuantización en un activo en lugar de un pasivo. Este trabajo abre caminos para futuras optimizaciones y sienta las bases para usar estas poderosas técnicas en aplicaciones del mundo real.
Título: Analyzing Quantization in TVM
Resumen: There has been many papers in academic literature on quantizing weight tensors in deep learning models to reduce inference latency and memory footprint. TVM also has the ability to quantize weights and support low-bit computations. Although quantization is typically expected to improve inference time, in TVM, the performance of 8-bit quantization does not meet the expectations. Typically, when applying 8-bit quantization to a deep learning model, it is usually expected to achieve around 50% of the full-precision inference time. However, in this particular case, not only does the quantized version fail to achieve the desired performance boost, but it actually performs worse, resulting in an inference time that is about 2 times as slow as the non-quantized version. In this project, we thoroughly investigate the reasons behind the underperformance and assess the compatibility and optimization opportunities of 8-bit quantization in TVM. We discuss the optimization of two different types of tasks: computation-bound and memory-bound, and provide a detailed comparison of various optimization techniques in TVM. Through the identification of performance issues, we have successfully improved quantization by addressing a bug in graph building. Furthermore, we analyze multiple optimization strategies to achieve the optimal quantization result. The best experiment achieves 163.88% improvement compared with the TVM compiled baseline in inference time for the compute-bound task and 194.98% for the memory-bound task.
Autores: Mingfei Guo
Última actualización: 2023-08-19 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2308.10905
Fuente PDF: https://arxiv.org/pdf/2308.10905
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.