Ajuste fino de LLM Ajuste fino eficiente de parámetros (PEFT) – LoRA y QLoRA – Parte 1

Ajuste preciso de LLM Eficiente ajuste de parámetros (PEFT) - LoRA y QLoRA - Parte 1

En el mundo en constante evolución de la Inteligencia Artificial (IA) y el Procesamiento del Lenguaje Natural (NLP), los Modelos de Lenguaje Amplio y la IA Generativa se han convertido en herramientas poderosas para diversas aplicaciones. Para lograr los resultados deseados de estos modelos, se utilizan diferentes enfoques que se pueden clasificar en tres categorías principales: Ingeniería de Inputs, Ajuste Fino y Creación de un nuevo modelo. A medida que avanzamos de un nivel a otro, los requisitos en términos de recursos y costos aumentan significativamente.

En esta publicación de blog, exploraremos estos enfoques y nos centraremos en una técnica eficiente conocida como Ajuste Fino con Parámetros Eficientes (PEFT) que nos permite ajustar modelos con una infraestructura mínima mientras se mantiene un alto rendimiento.

Ingeniería de Inputs con Modelos Existentes

En el nivel básico, lograr los resultados esperados de los Modelos de Lenguaje Amplio implica una cuidadosa ingeniería de inputs. Este proceso implica crear inputs adecuados para obtener las respuestas deseadas del modelo. La Ingeniería de Inputs es una técnica esencial para diversos casos de uso, especialmente cuando las respuestas generales son suficientes.

Creación de un Nuevo Modelo

En el nivel más alto, crear un nuevo modelo implica entrenar un modelo desde cero, específicamente adaptado para una tarea o dominio particular. Este enfoque proporciona el más alto nivel de personalización, pero requiere de una gran potencia computacional, una cantidad extensa de datos y tiempo.

Ajuste Fino de Modelos Existentes

Cuando se trata de casos de uso específicos que requieren adaptaciones del modelo, el ajuste fino se vuelve esencial. El ajuste fino nos permite aprovechar modelos pre-entrenados existentes y adaptarlos a tareas o dominios específicos. Al entrenar el modelo con datos específicos del dominio, podemos ajustarlo para que funcione bien en tareas específicas.

Sin embargo, este proceso puede requerir muchos recursos y ser costoso, ya que se modificarán todos los millones de parámetros como parte del entrenamiento. El ajuste fino del modelo requiere una gran cantidad de datos de entrenamiento, una infraestructura robusta y esfuerzo.

En el proceso de ajuste fino completo de los Modelos de Lenguaje Amplio, existe el riesgo de un olvido catastrófico, donde se pierde el conocimiento adquirido previamente durante el preentrenamiento.

Aplicar el ajuste fino completo a un solo modelo para diferentes tareas específicas del dominio a menudo resulta en la creación de modelos grandes adaptados a tareas específicas, sin modularidad. Lo que necesitamos es un enfoque modular que evite modificar todos los parámetros al tiempo que demande menos recursos de infraestructura y menos datos.

Existen diversas técnicas, como el Ajuste Fino con Parámetros Eficientes (PEFT), que ofrecen una forma de realizar un ajuste fino modular con recursos y costos óptimos.

Ajuste Fino con Parámetros Eficientes (PEFT)

PEFT es una técnica diseñada para ajustar modelos minimizando la necesidad de recursos y costos extensos. PEFT es una excelente opción cuando se trata de tareas específicas del dominio que requieren adaptación del modelo. Al emplear PEFT, podemos lograr un equilibrio entre mantener el conocimiento valioso del modelo pre-entrenado y adaptarlo de manera efectiva a la tarea objetivo con menos parámetros. Existen varias formas de lograr un ajuste fino eficiente de parámetros. Los Parámetros de Rango Bajo o LoRA y QLoRA son los más ampliamente utilizados y efectivos.

Parámetros de Rango Bajo

Este es uno de los métodos más utilizados, donde se agregan modularmente un conjunto de parámetros a la red con un espacio dimensional más bajo. En lugar de modificar toda la red, solo se modifica esta red modular de rango bajo para lograr los resultados.

Profundicemos en una de las técnicas más populares llamada LoRA y QLoRA

Adaptación de Rango Bajo (LoRA)

La Adaptación de Rango Bajo proporciona un enfoque modular para ajustar fino un modelo para tareas específicas del dominio y proporciona la capacidad de aprendizaje de transferencia. La técnica de LoRA se puede implementar con menos recursos y es eficiente en memoria.

En la siguiente imagen, se puede ver la descomposición de rango/dimensión, que reduce considerablemente la huella de memoria.

