Ir al contenido
tendencias

Revista

GGUF y cuantización: Q4_K_M vs Q6_K vs Q8_0, medidos

El formato GGUF y sus cuantizaciones determinan el equilibrio exacto entre consumo de VRAM y fidelidad. He medido Q4_K_M, Q6_K y Q8_0 en mi RTX 4090 para comprobar si de verdad se pierde precisión al comprimir modelos.

Texto: 12 min de lectura

👁 113 lecturas

El formato GGUF permite comprimir modelos de lenguaje para ejecutarlos en hardware doméstico mediante diferentes niveles de cuantización como Q4_K_M, Q6_K o Q8_0. La cuantización GGUF es el método que decide cuántos bits asignamos a cada peso: en mis pruebas reales, Q4_K_M representa el mínimo razonable para no degradar el texto, mientras que Q5_K_M y Q6_K resultan prácticamente indistinguibles del original y Q8_0 solo aporta ventaja si dispones de memoria de sobra. Tienes una visión completa del ecosistema en la guía de IA local de este blog.

A fecha de 17 de octubre de 2026

  • Los archivos GGUF de Bielik v3.0 los publica oficialmente SpeakLeash en Hugging Face bajo licencia Apache 2.0 (uso comercial permitido).
  • El repositorio de 1.5B solo incluye F16 y Q8_0; el de 4.5B ofrece F16 y Q8_0; la versión 11B cuenta con Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16 y F16.
  • Hice el test sobre llama.cpp con CUDA (compilación 11194 del 26 de septiembre). La versión más reciente de llama.cpp es la 0.7.0 del 15 de octubre, bajo licencia MIT.
  • En Ollama, Bielik 11B v3.0 no tiene etiqueta predeterminada: debes especificar la variante exacta, como :Q4_K_M.

Qué cuantización GGUF elegir: conclusiones directas

  • Q4_K_M: el archivo más pequeño con el que el texto no sufre de forma perceptible. En el modelo de 11B ocupa 6,72 GB y coincide en el token más probable con Q8_0 en el 94,1% de los casos.
  • Q5_K_M y Q6_K: si tu tarjeta gráfica lo permite, es el mejor equilibrio. La diferencia de perplejidad respecto a Q8_0 entra dentro del margen de error de la medición.
  • Q8_0: prácticamente idéntico al original en coma flotante (96,7% de coincidencia con F16 en 1.5B), pero duplica el tamaño de Q4_K_M y reduce los tokens por segundo.
  • Q3_K_M e inferiores: solo como recurso extremo en arquitecturas muy grandes. En modelos pequeños como 1.5B en Q2_K, las respuestas pierden todo el sentido (0 aciertos de 12 pruebas).
  • Un modelo grande en Q4 supera a un modelo pequeño en Q8: el de 11B en Q3_K_M (5,40 GB) resolvió 11 de 12 tareas, mientras que el de 4.5B en Q8_0 (5,06 GB) solo acertó 5.

Qué es GGUF

GGUF es un formato binario desarrollado por el equipo de ggml-org (los creadores de llama.cpp) introducido en agosto de 2023. Su gran ventaja técnica reside en que empaqueta en un único archivo tanto los tensores con los pesos del modelo como todos sus metadatos críticos: arquitectura, configuración del tokenizador, plantilla de chat y límite de contexto. Esto hace posible cargar el mismo binario en llama.cpp, en LM Studio o en Ollama, e interactuar con interfaces como Open WebUI.

La especificación define una nomenclatura estandarizada: Nombre-Tamaño-Ajuste-Versión-Codificación.gguf. De este modo, en Bielik-11B-v3.0-Instruct.Q4_K_M.gguf, la parte final identifica con exactitud el algoritmo de cuantización aplicado.

Qué significan Q4_K_M, Q6_K, Q8_0, F16 e IQ

Cuantizar un modelo consiste en representar sus pesos matemáticos con menos bits. En su estado sin comprimir, cada peso suele ocupar 16 bits (F16 o BF16). Con Q8_0 se pasa a unos 8,5 bits por peso, y con Q4_K_M baja a menos de 5 bits. El archivo resultante ocupa menos espacio en disco, encaja en GPUs con menos VRAM y genera texto más rápido al verse menos limitado por el ancho de banda de la memoria, a cambio de introducir una ligera desviación numérica en cada peso.

