Saltar al contenido
Fantástico Mundo de Jon
RSS

Qwen3.6 27B: cuánta VRAM necesita realmente

Un modelo de 27B que gasta la mitad del KV cache de un Llama 3 8B. La arquitectura híbrida rompe el cálculo habitual — y decide, por menos de 1 GB, qué placas quedan fuera.

¿Con prisa? Pide el TL;DR a Claude — lee la página y la resume.

es Traducción automática por qwen3:32b, revisada por el autor. Leer el original en portugués

El Qwen3.6 27B salió en abril de 2026 como modelo denso, licencia Apache 2.0, 262 mil tokens de contexto nativo y entrada multimodal. Denso de 27B suele significar “olvida, no cabe en tu placa”.

Solo que al abrir su config.json la cuenta no cierra como se esperaría. Gasta la mitad del KV cache de un Llama 3 8B — un modelo tres veces y media más pequeño.

La razón está en una línea de la configuración que casi nadie lee.

Qwen3.6-27B · del config.json oficial

Parámetros
27,8 B (denso)
Capas
64
Atención completa
solo 16 de ellas
Cabezas KV
4 (GQA 24:4)
Dimensión de cabeza
256
Contexto nativo
262.144 tokens

La línea que cambia todo

En el config.json, entre las claves comunes, está esta:

"full_attention_interval": 4,
"layer_types": ["linear_attention", "linear_attention", "linear_attention", "full_attention", ...]

El modelo tiene 64 capas, pero solo una de cada cuatro usa atención completa. Las otras 48 usan atención lineal.

Esta distinción es lo más importante de este post, porque las dos se comportan de manera opuesta en memoria:

  • Atención completa guarda un par clave/valor por token, en cada capa. Es el KV cache, y crece sin parar a medida que avanza la conversación.
  • Atención lineal mantiene un estado de tamaño fijo, comprimiendo el pasado en un resumen de dimensión constante. Doble el contexto y ese estado no cambia de tamaño.

Es decir: 48 de las 64 capas simplemente no participan en el crecimiento de memoria. Quien aplique la fórmula usual — la del post anterior sobre VRAM — sobre las 64 capas se equivocará por un factor de cuatro.

El KV cache real

La fórmula sigue siendo la misma, cambiando solo cuántas capas entran en ella:

bytes por token = 2 × camadas_de_atenção_plena × cabeças_kv × dim_cabeça × bytes

2 × 16 × 4 × 256 × 2 = 65.536 bytes = 64 KiB por token

Sesenta y cuatro KiB. Para comparar, con la misma matemática:

Modelo Capas con KV KiB/token 128k de contexto (GB)
Llama 3 8B 32 de 32 128 17,18
Qwen3.6 27B (real) 16 de 64 64 8,59
Qwen3.6 27B si fuera denso 64 de 64 256 34,36
Aritmética a partir del config.json de cada modelo, con cache en FP16 — no es medición. La tercera línea es un contraste: lo que costaría el mismo modelo si todas las capas fueran de atención completa.

Un modelo de 27 mil millones de parámetros con la mitad del costo de contexto de uno de 8 mil millones. Es contraintuitivo, y es la razón por la cual este modelo cabe donde no debería caber.

Los pesos

Con 27,8 mil millones de parámetros:

Quantización Pesos (GB)
BF16 55,6
Q8_0 29,5
Q6_K 22,9
Q5_K_M 19,8
Q4_K_M 17,0
Bits por peso efectivos de los K-quants de llama.cpp. Ollama publica qwen3.6:27b con 17 GB en Q4_K_M — la cuenta coincide en la casa decimal, lo que es una buena señal de que los bits por peso usados aquí están correctos.

¿Cabe en tu placa?

Aquí la cuenta encuentra al hardware. Pesos en Q4_K_M, más el KV cache del contexto, más 1 GB de margen para el runtime:

Máquina Memoria (GB) Sobra p/ contexto (GB) Contexto posible
RTX 5070 · 12 GiB 12,9 no cabe
RTX 5070 Ti · 16 GiB 17,2 falta 0,8 GB
RTX 4090 · 24 GiB 25,8 7,7 115k
RTX 5090 · 32 GiB 34,4 16,3 243k
MacBook Pro M4 Max · 48 GiB 51,5 33,5 262k (techo)
Mini PC · 96 GiB 103,1 85,1 262k (techo)
Aritmética, no medición: pesos en Q4_K_M (17,0 GB) + KV cache a 64 KiB/token + 1 GB de overhead. No incluye el estado de las capas lineales ni lo que el sistema ya ocupa de la GPU. Números medidos vienen en el próximo post.

Mire la segunda línea. La 5070 Ti queda fuera por 0,8 GB — menos del 5% de la memoria de la placa. Los pesos solos ocupan 17,0 de los 17,2 GB que tiene; sobran 200 MB para runtime y contexto, lo que no alcanza ni para cargar.

Es el tipo de margen que hace que alguien compre la placa equivocada. Una placa de 16 GB parece cómoda para un modelo “de 17 GB” hasta que recuerdas que GB de archivo y GiB de placa no son la misma unidad, y aún faltan el cache y el overhead.

¿Qué se puede reproducir ahora

La parte aritmética de este post la puedes verificar tú mismo, sin bajar 17 GB:

# La configuración oficial, la fuente de todo lo anterior
curl -sL https://huggingface.co/Qwen/Qwen3.6-27B/raw/main/config.json \
  | python3 -c "
import json,sys
from collections import Counter
t = json.load(sys.stdin)['text_config']
tipos = Counter(t['layer_types'])
plenas = tipos['full_attention']
kv = 2 * plenas * t['num_key_value_heads'] * t['head_dim'] * 2
print('camadas:', t['num_hidden_layers'], dict(tipos))
print('KV por token:', kv, 'bytes =', kv // 1024, 'KiB')
"

Y, para verificar en tu propia placa después de bajar:

ollama pull qwen3.6:27b

# Con el contexto declarado: el valor por defecto del runtime no es el que vas a usar
OLLAMA_CONTEXT_LENGTH=131072 ollama run qwen3.6:27b "ok"

# Cuánto reservó de hecho, y si algo se fue a la CPU
ollama ps
nvidia-smi --query-gpu=memory.used,memory.total --format=csv

¿Qué aún no sé

Siendo explícito sobre el límite entre lo que este post prueba y lo que solo sugiere.

Probado aquí: la arquitectura híbrida, el KV cache de 64 KiB/token y lo que la aritmética dice sobre cada máquina. Todo derivado del config.json oficial, reproducible con el comando anterior.

Aún no medido: el estado de las capas lineales, el consumo real en la GPU después de cargar, tokens por segundo en cada máquina, y lo que la atención lineal cobra en calidad en un contexto de 200 mil tokens — porque comprimir el pasado en un estado fijo no es gratis, y es justamente la prueba que interesa.

Esta última es la buena pregunta. Un modelo que promete 262k de contexto y cabe en una 4090 es noticia; si recuerda lo que estaba en el token 30 mil cuando llega al 200 mil es otra conversa, y nadie responde eso con aritmética.

En el próximo post lo mido, en las seis máquinas. La cuenta dice lo que cabe; solo la medición dice lo que presta.


Fuentes: config.json oficial en Hugging Face · anuncio del modelo · qwen3.6:27b en Ollama