Aplicaremos esto mediante la adición de un adaptador LoRA a las redes de alimentación directa existentes. Congelaremos las redes de alimentación directa originales y utilizaremos la red LoRA para el entrenamiento. Consulte la imagen a continuación para obtener más detalles.

  • LoRA se puede implementar como un adaptador diseñado para mejorar y expandir las capas existentes de la red neuronal. Introduce una capa adicional de parámetros entrenables (pesos) mientras mantiene los parámetros originales en un estado congelado. Estos parámetros entrenables tienen un rango (dimensión) sustancialmente reducido en comparación con las dimensiones de la red original. Este es el mecanismo a través del cual LoRa simplifica y agiliza el proceso de adaptación de los modelos originales a tareas específicas del dominio. Ahora, echemos un vistazo más de cerca a los componentes dentro de la red adaptadora de LoRA.
  • Los parámetros pre-entrenados del modelo original (W) se mantienen congelados. Durante el entrenamiento, estos pesos no se modificarán.
  • Se agrega concurrentemente un nuevo conjunto de parámetros a las redes WA y WB. Estas redes utilizan vectores de peso de rango bajo, donde las dimensiones de estos vectores se representan como dxr y rxd. Aquí, ‘d’ representa la dimensión del vector de parámetros de la red congelada original, mientras que ‘r’ significa el rango bajo o dimensión elegida. El valor de ‘r’ siempre es menor, y cuanto menor sea ‘r’, más ágil y simplificado será el proceso de entrenamiento del modelo. Determinar el valor apropiado de ‘r’ es una decisión crucial en LoRA. Optar por un valor más bajo resulta en un entrenamiento del modelo más rápido y rentable, aunque puede no producir resultados óptimos. Por el contrario, seleccionar un valor más alto para ‘r’ extiende el tiempo y costo de entrenamiento, pero mejora la capacidad del modelo para manejar tareas más complejas.
  • Los resultados de la red original y la red de rango bajo se calculan mediante un producto punto, lo que da como resultado una matriz de peso de dimensión ‘n’, que se utiliza para generar el resultado.
  • Este resultado luego se compara con los resultados esperados (durante el entrenamiento) para calcular la función de pérdida, y los pesos de WA y WB se ajustan en función de la función de pérdida como parte de la retropropagación, al igual que en las redes neuronales estándar.

Exploraremos cómo este enfoque contribuye a la reducción de la huella de memoria y minimiza los requisitos de infraestructura. Consideremos un escenario donde tenemos una matriz de parámetros de 512×512 dentro de la red de alimentación directa, lo que equivale a un total de 262,144 parámetros que deben someterse a entrenamiento. Si elegimos congelar estos parámetros durante el proceso de entrenamiento e introducir un adaptador LoRA con un rango de 2, el resultado es el siguiente: WA tendrá 512 * 2 parámetros y WB también tendrá 512 * 2 parámetros, sumando un total de 2,048 parámetros. Estos son los parámetros específicos que se someten a entrenamiento con datos específicos del dominio. Esto representa una mejora significativa en la eficiencia computacional, reduciendo sustancialmente el número de cálculos requeridos durante el proceso de retropropagación. Este mecanismo es fundamental para lograr un entrenamiento acelerado.

El aspecto más ventajoso de este enfoque es que el adaptador LoRA entrenado se puede preservar de forma independiente y emplearse como módulos distintos. Al construir módulos específicos del dominio de esta manera, logramos efectivamente un alto nivel de modularidad. Además, al abstenernos de alterar los pesos originales, evitamos con éxito el problema del olvido catastrófico.

Ahora, profundicemos en mejoras adicionales que se pueden implementar sobre LoRA, especialmente a través de la utilización de QLoRA, para elevar la optimización al siguiente nivel.

Adaptación de Bajo Rango Cuantificado (QLoRA)

QLoRA extiende LoRA para mejorar la eficiencia al cuantificar los valores de peso de la red original, desde tipos de datos de alta resolución, como Float32, a tipos de datos de baja resolución como int4. Esto conduce a una reducción de las demandas de memoria y cálculos más rápidos.

Existen tres optimizaciones clave que QLoRA proporciona además de LoRA, lo que hace de QLoRA uno de los mejores métodos de PEFT.

Cuantificación NF4 de 4 bits

NormalFloat4 de 4 bits es un tipo de dato optimizado que se puede utilizar para almacenar pesos, lo que reduce considerablemente la huella de memoria. La cuantificación NF4 de 4 bits es un proceso de 3 pasos.

  • Normalización y cuantificación: Como parte de los pasos de normalización y cuantificación, los pesos se ajustan a una media cero y una varianza unitaria constante. Un tipo de dato de 4 bits solo puede almacenar 16 números. Como parte de la normalización, los pesos se mapean a estos 16 números, distribuidos centrados en cero, y en lugar de almacenar los pesos, se almacena la posición más cercana. Aquí tienes un ejemplo

Supongamos que tenemos un peso FP32 con un valor de 0.2121. Una división de 4 bits entre -1 y 1 tendrá las siguientes posiciones numéricas.