Variante Bits por peso Estructura técnica
F16 / BF16 16 Sin cuantización, referencia base
Q8_0 8,5 Bloques de 32 pesos, escala simple
Q6_K 6,56 k-quant, superbloques de 256 pesos
Q5_K_M 5,70 Q5_K, tensores clave en Q6_K
Q4_K_M 4,89 Q4_K, mitad de attn_v y ffn_down en Q6_K
Q3_K_M 4,00 Q3_K, parte de los tensores en Q4_K
IQ4_XS, IQ3, IQ2 2,4-4,5 i-quants no lineales, usan imatrix

Los valores de bits por peso proceden de la documentación de llama-quantize (medidos sobre Llama 3.1 8B). La K hace referencia a los k-quants, donde los pesos se agrupan en superbloques de 256 elementos y las propias escalas se cuantizan para ahorrar espacio. Los sufijos _S, _M y _L indican esquemas mixtos: en Q4_K_M, las capas más críticas reciben mayor precisión (Q6_K), mientras que en Q4_K_S se comprime todo a Q4_K. Los IQ son cuantizaciones con rejillas no lineales diseñadas para operar por debajo de 4 bits. Por último, una imatrix (matriz de importancia) analiza un texto de calibración para detectar qué pesos específicos son más sensibles y preservarlos con menor error.

Mediciones en mi RTX 4090

Realicé las pruebas el 17 de octubre de 2026 en mi equipo con una tarjeta NVIDIA GeForce RTX 4090 de 24 GB, procesador Intel Core i9-14900KF, 64 GB de memoria RAM y Windows 11. Ejecuté llama.cpp con aceleración CUDA completa, manteniendo el modelo íntegramente en la VRAM de la tarjeta.

  • Modelos analizados: descargué los binarios oficiales F16 y Q8_0 de Bielik 1.5B v3.0, así como los Q8_0 de 4.5B y 11B desde el perfil de speakleash en Hugging Face, validando sus sumas sha256. El resto de variantes intermedias las generé mediante llama-quantize (para 1.5B partiendo de F16; para 4.5B y 11B a partir de Q8_0). En el caso de 11B sumé el Q4_K_M oficial que ya tenía configurado en Ollama.
  • Perplejidad y coincidencia: empleé llama-perplexity con un contexto de 2048 sobre un texto literario extenso (aproximadamente 7.900 palabras en dominio público). La coincidencia refleja el porcentaje de tokens en los que la variante elige exactamente la misma palabra más probable que el archivo de referencia (F16 en 1.5B; Q8_0 en 4.5B y 11B).
  • Rendimiento: medido con llama-bench simulando una generación continua de 128 tokens, con 3 repeticiones por prueba.
  • Uso de VRAM: incremento reportado por nvidia-smi con llama-server en ejecución bajo un contexto de 4096 tokens.
  • Pruebas de tareas: batería de 12 preguntas cortas de respuesta unívoca (declinaciones, ortografía, porcentajes, salida estructurada en JSON y comprensión) evaluadas con temperatura 0.

Resultados con el modelo de 1.5B (de F16 a Q2_K)

Variante Tamaño Perplejidad Coincidencia F16
F16 3,20 GB 51,04 Base
Q8_0 1,70 GB 51,08 96,7%
Q6_K 1,31 GB 50,86 93,2%
Q5_K_M 1,14 GB 51,64 90,1%
Q4_K_M 0,97 GB 54,27 83,6%
Q4_K_M + imatrix 0,97 GB 52,21 88,1%
IQ4_XS + imatrix 0,87 GB 53,44 85,8%
Q3_K_M 0,78 GB 68,20 67,0%
Q2_K 0,61 GB 401,80 30,9%
Bielik 1.5B: coincidencia con F16, % de tokens (17.10.2026)
Q8_096,7
Q6_K93,2
Q5_K_M90,1
Q4_K_M + imatrix88,1
IQ4_XS + imatrix85,8
Q4_K_M83,6
Q3_K_M67,0
Q2_K30,9
Variante Generación VRAM Aciertos
F16 216,9 tok/s 3,5 GB 5/12
Q8_0 327,4 tok/s 2,1 GB 4/12
Q6_K 368,9 tok/s 1,8 GB 6/12
Q5_K_M 365,7 tok/s 1,6 GB 7/12
Q4_K_M 422,1 tok/s 1,4 GB 6/12
Q3_K_M 376,6 tok/s 1,3 GB 3/12
Q2_K 464,0 tok/s 1,1 GB 0/12

