Saltar al contenido
Fantástico Mundo de Jon
RSS

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

Un modelo de 27B que consume 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é tarjetas quedan fuera.

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

es Traducción automática por mistral-small3.2:24b, 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 el config.json de él la cuenta no cierra del modo esperado. Gasta la mitad del KV cache de un Llama 3 8B — un modelo tres veces y media más pequeño.

El motivo 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 plena
solo 16 de ellas
Cabeceras KV
4 (GQA 24:4)
Dimensión de la cabecera
256
Contexto nativo
262.144 tokens

La línea que lo 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 plena. Las otras 48 usan atención lineal.

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

  • Atención plena guarda un par clave/valor por token, en cada capa. Es el KV cache, y él 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. Duplica el contexto y ese estado no cambia de tamaño.

O sea: 48 de las 64 capas simplemente no participan del crecimiento de memoria. Quien aplique la fórmula usual — la del post anterior sobre VRAM — sobre las 64 capas va a errar 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 fila es un contrafactual: lo que el mismo modelo costaría si todas las capas fueran de atención plena.

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:

Cuantizació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 del llama.cpp. El Ollama publica qwen3.6:27b con 17 GB en Q4_K_M — la cuenta cuadra en el 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 el 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 118k
RTX 5090 · 32 GiB 34,4 16,3 249k
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 + KV cache a 64 KiB/token + 1 GB de overhead. Los pesos entran sin redondear (17,03 GB, y no los 17,0 exhibidos en la tabla arriba) — rehaciendo la cuenta con 17,0 la columna de sobra cambia en el primer decimal, y la de contexto no cambia. 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 se queda fuera por 0,8 GB — menos del 5% de la memoria de la placa. Los pesos solos ocupan 17,03 de los 17,18 GB que ella tiene; sobran 152 MB para runtime y contexto, lo que no da ni para cargar.

Es el tipo de margen que hace que alguien compre la placa equivocada, y la trampa tiene dos partes. La unidad engaña a favor de la placa: los “16 GB” de la caja son 16 GiB, o sea 17,18 GB decimales — y de repente un modelo “de 17 GB” parece caber. Los pesos sí caben. Lo que no cabe es lo que viene después de ellos: el KV cache y el overhead del runtime no son opcionales, y no aparecen en ninguna etiqueta.

Lo que se puede reproducir ahora

La parte aritmética de este post usted verifica solo, sin descargar 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 su propia placa después de descargar:

ollama pull qwen3.6:27b

# Con contexto declarado — el patrón del tiempo de ejecución no es lo que vas a usar
OLLAMA_CONTEXT_LENGTH=131072 ollama run qwen3.6:27b "ok"

# Cuánto se reservó en realidad y si quedó algo en la CPU
ollama ps
nvidia-smi --query-gpu=memory.used,memory.total --format=csv

Lo que aún no sé

Siendo explícito sobre la frontera entre lo que este post prueba y lo que él 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 por el comando arriba.

Aún no medido: el estado de las capas lineales, el consumo real en la GPU después de cargado, 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 pregunta buena. Un modelo que promete 262k de contexto y cabe en una 4090 es noticia; si él recuerda lo que estaba en el token 30 mil cuando llega al 200 mil es otra conversación, y nadie responde eso con aritmética.

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


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