Optimum+ONNX Runtime Entrenamiento más fácil y rápido para tus modelos de Hugging Face

Optimum+ONNX Runtime Entrenamiento más rápido y fácil para modelos de Hugging Face.

Introducción

Los modelos basados en Transformers en lenguaje, visión y habla están creciendo para soportar casos de uso multimodales más complejos para el cliente final. El aumento en el tamaño de los modelos impacta directamente en los recursos necesarios para entrenarlos y escalarlos a medida que el tamaño aumenta. Los equipos de Hugging Face y ONNX Runtime de Microsoft están trabajando juntos para desarrollar avances en el ajuste fino de modelos grandes de lenguaje, habla y visión. La biblioteca Optimum de Hugging Face, a través de su integración con ONNX Runtime para el entrenamiento, proporciona una solución abierta para mejorar los tiempos de entrenamiento en un 35% o más para muchos modelos populares de Hugging Face. Presentamos los detalles tanto de Hugging Face Optimum como del ecosistema de entrenamiento de ONNX Runtime, con números de rendimiento que resaltan los beneficios de usar la biblioteca Optimum.

Resultados de rendimiento

El gráfico a continuación muestra una aceleración impresionante del 39% al 130% para los modelos de Hugging Face con Optimum cuando se utiliza ONNX Runtime y DeepSpeed ZeRO Stage 1 para el entrenamiento. Las mediciones de rendimiento se realizaron en modelos seleccionados de Hugging Face, utilizando PyTorch como referencia en la primera ejecución, ONNX Runtime solo para el entrenamiento en la segunda ejecución, y ONNX Runtime + DeepSpeed ZeRO Stage 1 en la ejecución final, mostrando ganancias máximas. El optimizador utilizado para las ejecuciones de PyTorch de referencia es el optimizador AdamW y las ejecuciones de entrenamiento de ORT utilizan el optimizador Fused Adam. Las ejecuciones se realizaron en un solo nodo Nvidia A100 con 8 GPU.

Se pueden encontrar detalles adicionales sobre la configuración para activar Optimum para la aceleración del entrenamiento aquí. La información de la versión utilizada para estas ejecuciones es la siguiente:

PyTorch: 1.14.0.dev20221103+cu116; ORT: 1.14.0.dev20221103001+cu116; DeepSpeed: 0.6.6; HuggingFace: 4.24.0.dev0; Optimum: 1.4.1.dev0; Cuda: 11.6.2

Biblioteca Optimum

Hugging Face es una comunidad y plataforma de rápido crecimiento que tiene como objetivo democratizar el buen aprendizaje automático. Hemos ampliado las modalidades desde NLP hasta audio y visión, y ahora cubrimos casos de uso en Machine Learning para satisfacer las necesidades de nuestra comunidad siguiendo el éxito de la biblioteca Transformers. Ahora en Hugging Face Hub, hay más de 120.000 puntos de control de modelos gratuitos y accesibles para diversas tareas de aprendizaje automático, 18.000 conjuntos de datos y 20.000 aplicaciones de demostración de ML. Sin embargo, escalar modelos de transformadores en producción sigue siendo un desafío para la industria. A pesar de su alta precisión, el entrenamiento y la inferencia de modelos basados en transformadores pueden llevar mucho tiempo y ser costosos.

Para satisfacer estas necesidades, Hugging Face ha construido dos bibliotecas de código abierto: Accelerate y Optimum. Mientras que 🤗 Accelerate se enfoca en el entrenamiento distribuido listo para usar, 🤗 Optimum, como una extensión de Transformers, acelera el entrenamiento e inferencia del modelo aprovechando la máxima eficiencia del hardware objetivo de los usuarios. Optimum integra aceleradores de aprendizaje automático como ONNX Runtime y hardware especializado como Intel’s Habana Gaudi, para que los usuarios puedan beneficiarse de una considerable aceleración tanto en el entrenamiento como en la inferencia. Además, Optimum se integra sin problemas con otras herramientas de Hugging Face, heredando la misma facilidad de uso que Transformers. Los desarrolladores pueden adaptar fácilmente su trabajo para lograr una latencia más baja con menos potencia de cómputo.