Un modelo de 1.5B resulta demasiado modesto para tareas de razonamiento riguroso al margen de cómo esté cuantizado: en F16 cometió fallos factuales básicos de atribución de autoría. No obstante, al bajar a Q3_K_M las alucinaciones se dispararon por completo, y en Q2_K entró en bucles repetitivos respondiendo únicamente números incoherentes.

Resultados con el modelo de 11B (de Q8_0 a Q3_K_M)

Variante Tamaño Perplejidad Coincidencia Q8_0
Q8_0 (oficial) 11,87 GB 4,74 Base
Q6_K 9,16 GB 4,74 97,2%
Q5_K_M 7,91 GB 4,75 96,0%
Q4_K_M (oficial) 6,72 GB 4,76 94,1%
Q4_K_M (propio de Q8) 6,72 GB 4,77 94,1%
Q3_K_M 5,40 GB 4,89 89,9%
Variante Generación VRAM 4k / 32k Aciertos
Q8_0 67,0 tok/s 12,2 / 17,7 GB 9/12
Q6_K 84,0 tok/s 9,7 / 15,2 GB 10/12
Q5_K_M 94,9 tok/s 8,6 / 14,1 GB 10/12
Q4_K_M 108,0 tok/s 7,5 / 13,0 GB 10/12
Q3_K_M 127,3 tok/s 6,3 / 11,7 GB 11/12

La fila Q4_K_M oficial corresponde al archivo descargado. Mi versión cuantizada manualmente desde Q8_0 arrojó el mismo peso exacto y cifras operativas equivalentes (109,1 tok/s y 10/12 aciertos).

Bielik 11B: velocidad en generación, tok/s en RTX 4090 (17.10.2026)
Q3_K_M127,3
Q4_K_M108,0
Q5_K_M94,9
Q6_K84,0
Q8_067,0

De estos datos se extraen patrones claros:

  • Hasta Q5_K_M, las diferencias de perplejidad caen por debajo del margen de error habitual (±0,10 en 11B). La primera caída detectable de fidelidad aparece en Q4_K_M con modelos pequeños y en Q3_K_M con modelos mayores.
  • Cuanto mayor es el volumen de parámetros, mejor tolera la compresión. Q4_K_M retuvo un 94,1% de fidelidad de tokens en 11B, frente al 83,6% en 1.5B y el 82,7% en 4.5B.
  • Aplicar imatrix aporta mejoras gratuitas: Q4_K_M con calibración retuvo exactamente el mismo peso en disco pero subió su coincidencia de tokens del 83,6% al 88,1%.
  • Las pruebas sintéticas de 12 preguntas muestran fluctuaciones estadísticas menores (oscilando entre 9 y 11 aciertos), por lo que la perplejidad y el análisis token a token resultan mucho más concluyentes.

Qué variante elegir según tu VRAM (8, 12, 16 y 24 GB)

Los consumos de VRAM expuestos reflejan el aislamiento del modelo cargado en llama-server. En un entorno de escritorio con Windows y navegadores web activos, debes reservar entre 1 y 2 GB adicionales para la interfaz gráfica. Si evalúas el impacto económico de tu hardware frente a servidores remotos, puedes leer el desglose sobre coste real de IA local frente a API.

  • 8 GB de VRAM: Bielik 11B en Q3_K_M (consume 6,3 GB con contexto 4096) o bien Bielik 4.5B en Q8_0 (5,3 GB). La variante Q4_K_M de 11B exige 7,5 GB, dejando un margen demasiado estrecho.
  • 12 GB de VRAM: Bielik 11B en Q4_K_M o Q5_K_M (entre 7,5 y 8,6 GB), lo que otorga margen para ampliar la ventana de contexto sin desbordar la memoria.
  • 16 GB de VRAM: Bielik 11B en Q6_K (9,7 GB) o la versión Q4_K_M explotando su ventana máxima de 32.768 tokens (13,0 GB de VRAM).
  • 24 GB de VRAM: Bielik 11B en Q8_0 incluso con 32.768 de contexto (17,7 GB) o modelos notablemente superiores, como he comprobado al analizar arquitecturas como Gemma 4 31B en local en Q4_K_M.

