Volver a las novedades para desarrolladores

Summer of open source: building more efficient AI with PyTorch

20 de septiembre de 2022DeSuraj Subramanian

Nota: nuestro agradecimiento especial a Less Wright, ingeniero socio de Meta AI, por la revisión de la publicación y la información adicional.

Esta publicación sobre la creación de inteligencia artificial (IA) eficiente es la segunda de la serie “El verano del código abierto”. El objetivo de esta serie es proporcionar un número de recursos útiles y de contenido de aprendizaje en áreas (no exclusivas de Meta) en las que los proyectos de código abierto generan impacto. Acompáñanos en la exploración de otras áreas en las que el código abierto de Meta propicia el avance del sector compartiendo herramientas innovadoras y escalables.

PyTorch: de la tecnología fundacional a las bases

Desde su primera versión en 2016, PyTorch se ha utilizado masivamente en la comunidad de aprendizaje profundo y sus raíces en investigación se están ampliando continuamente al uso en situaciones de producción. En una época estimulante para el aprendizaje automático (AA) y la inteligencia artificial (IA), en las que los métodos y casos de uso novedosos de modelos de IA continúan desarrollándose, PyTorch inauguró el siguiente capítulo de su historia a través de PyTorch Foundation, una entidad independiente, recientemente creada en el marco de Linux Foundation. La fundación consta de una junta directiva diversa que incluye a representantes de AMD, Amazon Web Services, Google Cloud, Microsoft Azure y Nvidia, y el objetivo es que se expanda con el tiempo. Sus objetivos incluyen impulsar la adopción de herramientas de IA a través de proyectos neutrales respecto de los proveedores y posibilitar el acceso universal a herramientas, bibliotecas de código abierto y otros componentes. La fundación también hará posible que PyTorch y su comunidad de código abierto continúen acelerando la ruta que va desde la creación de prototipos hasta la producción para IA y AA.

Optimizar los procesos de IA con código abierto de Meta

PyTorch es un excelente ejemplo de la potencia del código abierto. Como uno de los primeros marcos de aprendizaje profundo de código abierto, PyTorch ha permitido que personas de diferentes disciplinas experimenten con el aprendizaje profundo y apliquen su trabajo en campos de amplio alcance. PyTorch admite desde experimentos en aplicaciones de búsqueda hasta desarrollo para vehículos autónomos y georradares, y estas son solo algunas de sus aplicaciones más recientes. La combinación de una versátil biblioteca de herramientas de IA y la comunidad de código abierto refuerza la capacidad de iterar rápidamente y adaptar la tecnología a escala para muchos usos diferentes.

A medida que la IA se implementa de manera más amplia, el tamaño de los modelos tiende a aumentar para resolver problemas más complejos, pero esto también implica que los recursos necesarios para entrenar estos modelos han aumentado sustancialmente. Por fortuna, mucha gente de la comunidad de desarrolladores ha reconocido la necesidad de que los modelos consuman menos recursos, desde un punto de vista práctico y ambiental. En esta publicación, se analizará el motivo por el que la cuantificación y otros tipos de compresión de modelos pueden actuar como factores de impulso para una IA eficiente.

Establecer una línea base para usar PyTorch

La mayor parte de esta publicación está dedicada a algunas funciones intermedias y avanzadas de PyTorch. Si eres principiante y buscas dar los primeros pasos, o si eres experto y actualmente usas otra biblioteca, lo más fácil será comenzar con aspectos básicos. Consulta la guía de principiantes de PyTorch, que incluye una introducción a un flujo de trabajo de AA completo usando el conjunto de datos Fashion MNIST.

A continuación, se muestran otros recursos que podrías consultar si estás empezando con PyTorch:

  • Historias de la comunidad de PyTorch: entérate de cómo PyTorch está generando impacto en diferentes sectores, como la agricultura, la educación y el turismo, entre otros.
  • Serie de PyTorch para principiantes: explora una lista de reproducción de videos con técnicas básicas que incluyen primeros pasos con tensores, modelos de compilación, entrenamiento e inferencia en PyTorch.

Cuantificación: aplicar técnicas comprobadas a IA

Existen muchas alternativas para lograr que la IA sea más eficiente. Aplicar una firma de código a hardware y software para la optimización asociada a IA puede ser muy eficaz, pero el desarrollo de soluciones de hardware y software personalizadas requiere una cantidad de tiempo y recursos considerable. Crear arquitecturas más rápidas y reducidas es otra alternativa para alcanzar la eficiencia, pero muchas de estas arquitecturas pierden precisión cuando se comparan con modelos más grandes, al menos por el momento. Un enfoque más sencillo consiste en hallar maneras de reducir los recursos necesarios para entrenar y ofrecer modelos existentes. En PyTorch, una forma de hacer esto consiste en aplicar compresión de modelos usando cuantificación.

La cuantificación es una técnica matemática que se ha usado para crear archivos de música digital con pérdida y convertir señales analógicas en digitales. Ejecutando cálculos matemáticos con precisión reducida, la cuantificación hace posible un mayor rendimiento en muchas plataformas de hardware. ¿Por qué habría que usar la cuantificación para que la IA sea más eficiente? Los resultados muestran que, en ciertos casos, usar esta técnica relativamente simple puede acelerar notablemente (de 2 a 4 veces) la inferencia de modelos.