Entrenamiento con ONNX Runtime

ONNX Runtime acelera el entrenamiento de modelos grandes para aumentar la velocidad de procesamiento en hasta un 40% de forma independiente, y hasta un 130% cuando se combina con DeepSpeed para los modelos basados en transformadores populares de HuggingFace. ONNX Runtime ya está integrado como parte de Optimum y permite un entrenamiento más rápido a través del marco de entrenamiento Optimum de Hugging Face.

ONNX Runtime Training logra estas mejoras en el procesamiento mediante varias optimizaciones de memoria y cálculo. Las optimizaciones de memoria permiten que ONNX Runtime maximice el tamaño del lote y utilice la memoria disponible de manera eficiente, mientras que las optimizaciones de cálculo aceleran el tiempo de entrenamiento. Estas optimizaciones incluyen, entre otras, una planificación eficiente de la memoria, optimizaciones de kernel, aplicación de múltiples tensores para el Optimizador Adam (que agrupa las actualizaciones de elemento aplicadas a todos los parámetros del modelo en uno o unos pocos lanzamientos de kernel), optimizador FP16 (que elimina muchas copias de memoria del dispositivo al host), entrenamiento de precisión mixta y optimizaciones de gráfico como fusiones y eliminaciones de nodos. El entrenamiento con ONNX Runtime admite tanto GPUs de NVIDIA como de AMD, y ofrece extensibilidad con operadores personalizados.

En resumen, permite a los desarrolladores de IA aprovechar al máximo el ecosistema con el que están familiarizados, como PyTorch y Hugging Face, y utilizar la aceleración de ONNX Runtime en el dispositivo objetivo de su elección para ahorrar tiempo y recursos.

ONNX Runtime Training en Optimum

Optimum proporciona una API ORTTrainer que extiende el Trainer en Transformers para utilizar ONNX Runtime como backend para aceleración. ORTTrainer es una API fácil de usar que contiene un bucle de entrenamiento y un bucle de evaluación completos. Admite características como la búsqueda de hiperparámetros, entrenamiento de precisión mixta y entrenamiento distribuido con varias GPUs. ORTTrainer permite a los desarrolladores de IA combinar ONNX Runtime y otras técnicas de aceleración de terceros al entrenar modelos de Transformers, lo que ayuda a acelerar aún más el entrenamiento y obtener lo mejor del hardware. Por ejemplo, los desarrolladores pueden combinar el entrenamiento de ONNX Runtime con paralelismo de datos distribuido y entrenamiento de precisión mixta integrados en el Trainer de Transformers. Además, ORTTrainer facilita la combinación del entrenamiento de ONNX Runtime con DeepSpeed ZeRO-1, que guarda memoria al particionar los estados del optimizador. Después de que se haya completado el pre-entrenamiento o el ajuste fino, los desarrolladores pueden guardar el modelo entrenado en PyTorch o convertirlo al formato ONNX con las APIs implementadas por Optimum para ONNX Runtime para facilitar la implementación para Inferencia. Y al igual que el Trainer, ORTTrainer tiene una integración completa con Hugging Face Hub: después del entrenamiento, los usuarios pueden cargar los puntos de control de su modelo en su cuenta de Hugging Face Hub.

Entonces, ¿concretamente, qué deben hacer los usuarios con Optimum para aprovechar la aceleración de ONNX Runtime para el entrenamiento? Si ya estás utilizando el Trainer, solo necesitas adaptar algunas líneas de código para beneficiarte de todas las mejoras mencionadas anteriormente. Principalmente, hay dos reemplazos que se deben aplicar. En primer lugar, reemplaza Trainer con ORTTrainer, luego reemplaza TrainingArguments con ORTTrainingArguments, que contiene todos los hiperparámetros que el entrenador utilizará para el entrenamiento y la evaluación. ORTTrainingArguments extiende TrainingArguments para aplicar algunos argumentos adicionales potenciados por ONNX Runtime. Por ejemplo, los usuarios pueden aplicar el Optimizador Adam Fusionado para obtener un rendimiento adicional. Aquí tienes un ejemplo:

-from transformers import Trainer, TrainingArguments
+from optimum.onnxruntime import ORTTrainer, ORTTrainingArguments

# Paso 1: Definir los argumentos de entrenamiento
-training_args = TrainingArguments(
+training_args = ORTTrainingArguments(
    output_dir="ruta/para/guardar/carpeta/",
-   optim = "adamw_hf",
+   optim = "adamw_ort_fused",
    ...
)

# Paso 2: Crea tu entrenador de ONNX Runtime
-trainer = Trainer(
+trainer = ORTTrainer(
    model=modelo,
    args=training_args,
    train_dataset=conjunto_entrenamiento,
+   feature="clasificación-de-secuencias",
    ...
)

# Paso 3: ¡Usa ONNX Runtime para el entrenamiento!🤗
trainer.train()

Mirando hacia el futuro

El equipo de Hugging Face está trabajando en la liberación del código de más modelos grandes y en reducir las barreras para que los usuarios se beneficien de ellos con herramientas de aceleración tanto en el entrenamiento como en la inferencia. Estamos colaborando con el equipo de entrenamiento de ONNX Runtime para llevar más optimizaciones de entrenamiento a arquitecturas de modelos más nuevas y grandes, incluyendo Whisper y Stable Diffusion. Microsoft también ha empaquetado sus tecnologías de aceleración de entrenamiento de vanguardia en el Contenedor Azure para PyTorch. Este es un entorno curado de peso ligero que incluye DeepSpeed y ONNX Runtime para mejorar la productividad de los desarrolladores de IA que entrenan con PyTorch. Además del entrenamiento de modelos grandes, el equipo de entrenamiento de ONNX Runtime también está desarrollando nuevas soluciones para el aprendizaje en el borde, es decir, entrenamiento en dispositivos con restricciones de memoria y energía.

Comenzando

Te invitamos a consultar los siguientes enlaces para obtener más información y comenzar con Optimum ONNX Runtime Training para tus modelos de Hugging Face.

  • Documentación de Optimum ONNX Runtime Training
  • Ejemplos de Optimum ONNX Runtime Training
  • Repositorio de Optimum en Github
  • Ejemplos de entrenamiento de ONNX Runtime
  • Repositorio de entrenamiento de ONNX Runtime en Github
  • ONNX Runtime
  • Tutorial de DeepSpeed y ZeRO
  • Contenedor Azure para PyTorch

🏎¡Gracias por leer! Si tienes alguna pregunta, no dudes en contactarnos a través de Github o en el foro. También puedes conectarte conmigo en Twitter o LinkedIn.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Analógico y Digital Lo Mejor de Ambos Mundos en un Sistema Eficiente en Energía

Un nuevo dispositivo combina semiconductores bidimensionales ultrafinos y materiales ferroeléctricos, con el objetivo...

Inteligencia Artificial

Mejorando la evaluación del diseño de ingeniería a través de métricas integrales para modelos generativos profundos

En el diseño de ingeniería, la dependencia de los modelos generativos profundos (DGMs) ha aumentado en los últimos añ...

Inteligencia Artificial

Fortaleciendo la industria de semiconductores de EE. UU.

Los fabricantes de chips de EE.UU. esperan el apoyo monetario del gobierno un año después de que se promulgara la leg...

Inteligencia Artificial

¿Puede (Muy) Simple Matemáticas Informar RLHF Para Modelos de Lenguaje Grandes LLMs? ¡Este artículo de IA dice que sí!

Incorporar la entrada humana es un componente clave de las recientes mejoras impresionantes en las capacidades de los...

Inteligencia Artificial

¿Pueden los LLM reemplazar a los analistas de datos? Construyendo un analista potenciado por LLM

Creo que cada uno de nosotros se ha preguntado al menos una vez durante el año pasado si (o más bien cuándo) ChatGPT ...

Inteligencia Artificial

Comienza el trabajo en el proyecto para construir la 'Vía más Sofisticada del Mundo

Funcionarios dijeron que la construcción de la 'carretera más sofisticada del mundo' en la Interestatal 94 en el cond...