Cómo comparar cuantizaciones tú mismo paso a paso

  1. Descarga el ejecutable de llama.cpp desde el GitHub de ggml-org (el paquete compilado con soporte CUDA para gráficas NVIDIA) y descomprímelo en una carpeta local, por ejemplo D:\llama-cuda.
  2. Descarga 2 o 3 cuantizaciones del modelo que desees analizar a un directorio de trabajo, usando el cliente oficial: hf download speakleash/Bielik-11B-v3.0-Instruct-GGUF Bielik-11B-v3.0-Instruct.Q4_K_M.gguf --local-dir D:\modele.
  3. Verifica la integridad de los archivos con PowerShell ejecutando Get-FileHash D:\modele\*.gguf y coteja el valor SHA256 con el que figura en Hugging Face.
  4. Prepara un archivo .txt en codificación UTF-8 con varios miles de palabras de un texto que el modelo no haya memorizado previamente durante su entrenamiento.
  5. Ejecuta el script automatizado para obtener una tabla comparativa con velocidad, tamaño y perplejidad junto a un informe en CSV.

Script listo para usar: porownaj-kwantyzacje.ps1

Comprobé el funcionamiento del script el 17 de octubre en un directorio limpio con dos cuantizaciones de Bielik 1.5B. Evaluado exclusivamente sobre procesador (-Warstwy 0), Q4_K_M arrojó una perplejidad de 54,31, prácticamente idéntica al 54,27 registrado al computar sobre la GPU en las pruebas principales:

# porownaj-kwantyzacje.ps1 - porównanie kwantyzacji GGUF w llama.cpp (
# Dla każdego pliku .gguf w folderze: rozmiar, szybkość (llama-bench: prompt 512 i generowanie 128 tokenów, 3 powtórzenia)
# i opcjonalnie perplexity na Twoim pliku tekstowym (llama-perplexity, kontekst 2048). Wynik: tabela + plik CSV.
#
# Użycie (PowerShell):
#   powershell -ExecutionPolicy Bypass -File .\porownaj-kwantyzacje.ps1 -Modele D:\modele -Llama D:\llama-cuda -Tekst D:\tekst.txt
# -Modele  folder z plikami .gguf (różne kwantyzacje tego samego modelu)
# -Llama   folder z llama-bench.exe i llama-perplexity.exe (paczka llama.cpp z GitHuba ggml-org, wersja CUDA dla kart NVIDIA)
# -Tekst   (opcjonalnie) plik .txt w UTF-8, najlepiej 5-20 tysięcy słów po polsku; bez niego tylko szybkość
# -Warstwy (opcjonalnie) ile warstw na GPU, domyślnie 99 = wszystkie
param(
    [Parameter(Mandatory = $true)][string]$Modele,
    [Parameter(Mandatory = $true)][string]$Llama,
    [string]$Tekst = "",
    [int]$Warstwy = 99
)
$ErrorActionPreference = "Continue"   # llama.cpp pisze logi na stderr - "Stop" w PowerShell 5.1 przerwałby skrypt
$bench = Join-Path $Llama "llama-bench.exe"
$ppl = Join-Path $Llama "llama-perplexity.exe"
if (-not (Test-Path $bench)) { throw "Nie ma $bench - podaj folder z rozpakowanym llama.cpp w -Llama" }
$pliki = Get-ChildItem -Path $Modele -Filter *.gguf | Sort-Object Length -Descending
if ($pliki.Count -eq 0) { throw "W folderze $Modele nie ma plików .gguf" }
if ($Tekst -and -not (Test-Path $Tekst)) { throw "Nie ma pliku tekstowego $Tekst" }

