- bitnet.cpp de Microsoft es el framework oficial de inferencia para modelos de lenguaje grandes (LLM) de 1 bit, y permite inferencia rápida y sin pérdida en CPU y GPU
- Logra una mejora de velocidad de 1.37 a 5.07 veces y una reducción de energía de 55.4 a 70% en CPU ARM, y una mejora de velocidad de 2.37 a 6.17 veces y una reducción de energía de 71.9 a 82.2% en CPU x86
- Agrega implementación de kernels en paralelo y cuantización de embeddings, lo que ofrece una mejora adicional de rendimiento de 1.15 a 2.1 veces frente a la versión previa
- El modelo BitNet b1.58 puede ejecutarse en una sola CPU a una velocidad de 5 a 7 tokens por segundo, ampliando la posibilidad de usar modelos ultragrandes en entornos locales
- Desarrollado sobre llama.cpp y T-MAC, contribuye a ampliar el ecosistema open source para hacer más eficiente la inferencia de LLM de bajo bit
Resumen de bitnet.cpp
- bitnet.cpp es el framework oficial de inferencia para LLM de 1 bit (por ejemplo, BitNet b1.58) y ofrece kernels optimizados para CPU y GPU
- El soporte para NPU se agregará más adelante
- La primera versión soporta inferencia en CPU y demostró mejoras en velocidad y eficiencia energética tanto en arquitecturas ARM como x86
- CPU ARM: mejora de velocidad de 1.37 a 5.07 veces, reducción de energía de 55.4 a 70%
- CPU x86: mejora de velocidad de 2.37 a 6.17 veces, reducción de energía de 71.9 a 82.2%
- El modelo BitNet b1.58 de 100B parámetros puede ejecutarse en una sola CPU a 5 a 7 tokens por segundo
Optimizaciones más recientes
- Se añadieron la implementación de kernels en paralelo y funciones de configuración de tiling y cuantización de embeddings, logrando una mejora adicional de velocidad de 1.15 a 2.1 veces frente a antes
- Se confirmaron mejoras de rendimiento en distintas plataformas de hardware y cargas de trabajo
- Los detalles técnicos se ofrecen en el documento
optimization guide
Demo y modelos oficiales
- Hay una demo para ejecutar el modelo BitNet b1.58 3B en Apple M2
- Como modelo oficial, BitNet-b1.58-2B-4T está publicado en Hugging Face y es compatible con CPU x86 y ARM
- Entre los modelos compatibles se incluyen bitnet_b1_58-large(0.7B), bitnet_b1_58-3B(3.3B), Llama3-8B-1.58, Falcon3 y la serie Falcon-E
Instalación y compilación
- Requisitos: Python 3.9 o superior, CMake 3.22 o superior, Clang 18 o superior
- Los usuarios de Windows deben instalar Visual Studio 2022
- Para usuarios de Debian/Ubuntu se ofrece un script de instalación automática
- Se recomienda usar un entorno Conda, y es posible configurar el entorno del modelo con
setup_env.py
- Después de descargar el modelo desde Hugging Face, puede ejecutarse desde una ruta local
Uso y benchmarks
- Con
run_inference.py se ejecuta la inferencia de modelos cuantizados
- Argumentos principales: ruta del modelo (-m), prompt (-p), número de hilos (-t), tamaño de contexto (-c), temperatura (-temp)
- Con el script
e2e_benchmark.py es posible medir rendimiento especificando cantidad de tokens, longitud del prompt y número de hilos
- Si no hay un modelo público disponible, se puede usar
generate-dummy-bitnet-model.py para generar un modelo dummy y luego ejecutar benchmarks
Conversión de modelos y FAQ
- Se ofrece un script para convertir checkpoints
.safetensors al formato gguf
- En el FAQ se explica cómo resolver errores de compilación de llama.cpp (relacionados con std::chrono) y el procedimiento para configurar el entorno de clang en Windows
- Es necesario inicializar el entorno desde el símbolo del sistema para desarrolladores de Visual Studio o desde PowerShell
1 comentarios
Opiniones de Hacker News
Microsoft en realidad está usando 2 bits, no 1.58 bits
En ese caso se pueden representar cuatro valores: -1, 0, 1 y 2
Dado que las sinapsis inhibitorias representan entre el 20 y el 30%, creo que esta estructura encaja bien con la estructura del cerebro biológico
A menudo me pregunto qué forma tendría un “LLM de funcionalidad mínima”
Es decir, un modelo que con la menor cantidad posible de información pueda aun así dar respuestas razonables complementando el resto con búsquedas en Google
Creo que haría una gran diferencia si lugares como Encyclopedia Britannica vendieran sus datos a los LLM y ofrecieran servicios de verificación de resultados
Wikipedia también está bien, pero es una lástima que tenga tantos errores y sesgos humanos
Los LLM pequeños ya están avanzando en esa dirección; les falta conocimiento general, pero su capacidad para usar herramientas (por ejemplo, googlear) está mejorando cada vez más
Aun así, sigue siendo un problema difícil distinguir claramente entre lo que saben y lo que no saben
Como un ingeniero que no conoce un dispositivo específico: tiene capacidad para resolver problemas, pero no tiene el conocimiento detallado
No estoy seguro de que un modelo así pueda resolverlo simplemente con búsquedas en Google o en la wiki, pero creo que la arquitectura de LLM de borde terminará siendo el estándar
Cuanta más información esté incluida en los datos de entrenamiento, más fácil será recuperarla e interpretarla
Por eso, un entrenamiento que dependa de memoria externa (como búsqueda, etc.) en lugar de memorización interna podría ser práctico
Yo más bien pienso lo contrario
Según el paper original (pdf), se necesitan alrededor de 4 a 5 veces más parámetros que en un modelo fp16
Se puede intentar construir directamente, pero como hay que entrenarlo desde cero, las opciones son limitadas
Aun así, se espera que la velocidad de inferencia sea más rápida que la de los modelos cuantizados modernos de 4 bits y 8 bits
El verdadero punto clave es el ahorro de energía
Dicen que en inferencia con CPU se puede reducir entre 70 y 82%
Si un modelo de 1 bit llega a ser lo suficientemente bueno, se podrá ejecutar un LLM en hardware común sin GPU, lo que cambiaría el panorama de la accesibilidad
Aunque bitnet.cpp se presenta como el framework oficial de inferencia para LLM de 1 bit (BitNet b1.58, etc.),
hay confusión sobre si es “1 bit o 1 trit”
Mezclar ambos conceptos genera confusión
Me da gusto ver que este proyecto sigue en desarrollo
El año pasado vi este post relacionado y sentí que tenía potencial, pero fue una pena que no salieran modelos nuevos
Lo realmente interesante es la dirección de entrenar modelos binarios directamente sin operaciones de punto flotante
Hay un paper relacionado en NeurIPS 2024
Decir que “se puede ejecutar un BitNet de 100B” no significa que exista el modelo, sino que el framework de inferencia lo hace posible
Aunque busques “1-bit 100b model”, no hay ningún modelo descargable
La calidad de salida del modelo se parece más al balbuceo nivel GPT-2 y repite párrafos tal cual
Incluso reutiliza constantemente citas falsas como
(Jenkins, 2010)El título lleva a confusión
En realidad no es un modelo entrenado de 100B, sino un framework de inferencia capaz de manejarlo
Yo estoy ejecutando un modelo cuantizado de 70B en una M2 Max de 96GB con llama.cpp + LiteLLM, y el cuello de botella es el ancho de banda de memoria
El enfoque de 1.58 bits tiene una estructura que convierte multiplicaciones de matrices en sumas, así que en CPU tiene un patrón de cómputo fundamentalmente distinto
Si fuera posible ejecutar un modelo de clase 100B a 5~7 tokens por segundo en un solo núcleo de CPU, sería un punto de inflexión para la inferencia on-device
El framework ya está listo; ahora alguien tiene que entrenar un modelo real
Los resultados reales son pobres en comparación con la promoción
Para entrenamiento seguirían haciendo falta GPU, pero el hardware para inferencia podría volverse mucho más simple
He usado un modelo que generaba a 7 tokens/segundo, y era tan frustrante como caminar detrás de una persona lenta
En local, habría que apuntar como mínimo a más de 10 tokens/segundo
Las instrucciones FMA (Fused Multiply-Add) de los CPU modernos tienen un rendimiento casi igual al de una suma simple
Me pregunto cuándo las PC con NPU empezarán de verdad a mostrar resultados serios
AMD está logrando buenos resultados con kernels híbridos de inferencia NPU/iGPU
Si estos modelos grandes corren en NPU, la eficiencia energética debería ser mucho mejor que en CPU
Desde entonces me hice fan del NPU. Claro, no está al nivel de una RTX 5090, pero es muchísimo más eficiente que el CPU
El ecosistema de software es inestable, pero funciona con uso de CPU/GPU casi en 0
Yo entendía que estaban diseñados principalmente para bajo consumo