Connect with us

Inteligencia artificial

Marco de inferencia de Microsoft lleva modelos de lenguaje grande de 1 bit a dispositivos locales

mm
Understanding 1-bit LLMs and Microsoft's BitNet.cpp Framework

El 17 de octubre de 2024, Microsoft anunció BitNet.cpp, un marco de inferencia diseñado para ejecutar modelos de lenguaje grande (LLM) cuantizados de 1 bit. BitNet.cpp es un progreso significativo en Gen AI, que permite la implementación eficiente de LLM de 1 bit en CPUs estándar, sin requerir GPUs costosas. Este desarrollo democratiza el acceso a los LLM, haciéndolos disponibles en una amplia gama de dispositivos y brindando nuevas posibilidades en aplicaciones de IA en dispositivos.

Entendiendo los modelos de lenguaje grande de 1 bit

Los modelos de lenguaje grande (LLM) tradicionalmente han requerido recursos computacionales significativos debido a su uso de números de punto flotante de alta precisión (generalmente FP16 o BF16) para los pesos del modelo. Esta necesidad ha hecho que la implementación de LLM sea costosa y energéticamente intensiva.

En su núcleo, los LLM de 1 bit utilizan técnicas de cuantización extremas para representar los pesos del modelo utilizando solo tres valores posibles: -1, 0 y 1, de ahí el término “1,58 bits” (ya que requiere ligeramente más de un bit para codificar tres estados).

Sistema de pesos ternarios

El concepto

La cuantización de 1 bit en BitNet.cpp es un sistema de pesos ternarios. BitNet opera con solo tres valores posibles para cada parámetro:

  • -1 (negativo)
  • 0 (neutral)
  • 1 (positivo)

Esto da como resultado un requisito de almacenamiento de alrededor de 1,58 bits por parámetro, de ahí el nombre BitNet b1.58. Esta reducción drástica en el ancho de bits de los parámetros conduce a una reducción impresionante en el uso de memoria y complejidad computacional, ya que la mayoría de las multiplicaciones de punto flotante se reemplazan con simples sumas y restas.

Fundamento matemático

La cuantización de 1 bit implica transformar los pesos y las activaciones en su representación ternaria a través de los siguientes pasos:

1. Cuantización de pesos

La cuantización de los pesos implica centralizarlos alrededor de la media (α), lo que da como resultado una representación ternaria. La transformación se expresa matemáticamente como:

Wf=Sign(Wα)

  • W es la matriz de pesos original.
  • α es la media de los pesos.
  • Sign(x) devuelve +1 si x > 0 y -1 de lo contrario.

2. Cuantización de activaciones

La cuantización de las activaciones garantiza que las entradas estén limitadas a un ancho de bits especificado:

  • Qb = 2(b−1)2^{(b-1)} es el nivel de cuantización máximo para el ancho de bits b.
  • γ es el valor absoluto máximo de x (denotado como ∣∣x∣∣∞).
  • ε es un número pequeño para prevenir desbordamientos durante los cálculos.

3. Operación BitLinear

La capa BitLinear reemplaza las multiplicaciones de matrices tradicionales con una operación simplificada:

y=Wf×x^e×(Qbβγ)

  • β es un factor de escala utilizado para minimizar errores de aproximación.
  • γ escala las activaciones.
  • Q_b es el factor de cuantización.

Esta transformación permite cálculos eficientes mientras se mantiene el rendimiento del modelo.

Implicaciones de rendimiento

Eficiencia de memoria

He pasado los últimos cinco años sumergiéndome en el fascinante mundo del Aprendizaje Automático y el Aprendizaje Profundo. Mi pasión y experiencia me han llevado a contribuir a más de 50 proyectos de ingeniería de software diversos, con un enfoque particular en AI/ML. Mi curiosidad continua también me ha llevado hacia el Procesamiento de Lenguaje Natural, un campo que estoy ansioso por explorar más a fondo.