Benchmarks dual-GPU (2,39x), Flash Attention +171%, Q8 vs Q4, thinking budget 45K, multi-stream 2,91x.

Meta descripción: Benchmarks dual-GPU completos (RTX 5080 vs 4060 Ti, ratio de ancho de banda 1:1), Flash Attention +171 %, Q8 vs Q4 en 16 GB, un thinking budget de hasta 45.000 tokens y generación paralela multi-stream que divide por 3 el tiempo de escritura de código.
Cuando el equipo de SparkLLM nos contactó para agradecernos nuestra cobertura del 1024 Developer Festival, nos invitaron a realizar un análisis práctico con su soporte técnico. Nos tomamos la invitación muy en serio: en una sola tarde, descargamos, configuramos, medimos y diseccionamos Spark-X2.6-4B en nuestro banco de pruebas. Lo que descubrimos va mucho más allá de una simple prueba de velocidad.
No es un modelo convencional. Es un modelo de razonamiento nativo en un formato compacto de 4B, diseñado para hardware doméstico, con un thinking budget que puede superar los 45.000 tokens por problema. Evaluarlo como un modelo clásico (zero-shot, temperatura 0, presupuesto de 2.048 tokens) produce resultados engañosos. Aquí explicamos por qué y cómo sacarle el máximo partido.
Nuestro equipo es deliberadamente asimétrico para aislar las variables de hardware:
Ambas tarjetas disponen exactamente de 16 GB de VRAM. En Q8_0, el modelo ocupa 4,07 GB: entra por completo en la memoria junto a su KV cache en cualquiera de las dos GPU, sin intercambio con RAM o disco. Esto permite medir el impacto puro del ancho de banda de memoria.
Aislamos el modelo en cada tarjeta (-dev cuda0 frente a -dev cuda1) en Q4_K_M, con 32.768 tokens de contexto y Flash Attention activado:
La ley del ancho de banda: La relación de velocidad en generación (184,5 vs 77,2 t/s = 2,39×) refleja con gran exactitud la diferencia de ancho de banda teórico entre la RTX 5080 (~1.000 GB/s GDDR7) y la RTX 4060 Ti (288 GB/s GDDR6). Para un modelo pequeño totalmente residente, la fase de generación depende al 100 % de la memoria.
A 184,5 tokens/segundo, la RTX 5080 genera 500 palabras en menos de 3 segundos. La 4060 Ti a 77,2 t/s sigue siendo perfectamente ágil para el uso cotidiano de agentes locales.
Comprobamos el impacto de Flash Attention (-fa on frente a -fa off) en la RTX 5080:
Sin Flash Attention, la ingesta de prompts largos es 6 veces más lenta y el tiempo hasta el primer token se dispara. Para desplegar Spark-X2.6-4B en local, -fa on es estrictamente obligatorio.
La mayoría de registros comunitarios seleccionan Q4_K_M por defecto para garantizar compatibilidad con GPU de 6 GB. En una tarjeta de 16 GB, ese recorte de precisión es innecesario:
La relación de velocidad (184,5 / 147,5 = 1,25×) coincide exactamente con la diferencia de peso del modelo (4,07 / 3,29 = 1,24×).
Por qué gana Q8_0 en 16 GB: Incluso con 65.536 tokens de contexto, consume menos de 7 GB de VRAM, dejando más de 9 GB libres. A 147,5 t/s entrega más de 8.800 palabras por minuto, conservando la precisión que se degrada drásticamente en cuantizaciones de 4 bits en modelos sub-7B.
Spark-X2.6-4B es un modelo de razonamiento profundo que necesita espacio mental para estructurar soluciones.
#### Trampa 1: La amputación zero-shot
Evaluar un modelo de razonamiento nativo con entornos clásicos (temperatura 0, --reasoning off, límite de 2.048 tokens) equivale a cortar sus capacidades lógicas. Los modelos 4B de razonamiento dependen de su bloque de pensamiento interno. Privarles de ese borrador los convierte en adivinadores de tokens. Recomendación: usar temperatura 1.0, top_p 0.95 y un margen amplio de tokens.
#### Trampa 2: El límite de tokens
Los datos oficiales de iFlytek muestran que el modelo genera reflexiones extensas:
Si limitas max_tokens a 16.000, el modelo gasta todo su presupuesto dentro de la etiqueta <think> antes de cerrarla y escribir el código. El sistema notifica « no code block », un fallo ficticio causado por corte prematuro.
#### Trampa 3: La paradoja del overthinking
Los resultados oficiales muestran una divergencia notable:
En matemáticas, pensar más mejora el resultado. En código ocurre lo contrario: Low supera a High. Con más de 58.000 tokens de pensamiento, un modelo 4B tiende a sobre-diseñar, inventar casos límite innecesarios y desviarse de las firmas de función. Para programar, el modo Low (~42.000 tokens) es el punto óptimo.
C'est la découverte la plus excitante de la journée.
#### El problema: El cuello de botella secuencial
Un LLM escribe archivos de forma lineal: token tras token. A 147 t/s, un archivo de 2.000 tokens requiere 14 segundos. Mientras tanto, los Tensor Cores de la GPU están inactivos el 70 % del tiempo esperando transferencias de memoria.
TensorFold demostró que las GPU Blackwell superan los 700 tokens/s combinados con 4 flujos concurrentes. Nos planteamos: ¿puede un único desarrollador aprovechar múltiples flujos para escribir un archivo 3 veces más rápido?
#### La solución: Parallel AST Chunking
#### La prueba real: fast_stats_engine.py (4 clases estadísticas complejas)
Tiempo de espera del desarrollador: dividido por 2,91×.
Detalle de los 4 flujos en la RTX 5080:
El archivo final es 100 % válido (bytecode compilado), syntaxicamente limpio, y el desarrollador esperó 2,3 segundos en lugar de 7 segundos.
#### Por qué funciona
Cuando 4 peticiones llegan simultáneamente, la GPU carga los 4 GB de pesos una sola vez, pero los aplica a los cálculos de los 4 usuarios a la vez (GEMM matriz-matriz en vez de matriz-vector). Los Tensor Cores finalmente despiertan. Por el mismo coste de lectura de memoria, la GPU genera 4 tokens en vez de uno.
Spark-X2.6-4B anuncia un contexto arquitectónico de 1.048.576 tokens. Pero, ¿qué se puede hacer realmente en una tarjeta doméstica de 16 GB?
En llama-server, el flag -c define el contexto total repartido entre los slots -np:
Pretender cargar 1M de contexto para programar carece de sentido: 1M de tokens en FP16 KV pesa 43 GB. Pero en una tarjeta de 16 GB, se pueden ejecutar 2 slots de 131k tokens o 4 slots de 65k tokens permaneciendo 100 % en GDDR7. Con 65k o 131k tokens por slot, el thinking budget del modelo nunca se ve amputado.
Al revisar los benchmarks oficiales de iFlytek, se comprende de inmediato la vocación de este modelo:
Spark-X2.6-4B no está pensado para resolver adivinanzas de formato de cadenas aislado del mundo: es un agente equipado para el mundo real. Destaca cuando tiene acceso a herramientas, un intérprete de Python, servidores MCP o un navegador.
El comando llama-server optimizado (tarjeta de 16 GB):
llama-server.exe -m Spark-X2.6-4B-Q8_0.gguf \ --host 127.0.0.1 --port 8650 \ -dev cuda0 -ngl 99 \ -c 262144 -np 4 -fa on -cb \ --batch-size 2048 --ubatch-size 512 \ --threads 16 --reasoning on
Los hiperparámetros de inferencia:
Bloque llama-swap (config.yaml):
Spark-X2.6-4B: aliases: [Spark-X2.6-4B, Spark-4B] cmd: | python run_model.py llama-server.exe -m Models/Spark-X2.6-4B-Q8_0.gguf --port ${PORT} --host 127.0.0.1 --threads 16 -np 4 -c 262144 -fa on --batch-size 2048 --ubatch-size 512 -ngl 99 -dev cuda0 --reasoning on ttl: 300
Spark-X2.6-4B marca un punto de inflexión en el ecosistema open-weight. Demuestra que un modelo de 4 mil millones de parámetros entrenado nativamente para razonar puede competir con arquitecturas de 9B a 12B en tareas de agentes y herramientas. En una RTX 5080 convencional, entrega 184 t/s en individual y permite, gracias al multi-stream, generar módulos completos de código en 2,3 segundos.
No es solo un buen modelo 4B: bien configurado, es uno de los motores locales más ágiles, económicos y estimulantes que hemos probado este año.
Al equipo de [SparkLLM](https://x.com/SparkLLM) / [XHToken](https://github.com/XHToken): gracias por la invitación. Ha sido un placer descubrir la profundidad de vuestro trabajo.
Enlace a nuestro artículo inicial: [Spark-X2.6-4B Release](https://chats-llm.com/en/blog/spark-x2-6-4b-release)
Modelo: [XHToken/Spark-X2.6-4B-GGUF](https://huggingface.co/XHToken/Spark-X2.6-4B-GGUF) · GitHub: [github.com/XHToken](https://github.com/XHToken) · X: [@SparkLLM](https://x.com/SparkLLM)
Agradecimientos a la comunidad LocalLLaMA y al ecosistema llama.cpp.