$wyniki = @()
foreach ($p in $pliki) {
    Write-Host "== $($p.Name)" -ForegroundColor Cyan
    $w = [ordered]@{ Plik = $p.Name; GB = [math]::Round($p.Length / 1e9, 2); Prompt_tok_s = ""; Generowanie_tok_s = ""; Perplexity = "" }

    # 1. Szybkość: llama-bench zwraca JSON (jedna pozycja dla pp512, druga dla tg128)
    $json = & $bench -m $p.FullName -p 512 -n 128 -r 3 -ngl $Warstwy -o json 2>$null | Out-String
    $start = $json.IndexOf("[")
    if ($start -ge 0) {
        foreach ($e in ($json.Substring($start) | ConvertFrom-Json)) {
            if ($e.n_prompt -gt 0) { $w.Prompt_tok_s = [math]::Round($e.avg_ts, 1) } else { $w.Generowanie_tok_s = [math]::Round($e.avg_ts, 1) }
        }
    } else { Write-Host "llama-bench nie zwrócił wyniku (za mało VRAM? spróbuj -Warstwy 20)" -ForegroundColor Yellow }

    # 2. Perplexity (im niżej, tym lepiej; porównuj tylko pliki tego samego modelu na tym samym tekście)
    if ($Tekst) {
        $log = & $ppl -m $p.FullName -f $Tekst -c 2048 -ngl $Warstwy 2>&1 | Out-String
        $m = [regex]::Match($log, "Final estimate: PPL = ([\d.]+)")
        if ($m.Success) { $w.Perplexity = [double]::Parse($m.Groups[1].Value, [Globalization.CultureInfo]::InvariantCulture) }
        else { Write-Host "llama-perplexity: brak wyniku (tekst za krótki? potrzeba min. ok. 4100 tokenów)" -ForegroundColor Yellow }
    }
    $wyniki += [pscustomobject]$w
    Writ

Si prefieres gestionar tus modelos mediante Ollama no necesitas realizar conversiones manuales: la orden ollama run SpeakLeash/bielik-11b-v3.0-instruct:Q4_K_M descarga exactamente el mismo binario publicado en Hugging Face, como he comprobado revisando el sha256 de las capas en el registro del software.

Preguntas frecuentes

¿Qué es un archivo GGUF?

Es el formato de archivo diseñado para ejecutar modelos de lenguaje en llama.cpp y sus derivados, como LM Studio u Ollama. Contiene en una sola estructura los tensores del modelo, el tokenizador y las directrices de chat necesarias.

¿Qué implica la cuantización de un modelo?

Consiste en almacenar los pesos utilizando menos bits, por ejemplo reduciendo de 16 a entre 4 y 8 bits. Esto permite que el modelo requiera hasta tres veces menos VRAM y funcione con mayor rapidez a cambio de una pérdida marginal de precisión matemática.

¿Cuándo conviene elegir Q4_K_M frente a Q8_0?

Si el modelo en Q8_0 entra holgadamente en tu memoria junto al contexto que necesitas, puedes utilizarlo sin problemas. Sin embargo, priorizar un modelo con mayor número de parámetros en Q4_K_M ofrecerá mejores respuestas que uno pequeño en Q8_0 ocupando un espacio similar en VRAM.

¿Degrada la cuantización las respuestas del modelo?

En modelos de tamaño medio como 11B, la variante Q4_K_M mantiene casi inalterada la perplejidad y las capacidades lógicas frente al original. La degradación severa solo se hace evidente al bajar a Q3 o Q2, o cuando se aplican compresiones agresivas a modelos excesivamente pequeños como los de 1.5B.

¿Dónde se deben descargar los archivos GGUF de forma segura?

Siempre debes descargarlos de los repositorios oficiales de los creadores en Hugging Face o de espacios verificados en Ollama. Conviene revisar y cotejar las sumas SHA256 de los archivos para evitar versiones obsoletas o mal empaquetadas compartidas por terceros.

Google · Tus fuentesBrilla más alto en tu Google - con un solo clicAñadir a fuentes preferidas →

Fuentes

Comprobado el 17 de octubre de 2026.

Kinetyra

// read next

More on this from FULGOR

lee tambiénHiggsfield Face Swap y Recast: guía completa y costes en 2026herramientas de iaHiggsfield Face Swap y Recast: guía completa y costes en 2026Analizamos en detalle cómo funcionan Higgsfield Face Swap, Character Swap y Recast.

Más leídos

  1. 1Para quién es GPT-6 Astra y quién debería elegir otro modelo
  2. 2Eleven v4: test en español, precio y comparativa con v4 Turbo
  3. 3Claude Sonnet 5.5 precio: cuánto cuesta en 2026
// mapa del sitio
fulgor en números 0textos en el archivo0noticias de los últimos 7 días0modelos de vídeo en el observatorio
🎬 Cine IA: Higgsfield AI DoP Presets de Cámara y Calculadora • Código Descuento Higgsfield AI -50% • Higgsfield vs Kling AI
× ‹ ampliación ›