Los parámetros que componen un modelo de aprendizaje profundo normalmente son números decimales con precisión de punto flotante (PF); cada parámetro requiere 16 o 32 bits de memoria. Al usar la cuantificación, los números con frecuencia se convierten en INT4 o INT8, que ocupan solo 4 u 8 bits. Esto reduce la cantidad de memoria que requieren los modelos. A su vez, los fabricantes de chips incluyen aritmética especial que hace más rápidas las operaciones cuando se usan enteros que cuando se usan decimales.

Existen 3 métodos de cuantificación que se pueden usar para entrenar modelos: entrenamiento dinámico, estático y consciente de cuantificación (QAT). En la tabla que se muestra a continuación, se brinda una descripción general de los beneficios y los puntos débiles. Para obtener información sobre cómo implementar cada uno en tus flujos de trabajo de IA, lee la publicación de blog Cuantificación práctica en PyTorch.

Método de cuantificación

Beneficios

Puntos débiles

Dinámico

  • Fácil de usar con solo una llamada a la API
  • Mayor solidez para cambio de distribución, para una precisión ligeramente superior
  • Buen funcionamiento para modelos de memoria de corto plazo (LSTM) y de transformación.

Se requiere una sobrecarga adicional en cada pasada de avance.

Estático (también conocido como “PTQ”)

  • Inferencia más rápida en comparación con la cuantificación dinámica mediante la eliminación de sobrecarga

Es posible que se necesiten calibraciones periódicas para un cambio de distribución.

Entrenamiento consciente de cuantificación (QAT)

  • Mayor precisión que la cuantificación estática
  • Inferencia más rápida que la del método dinámico

Supone una alta exigencia en términos de cálculo.

Funciones adicionales para acelerar el flujo de trabajo de IA

La cuantificación no es la única alternativa para que la IA con tecnología de PyTorch sea más eficiente. Las funciones se actualizan de manera periódica. A continuación, se ofrecen otras opciones para que PyTorch pueda mejorar los flujos de trabajo de IA:

  • Modo de inferencia: este modo se puede usar para escribir código de PyTorch si solo usas el código para ejecutar inferencias. El modo de inferencia cambia algunos supuestos al trabajar con tensores para acelerar la inferencia. Al indicar a PyTorch que no usarás posteriormente tensores para determinadas aplicaciones (en este caso, autograd), PyTorch realiza ajustes para que el código funcione más rápido en estas situaciones específicas.

  • Baja precisión: la cuantificación funciona solo en el momento de la inferencia; es decir, después de que hayas entrenado al modelo. Para el proceso de entrenamiento en sí mismo, PyTorch usa el de AMP, o entrenamiento de precisión mixta automática, para hallar el mejor formato según los tensores usados (FP16, FP32 o BF16). El aprendizaje profundo de baja precisión en PyTorch tiene varias ventajas. Puede ayudar a reducir el tamaño de un modelo, la capacidad de memoria requerida para entrenarlo y la potencia necesaria para ejecutarlo. Para obtener más información, consulta este tutorial de uso de AMP con GPU apta para CUDA.

  • Channels last: cuando se trata de modelos de visión, NHWC, también conocido como “channels-last”, es un formato de memoria de tensores más rápido de PyTorch. El almacenamiento de datos en el formato de “channels-last” acelera las operaciones en Pytorch. El formato de tensores de entrada como “channels-last” reduce la sobrecarga necesaria para la conversión entre diferentes tipos de formatos, lo que genera una mayor inferencia.

  • Optimización de la inferencia: este prototipo de TorchScript implementa optimizaciones genéricas que deberían acelerar modelos en todos los entornos y también puede preparar modelos para inferencia con ajustes específicos de versiones. Entre los casos de uso principales se incluyen modelos de visión en CPU (y GPU) en este punto. Debido a que se trata de un prototipo, es posible que experimentes inconvenientes. En el repositorio GitHub de PyTorch, podrás reportar los problemas que surjan.

Liberar nuevo potencial en PyTorch

De forma regular, en el blog de PyTorch se abordan métodos novedosos para acelerar flujos de trabajo de IA. Es un excelente espacio para estar al tanto de técnicas como la reciente BetterTransformer, que puede multiplicar por dos la aceleración y el rendimiento de modelos de Transformer en escenarios de ejecución comunes. Si te interesa aprender a implementar funciones específicas de PyTorch, en la página de recetas podrás realizar búsquedas por categorías como, por ejemplo, la optimización de modelos, el entrenamiento distribuido y la capacidad de interpretación. Esta publicación solo representa una muestra de la forma en que herramientas como PyTorch llevan a cabo la transición hacia el código abierto y la IA.

Para mantenerte al día de las últimas novedades sobre el código abierto de Meta para inteligencia artificial y aprendizaje automático, visita nuestro sitio de código abierto, suscríbete a nuestro canal de YouTube o síguenos en Facebook, Twitter y LinkedIn.