Saltar al contenido
    Ertas

    GGUF Format Guide

    El formato universal para inferencia local de LLM cuantizados

    Model Weights

    Specification

    GGUF (GPT-Generated Unified Format) es un formato de archivo binario diseñado para almacenar modelos de lenguaje grandes cuantizados para inferencia local eficiente. Desarrollado por Georgi Gerganov como parte del proyecto llama.cpp, GGUF sucedió al formato GGML más antiguo en agosto de 2023, agregando un sistema de metadatos autodescriptivo que incorpora detalles de la arquitectura del modelo, configuración del tokenizador y parámetros de cuantización directamente en el archivo. Esto hace que los archivos GGUF sean portátiles y autónomos — todo lo necesario para cargar y ejecutar un modelo está en un solo archivo.

    El formato GGUF consta de tres secciones: un encabezado que contiene la versión del formato y el conteo de tensores, un almacén de metadatos clave-valor con la configuración del modelo (tipo de arquitectura, longitud de contexto, tamaño de vocabulario, dimensiones de embedding, conteo de cabezas de atención y datos del tokenizador), y la sección de datos de tensores que contiene los pesos reales del modelo en su representación cuantizada. El sistema de metadatos usa pares clave-valor tipados que soportan enteros, flotantes, booleanos, cadenas y arreglos, permitiendo descripciones ricas del modelo sin archivos de configuración externos.

    GGUF soporta numerosos tipos de cuantización que van desde precisión completa F32 y F16 hasta cuantizaciones agresivas como Q2_K e IQ1_S. Los niveles de cuantización más comúnmente usados son Q4_K_M (ofreciendo un buen balance entre calidad y tamaño), Q5_K_M (ligeramente más grande pero de mayor calidad) y Q8_0 (casi sin pérdida). Las variantes K-quant (Q4_K_S, Q4_K_M, Q5_K_S, etc.) usan un enfoque sofisticado de precisión mixta donde diferentes capas se cuantizan a diferentes niveles según su sensibilidad, produciendo mejor calidad que la cuantización uniforme con tamaños de archivo similares.

    When to Use GGUF

    GGUF es el formato de elección siempre que necesites ejecutar inferencia de LLM localmente — en computadoras personales, dispositivos de borde o servidores on-prem sin frameworks de inferencia dependientes de GPU. Es el formato nativo para llama.cpp y es soportado por un amplio ecosistema de herramientas de inferencia local incluyendo Ollama, LM Studio, GPT4All, koboldcpp y text-generation-webui. Si tu objetivo es desplegar un modelo ajustado para uso local sin dependencias de la nube, GGUF debería ser tu formato de exportación objetivo.

    Elige GGUF cuando necesites inferencia eficiente en CPU o cuando tu objetivo de despliegue tenga memoria GPU limitada. Las opciones de cuantización de GGUF te permiten intercambiar calidad del modelo por archivos más pequeños e inferencia más rápida, permitiendo que modelos grandes se ejecuten en hardware de consumo. Un modelo de 7B parámetros que requiere 14 GB en FP16 puede reducirse a aproximadamente 4 GB con cuantización Q4_K_M mientras retiene la mayor parte de su capacidad. Esto hace que GGUF sea esencial para despliegues sensibles a la privacidad donde los datos no pueden salir de la máquina local.

    GGUF es menos adecuado cuando necesitas máximo rendimiento de inferencia en clústeres de GPU (usa SafeTensors con vLLM o TensorRT-LLM en su lugar) o cuando necesitas continuar entrenando un modelo (GGUF es un formato solo de inferencia — usa SafeTensors o checkpoints de PyTorch para entrenamiento). Tampoco es la opción correcta para arquitecturas no-transformer que llama.cpp no soporta.

    Schema / Structure

    text
    GGUF File Structure:
    ┌─────────────────────────────────────┐
    │ Header                              │
    │  - Magic number: 0x46475547 "GGUF"  │
    │  - Version: uint32 (currently 3)    │
    │  - Tensor count: uint64             │
    │  - Metadata KV count: uint64        │
    ├─────────────────────────────────────┤
    │ Metadata Key-Value Pairs            │
    │  - general.architecture: string     │
    │  - general.name: string             │
    │  - llama.context_length: uint32     │
    │  - llama.embedding_length: uint32   │
    │  - llama.block_count: uint32        │
    │  - llama.attention.head_count: u32  │
    │  - tokenizer.ggml.model: string     │
    │  - tokenizer.ggml.tokens: [string]  │
    │  - ... (additional metadata)        │
    ├─────────────────────────────────────┤
    │ Tensor Info (for each tensor)       │
    │  - Name: string                     │
    │  - Dimensions: uint32[]             │
    │  - Type: enum (F32/F16/Q4_K/...)    │
    │  - Offset: uint64                   │
    ├─────────────────────────────────────┤
    │ Tensor Data (aligned, contiguous)   │
    │  - Raw quantized weight data        │
    └─────────────────────────────────────┘
    Estructura del archivo binario GGUF con secciones de encabezado, metadatos, info de tensores y datos de pesos

    Example Data

    bash
    # Convert a HuggingFace model to GGUF using llama.cpp
    python convert_hf_to_gguf.py ./my-fine-tuned-model \
      --outfile model-f16.gguf \
      --outtype f16
    
    # Quantize to Q4_K_M for efficient local inference
    ./llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M
    
    # Run inference with llama.cpp
    ./llama-cli -m model-q4_k_m.gguf \
      -p "Explain quantum computing in simple terms:" \
      -n 256 --temp 0.7
    
    # Inspect GGUF metadata
    python -c "
    from gguf import GGUFReader
    reader = GGUFReader('model-q4_k_m.gguf')
    for field in reader.fields.values():
        print(f'{field.name}: {field.parts[-1].tolist()}')"
    Conversión, cuantización, ejecución e inspección de archivos de modelo GGUF

    Ertas Support

    GGUF es un formato de exportación de primera clase en Ertas Studio. Después de entrenar o ajustar un modelo con el pipeline de entrenamiento en la nube de Ertas, puedes exportarlo directamente a un GGUF cuantizado en Q4_K_M (otros niveles de cuantización están en la hoja de ruta). El proceso de exportación convierte automáticamente el checkpoint de entrenamiento a GGUF e incorpora la configuración del tokenizador y los metadatos del modelo. El resultado es un único archivo autónomo listo para inferencia local.

    La exportación a GGUF es lo que hace portátil al modelo entrenado. El archivo se ejecuta en hardware local con llama.cpp, Ollama o LM Studio, sin depender de Ertas en tiempo de ejecución y sin enviar peticiones de inferencia a terceros, lo que encaja con despliegues en los que los datos que maneja el modelo deben quedarse en tus propios sistemas. El entrenamiento en sí se ejecuta en las GPU en la nube de Ertas, así que los datos de entrenamiento se suben a Ertas, y cumplir con HIPAA, el GDPR u obligaciones similares en un despliegue sigue siendo trabajo de tu organización.

    Related Resources

    Ship AI that runs on your users' devices.

    Free plan with 30 credits/mo, no card required. Paid plans from $10/mo USD.