0.2121 es el número más cercano a 0.1997, que es la décima posición. En lugar de guardar el FP32 de 0.2121, guardamos 10.

La fórmula típica:

int4Tensor = roundedValue(totalNumberOfPositions / absmax(inputXTensor)) * FP32WeightsTensor En el ejemplo anterior totalNumberOfPositions = 16

El valor totalNumberOfPositions / absmax(inputXTensor) se llama constante de cuantificación

Obviamente, existe una pérdida de datos cuando normalizamos y cuantificamos a medida que pasamos de FP32, que es un tipo de dato de alta resolución, a un tipo de dato de baja resolución. La pérdida no es grande siempre y cuando no haya valores atípicos en el tensor de entrada, lo cual podría afectar a absmax() y, en última instancia, alterar la distribución. Para evitar ese problema, generalmente cuantizamos los pesos de forma independiente por bloques más pequeños, lo que normalizará los valores atípicos.

  • Des-cuantificación: Para des-cuantificar los valores, hacemos exactamente lo contrario.
dequantizedTensor = int4Tensor / roundedValue(totalNumberOfPositions / absmax(inputXTensor))En el ejemplo anterior totalNumberOfPositions = 16

La cuantificación NormalFloat de 4 bits se aplica a los pesos del modelo original; los pesos del adaptador LoRA serán FP32, ya que todo el entrenamiento se realizará en estos pesos. Una vez que se complete todo el entrenamiento, los pesos originales se des-cuantificarán.

Doble Cuantificación

La doble cuantificación reduce aún más la huella de memoria al cuantificar las constantes de cuantificación. En el paso anterior de cuantificación de FP4 de 4 bits, se calculó la constante de cuantificación. Incluso eso se puede cuantificar para obtener una mayor eficiencia, y eso es lo que hacemos en la Doble Cuantificación.

Dado que la cuantización se realiza en bloques, para evitar valores atípicos, generalmente se utilizan 64 pesos en 1 bloque, lo que resultará en una constante de cuantización. Estas constantes de cuantización se pueden cuantizar aún más para reducir la huella de memoria.

Supongamos que agrupamos 64 parámetros/pesos por bloque, y cada constante de cuantización ocupa 32 bits, ya que es FP32. Esto agrega aproximadamente 0.5 bits por parámetro en promedio, lo que significa que estamos hablando de al menos 500,000 bits para un modelo típico de 1 millón de parámetros.

Con la doble cuantización, aplicamos la cuantización a estas constantes de cuantización, lo que optimiza aún más el uso de memoria. Podemos tomar un grupo de 256 valores de cuantización y aplicar una cuantización de 8 bits. Podemos lograr aproximadamente 0.127 bits por parámetro, lo que reduce el valor a 125,000 bits para el modelo de 1 millón de parámetros.

Aquí está el cálculo: Tenemos 64 pesos en 256 bloques, que son 32 bits, es decir, 32/(64*256), que es 0.001953125.

Tenemos 8 bits para 64 pesos, es decir, 8/64, que es 0.125.

Si sumamos 0.125+0.001953125, tenemos aproximadamente 0.127.

Paginación de memoria unificada

En combinación con las técnicas anteriores, QLoRA también utiliza la función de memoria unificada de nVidia, que permite transferencias de páginas sin problemas entre la GPU y la CPU cuando la GPU se queda sin memoria, lo que permite manejar los picos repentinos de memoria en la GPU y solucionar los problemas de desbordamiento de memoria.

LoRA y QLoRA son dos de las técnicas más emergentes y ampliamente utilizadas para el ajuste fino eficiente de parámetros.

En la próxima parte, implementaremos QLoRA; hasta entonces, diviértete con las LLMs.

Espero que esto haya sido útil; deja tus comentarios y opiniones…

Hasta luego…

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

Ciencia de Datos

Aprendizaje Profundo en Sistemas de Recomendación Una introducción.

Los sistemas de recomendación se encuentran entre las aplicaciones de Aprendizaje Automático industrial de más rápido...

Inteligencia Artificial

Conoce Objaverse-XL Un conjunto de datos abierto de más de 10 millones de objetos en 3D.

Un avance reciente en IA ha sido la importancia de la escala para impulsar los avances en varios dominios. Los modelo...

Noticias de Inteligencia Artificial

AI Ahora en el Aire Conoce a Ashley, el Primer Bot de DJ del Mundo.

Live 95.5, una popular estación de radio con sede en Portland, Oregón, ha dado un paso audaz hacia el futuro al prese...

Inteligencia Artificial

Ingenieros del MIT desarrollan réplica robótica del ventrículo derecho del corazón

Los ingenieros de la prestigiosa Universidad Tecnológica de Massachusetts (MIT) han desarrollado una revolucionaria r...