BookinglyTech News
Inteligencia artificial

Transformers ya ejecuta cuantizaciones GGUF con los kernels de llama.cpp

Hugging Face integra los modelos GGUF en la API de transformers con from_pretrained, reutilizando los kernels de ggml. De momento, solo en Apple Silicon y con Qwen3.5.

2 min de lecturaHugging Face Blog0 vistas

Hugging Face ha metido soporte para GGUF dentro de transformers. Se acabó el tener que saltar a otra herramienta: eliges un checkpoint del Hub, lo cargas con from_pretrained pasando el gguf_file y generas en tu propia máquina. El arranque es limitado, eso sí: Macs con Apple Silicon, PyTorch reciente y la primera arquitectura soportada es Qwen3.5. Todo esto vive en main hasta la próxima release.

GGUF es el formato de llama.cpp para inferencia local. Mete pesos y metadatos en un solo fichero, incluido el tokenizer y, si toca, la plantilla de chat, y admite varios niveles de cuantización. Variantes como Q4_K_M mezclan precisiones: la mayoría de tensores a 4 bits y los sensibles a más. Para hacerse una idea, el Qwen3.5-4B que publica Unsloth ocupa 8,42 GB en BF16 sin cuantizar, 3,53 GB en Q6_K, 3,14 GB en Q5_K_M y 2,74 GB en Q4_K_M. La recomendación de Hugging Face es empezar por Q4_K_M y subir si sobra memoria, sabiendo que el degradado depende del modelo y de la tarea.

Rendimiento y detalles de carga

Para no quedarse atrás respecto a llama.cpp, la implementación reutiliza sus kernels de ggml a través de la librería kernels y recorta sobrecarga en generate. Si los pesos se quedan empaquetados en Metal, transformers carga las capas de ggml para Metal y usa ggml-org/ggml-attn como implementación de atención. Si ese kernel no se puede descargar, cae a sdpa con un aviso, y siempre se puede forzar con attn_implementation="sdpa". Sin kernel de cuantización compatible, el cargador descomprime el modelo y gasta más memoria.

El único paso específico de GGUF es indicar el repositorio y el nombre del fichero. A partir de ahí, todo es la API de siempre: plantilla de chat, tokenización y model.generate().

Servirlo como API

El mismo checkpoint se puede levantar con transformers serve, que expone un endpoint compatible con OpenAI. El argumento del modelo usa el formato <model_id>:<fichero>.gguf, lo que permite elegir una cuantización concreta dentro de un repositorio que tenga varias. Para modelos con plantilla de razonamiento hay tres modos: --reasoning off, --reasoning on y el auto por defecto. El servidor escucha en localhost:8000/v1, y clientes como Jan o Pi se conectan añadiendo un proveedor compatible con OpenAI.

Queda por ver la comparativa con llama.cpp. El anuncio dice que medirá tres checkpoints, un denso pequeño, otro denso mayor y un modelo de mezcla de expertos, pero no suelta cifras. Tampoco hay soporte para CUDA ni para otras plataformas, y estar en main significa que aún no es algo que se despliegue sin pensarlo. Para quien quiera trastear con modelos locales en un Mac, la barrera de entrada acaba de bajar un escalón.